Parsing PLY解析器接受方括号和圆括号,但我只希望它接受圆括号

Parsing PLY解析器接受方括号和圆括号,但我只希望它接受圆括号,parsing,brackets,ply,Parsing,Brackets,Ply,我制作了一个lexer和解析器,可以进行基本的加法。在我的lexer中,LPAREN和RPAREN标记分别是(和),但出于某种原因,在解析器中,它也接受方括号[] 我的lexer中的标记定义是:“r')和r'(' 解析器中的正则表达式: 定义术语表达式(p): ''表达式:LPAREN表达式RPAREN'' p[0]=p[2] 有人知道如何更改它,使其只接受圆括号吗?尝试转义括号,如图所示: 另外,请按照@sepp2k的说明发布。这可以确保其他人(刚刚看到这个问题的人)能够更好地理解上下文。请发

我制作了一个lexer和解析器,可以进行基本的加法。在我的lexer中,LPAREN和RPAREN标记分别是(和),但出于某种原因,在解析器中,它也接受方括号[]

我的lexer中的标记定义是:“r')和r'('

解析器中的正则表达式: 定义术语表达式(p): ''表达式:LPAREN表达式RPAREN'' p[0]=p[2]


有人知道如何更改它,使其只接受圆括号吗?

尝试转义括号,如图所示:


另外,请按照@sepp2k的说明发布。这可以确保其他人(刚刚看到这个问题的人)能够更好地理解上下文。

请发布一个。如果您使用实际模式
r')定义lexer规则,
r'(“
,lexer生成应该会失败,出现语法错误。我可以想象OP的模式中已经有反斜杠。当然,问题中没有反斜杠,但正如我在评论中所说,问题中显示的模式会导致语法错误,而不是OP所描述的问题。我怀疑是否有可能知道是什么导致OP的错误看不到真实代码时出现问题。是的,你是对的!它应该会立即失败并出现词法错误。OP可能在其他标记规则中有问题,因为p[0]=p[2]基本上忽略了匹配的括号,因此如果它们曾经匹配过,很容易错过。。。
t_LPAREN  = r'\('
t_RPAREN  = r'\)'