如果这个问题对某些人来说很明显,请原谅我,但我正在尝试自学如何编写解释器。我在 python 中执行此操作,我已经编写了 Lexer。
我已经创建了我的令牌列表,我被困在哪里是构建解析树。我对从这里去哪里有了某种想法,但我不确定我的想法是否正确。
这是我在语法中为使用正则表达式的简单算术表达式定义的语法。
<a_expression> = <identifier | number> <operator> <identifier | number>
但是,如果我的解析器从我的词法分析器接收到与此模式匹配的标记流:
<identifier | number> <operator> <identifier | number> <operator> <identifier | number>
我该如何解析它,因为它有两个运算符和三个操作数,而不仅仅是两个操作数?
此外,如何处理 n 个操作数和 n-1 个运算符?我觉得这应该递归地完成,但我不确定是否需要为不同类型的表达式定义更多解析器或从这里开始。我可以将 n 个操作数和 n-1 个运算符的模式与正则表达式匹配吗?