【问题标题】:PLY parser accepts square and round brackets, but I only want it to accept round bracketsPLY 解析器接受方括号和圆括号,但我只希望它接受圆括号
【发布时间】:2021-04-08 14:40:25
【问题描述】:

我做了一个词法分析器和解析器来做基本的加法。在我的词法分析器中,LPAREN 和 RPAREN 标记分别是 ( 和 ),但由于某种原因,在解析器中,它也接受方括号 []。

我的词法分析器中的标记定义:'r')' 和 r'('

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

有谁知道如何修改它,让它只接受圆括号?

【问题讨论】:

  • 请发帖minimal reproducible example。如果您使用实际模式 r')'r'(' 定义词法分析器规则,则词法分析器生成应该会失败并出现语法错误。

标签: parsing brackets ply


【解决方案1】:

尝试转义括号,如official docs 中所示:

t_LPAREN  = r'\('
t_RPAREN  = r'\)'

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

【讨论】:

  • 我想 OP 在他们的模式中已经有了反斜杠。当然,问题中没有反斜杠,但正如我在评论中所说,问题中显示的模式会导致语法错误,而不是 OP 所描述的问题。我怀疑是否有可能在不查看真实代码的情况下知道导致 OP 问题的原因。
  • 是的,你是对的!它应该立即因词法错误而失败。 OP 可能在其他令牌规则中存在问题,因为 p[0] = p[2] 基本上无论如何都会忽略匹配的括号,所以如果它们被匹配很容易错过......
猜你喜欢
  • 2021-01-11
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 2011-01-12
  • 2016-11-07
相关资源
最近更新 更多