我刚开始pyparsing
我有换行问题。
我的语法是:
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)
现在当我解析以下内容时:
print (program.parseString ('--1-(-a-3+n)\nx\n') )
结果如预期:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', 'x', '\n']
但是当第二行可以被解析为第一行的尾部时,第一行\n
被魔法消失了吗?
Code:
print (program.parseString ('--1-(-a-3+n)\n-x\n') )
实际结果:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '-', 'x', '\n']
预期结果:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', '-', 'x', '\n']
实际上我不希望解析器自动连接语句。
1.我做错了什么?
2. 我该如何解决这个问题?
3.幕后发生了什么导致这种行为(这当然是明智的,但我只是看不到这一点)?