我刚从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)
现在当我分析以下内容时:
^{pr2}$结果如预期:
['-', '-', '1', '-', ['(', '-', 'a', '-', '3', '+', 'n', ')'], '\n', 'x', '\n']
但是当第二行可以被解析为第一行的尾部时,第一行\n
就被magicked走了?在
代码:
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。到底是什么导致了这种行为(这当然是明智的,但我不明白其中的意义)?
“\n”通常作为空白字符跳过。如果希望'\n'有意义,则必须调用
setDefaultWhitespaceChars
将'\n'作为可跳过的空白删除(在定义任何pyparsing表达式之前必须执行此操作):这里发生的是,默认情况下解析器忽略任何空白。在定义任何元素之前,需要添加以下代码行:
正常的默认空白字符是“\t\r\n”,我相信。在
编辑:保罗打败了我。我应该在一起吃晚饭后精神恢复的。:)
相关问题 更多 >
编程相关推荐