d0c-s4vage / py010parser

A modified pycparser to parse 010 templates
Other
52 stars 9 forks source link

Parsing of the EXE template fails #26

Open GitMirar opened 4 years ago

GitMirar commented 4 years ago

Parsing of the EXE template (https://www.sweetscape.com/010editor/repository/files/EXE.bt) fails with

In [2]: dom = pfp.parse(data_file="/home/user/samples/d22563d7b913f3c64176301f3de41a16f604bde5e4d335405574485d1817
   ...: 3844", template_file="/home/user/Documents/SweetScape/010 Templates/Repository/EXE.bt")                                                            
---------------------------------------------------------------------------
ParseError                                Traceback (most recent call last)
<ipython-input-2-0ad089ec8cd1> in <module>
----> 1 dom = pfp.parse(data_file="/home/user/samples/d22563d7b913f3c64176301f3de41a16f604bde5e4d335405574485d18173844", template_file="/home/user/Documents/SweetScape/010 Templates/Repository/EXE.bt")

~/.venv/pfp/lib/python3.7/site-packages/pfp/__init__.py in parse(data, template, data_file, template_file, interp, debug, predefines, int3, keep_successful, printf)
     89         orig_filename=orig_filename,
     90         keep_successful=keep_successful,
---> 91         printf=printf,
     92     )
     93 

~/.venv/pfp/lib/python3.7/site-packages/pfp/interp.py in parse(self, stream, template, predefines, orig_filename, keep_successful, printf)
    731         self._template = template
    732         self._template_lines = self._template.split("\n")
--> 733         self._ast = self._parse_string(template, predefines)
    734         self._dlog("parsed template into ast")
    735 

~/.venv/pfp/lib/python3.7/site-packages/pfp/interp.py in _parse_string(self, string, predefines)
    876             parser=self._parser,
    877             # only keep the scopes if we ran the predefines
--> 878             keep_scopes=predefines,
    879         )
    880         res.ext = exts + res.ext

~/.venv/pfp/lib/python3.7/site-packages/py010parser/__init__.py in parse_string(text, parser, filename, optimize, predefine_types, use_cpp, cpp_path, cpp_args, keep_scopes)
    135         filename,
    136         predefine_types = predefine_types,
--> 137         keep_scopes     = keep_scopes
    138     )

~/.venv/pfp/lib/python3.7/site-packages/py010parser/c_parser.py in parse(self, text, filename, debuglevel, predefine_types, keep_scopes)
    176                 input=text,
    177                 lexer=self.clex,
--> 178                 debug=debuglevel)
    179 
    180         res.ext = predefined_ext + res.ext

~/.venv/pfp/lib/python3.7/site-packages/py010parser/ply/yacc.py in parse(self, input, lexer, debug, tracking, tokenfunc)
    263             return self.parseopt(input,lexer,debug,tracking,tokenfunc)
    264         else:
--> 265             return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc)
    266 
    267 

~/.venv/pfp/lib/python3.7/site-packages/py010parser/ply/yacc.py in parseopt_notrack(self, input, lexer, debug, tracking, tokenfunc)
   1045                         if errtoken and not hasattr(errtoken,'lexer'):
   1046                             errtoken.lexer = lexer
-> 1047                         tok = self.errorfunc(errtoken)
   1048                         del errok, token, restart   # Delete special functions
   1049 

~/.venv/pfp/lib/python3.7/site-packages/py010parser/c_parser.py in p_error(self, p)
   1950                 'before: %s' % p.value,
   1951                 self._coord(lineno=p.lineno,
-> 1952                             column=self.clex.find_tok_column(p)))
   1953         else:
   1954             self._parse_error('At end of input', '')

~/.venv/pfp/lib/python3.7/site-packages/py010parser/plyparser.py in _parse_error(self, msg, coord)
     52 
     53     def _parse_error(self, msg, coord):
---> 54         raise ParseError("%s: %s" % (coord, msg))
     55 

ParseError: /tmp/tmp3ckztvn9:163:77: before: 2
d0c-s4vage commented 4 years ago

Thank you for reporting this issue!

I have created the following two issues to track some specific problems that cropped up trying to use the EXE template:

This ticket will be closed once those two are complete

d0c-s4vage commented 4 years ago

@GitMirar #28 was fixed with release 0.1.16. #27 still needs to be fixed.

Run

pip install --upgrade py010parser

to pull down the latest version.