pyparsing和行跳转

2024-06-01 05:44:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚从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。到底是什么导致了这种行为(这当然是明智的,但我不明白其中的意义)?


Tags: newlineplusintegerpyparsingwordatomarithfactor
2条回答

“\n”通常作为空白字符跳过。如果希望'\n'有意义,则必须调用setDefaultWhitespaceChars将'\n'作为可跳过的空白删除(在定义任何pyparsing表达式之前必须执行此操作):

from pyparsing import *
ParserElement.setDefaultWhitespaceChars(' \t')

这里发生的是,默认情况下解析器忽略任何空白。在定义任何元素之前,需要添加以下代码行:

ParserElement.setDefaultWhitespaceChars(" \t")

正常的默认空白字符是“\t\r\n”,我相信。在

编辑:保罗打败了我。我应该在一起吃晚饭后精神恢复的。:)

相关问题 更多 >