c - 当运算符和操作数不在同一个生产中时,如何创建抽象语法树节点?
问题描述
因此,在所有 AST 示例的情况下,都有以下类型的产生式:
expr -> expr "+" expr;
expr -> expr "-" expr;
And in this case it's easy to create a new node like this:
expr: expr "+" expr {newNode("+",$1,$3);}
;
现在我的语法有以下实现:
assignment:IDENTIFIER '=' expression ';'
;
expression:term expression_1
;
expression_1: '+' term expression_1 |
'-' term expression_1 |
;
term: factor term_1
;
term_1: '*' factor term_1 |
'/' factor term_1 |
;
factor: IDENTIFIER |
'(' expression ')' |
NUM | FNUM | STRING
;
在这里,在创建一个新节点时,我如何获取第一个操作数(在以前的生产中),并将其提供给一个 newNode 函数,该函数将具有运算符和第二个操作数(这两个都在不同的生产中)?
解决方案
推荐阅读
- azure - Terraform 应用 - 忽略成本估算
- .net-core - Azure Functions IAsyncCollector 无法发送服务总线消息正文
- android - 新项目创建“错误”项目“项目名称”不是基于 Gradle 的项目”
- javascript - 如何确保我的 threejs 网格仅在 x 上跟随我的鼠标?
- node.js - 从 jsonb 中查看带有 IN 的 TypeORM SELECT
- python - 熊猫在数据框中选择数据的范围/特征
- python - 比较两个 DataFrame 并将它们之间的差异作为输出
- apache-spark - 有谁知道测试三角洲湖/阿帕奇冰山的数据集?
- google-sheets - 让 Google 表格为我提供特定用户的文本模式?
- node.js - 应该使用什么 Visual Studio Code 扩展 API 在 Visual Studio Code 工作区中添加文件夹和移动文件?