【发布时间】:2021-04-27 02:20:29
【问题描述】:
我正在尝试在我的解释器中实现 for 循环,现在我正尝试在解析器中实现一个令牌语句 continue 和 break。
考虑到我的词法分析器,
词法分析器
"break" -> TOKEN::TBREAK
"continue" -> TOKEN::TCONTINUE
我正在考虑通过解析实现它们的两种方法。
一种是有两个不同的节点被插入到 AST 中,称为BreakNode 和ContinueNode:
解析器 1
BreakGram -> TOKEN::TBREAK ';' = {new BreakNode();}
ContinueGram -> TOKEN::TCONTINUE ';' = {new ContinueNode();}
另一种方法是为一个令牌语句节点提供一个共享节点,插入令牌类型作为说明符,说明它将是什么类型的语句:
解析器 2
OneTokenStatement -> TOKEN::TBREAK ';' = {new OneTokenStatement(TOKEN::TBREAK);}
| TOKEN::TCONTINUE ';' = {new OneTokenStatement(TOKEN::TCONTINUE);}
其他语言(如 Java/Python)的其他语法如何处理这两个标记?它们是用 AST 中的不同节点(如示例 1)还是相同节点(示例 2)表示。
【问题讨论】:
标签: parsing compiler-construction abstract-syntax-tree interpreter