bashlex icon indicating copy to clipboard operation
bashlex copied to clipboard

New lines between statements are not supported

Open sk- opened this issue 10 years ago • 1 comments

Parsing a file with new lines between statements is not supported. For the following script:

echo "Line 1"

echo "Line 3"

The sample program (the one in the README) generates the following error:

Traceback (most recent call last):
  File "sp.py", line 4, in <module>
    parts = bashlex.parse(open(sys.argv[1]).read())
  File "/usr/local/lib/python2.7/dist-packages/bashlex/parser.py", line 595, in parse
    part = _parser(s[index:], strictmode=strictmode).parse()
  File "/usr/local/lib/python2.7/dist-packages/bashlex/parser.py", line 641, in parse
    tree = theparser.parse(lexer=self.tok, context=self)
  File "/usr/local/lib/python2.7/dist-packages/bashlex/yacc.py", line 277, in parse
    return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc,context)
  File "/usr/local/lib/python2.7/dist-packages/bashlex/yacc.py", line 1079, in parseopt_notrack
    tok = self.errorfunc(errtoken)
  File "/usr/local/lib/python2.7/dist-packages/bashlex/parser.py", line 539, in p_error
    p.lexer.source, p.lexpos)
bashlex.errors.ParsingError: unexpected token 'echo' (position 1)

sk- avatar Feb 23 '15 18:02 sk-

This error is no longer persisting.

In a Python interactive session with the following setup:

Python 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bashlex
>>> bashlex.parse('echo "Line 1"\
... \
... echo "Line 3"')
[CommandNode(parts=[WordNode(parts=[] pos=(0, 4) word='echo'), WordNode(parts=[] pos=(5, 17) word='Line 1echo'), WordNode(parts=[] pos=(18, 26) word='Line 3')] pos=(0, 26))]

Even with additional newlines around the content:

>>> bashlex.parse('echo "Line 1"\
... \
... echo "Line 3"\
... ')
[CommandNode(parts=[WordNode(parts=[] pos=(0, 4) word='echo'), WordNode(parts=[] pos=(5, 17) word='Line 1echo'), WordNode(parts=[] pos=(18, 26) word='Line 3')] pos=(0, 26))]
>>> bashlex.parse('\
... echo "Line 1"\
... \
... echo "Line 3"\
... ')
[CommandNode(parts=[WordNode(parts=[] pos=(0, 4) word='echo'), WordNode(parts=[] pos=(5, 17) word='Line 1echo'), WordNode(parts=[] pos=(18, 26) word='Line 3')] pos=(0, 26))]

samlikins avatar May 17 '23 21:05 samlikins