Ich habe gerade mit pyparsing
gestartet und ich habe Probleme mit Zeilenumbrüchen.pyparsing und Zeilenumbrüche
Meine Grammatik ist:
from pyparsing import *
newline = LineEnd() #Literal ('\n').leaveWhitespace()
minus = Literal ('-')
plus = Literal ('+')
lparen = Literal ('(')
rparen = Literal (')')
ident = Word (alphas)
integer = Word (nums)
arith = Forward()
parenthized = Group (lparen + arith + rparen)
atom = ident | integer | parenthized
factor = ZeroOrMore (minus | plus) + atom
arith << (ZeroOrMore (factor + (minus | plus)) + factor)
statement = arith + newline
program = OneOrMore (statement)
Wenn ich jetzt analysieren folgendes:
print (program.parseString ('--1-(-a-3+n)\nx\n'))
Das Ergebnis ist wie erwartet:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', 'x', '\n']
Aber wenn die zweite Zeile analysiert werden kann als Schwanz der ersten Zeile, die erste \n
ist wegmagiert?
Code:
print (program.parseString ('--1-(-a-3+n)\n-x\n'))
Tatsächliches Ergebnis:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '-', 'x', '\n']
Erwartetes Ergebnis:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', '-', 'x', '\n']
Eigentlich will ich nicht den Parser automatisch Aussagen zu kommen.
1. Was mache ich falsch?
2. Wie kann ich das beheben?
3. Was geschieht unter der Haube, die dieses Verhalten verursacht (was sicherlich sinnvoll ist, aber ich sehe es einfach nicht)?