abstract-syntax-tree - 如何在 Pharo SmaCC 中将自定义节点添加到 AST?
问题描述
我正在使用 Pharo 在 SmaCC 中为 Java 语言的通用自定义节点创建 CST。我找到了语法(解析器和扫描器),并用几个例子对其进行了测试,创建抽象语法树完美。
但是,我需要使用自定义通用节点创建具体语法树,例如在每个时间节点上,对于我需要添加父节点 LOOP_STATEMENT 的节点。我找不到怎么做?可能吗?
我阅读了有关 SmaCC 和 Pharo 的所有信息,但在这里找不到示例或解决方案http://books.pharo.org/booklet-Smacc/html/Chapters/Smacc/SmaccAST.html
例如,我尝试在示例计算器代码上添加自定义 CST 节点。
这是 AST 语法
<whitespace> : \s+;
%left "+" "-";
%left "*" "/";
%right "^";
%annotate_tokens;
%root Expression;
%prefix AST;
%suffix Node;
Expression
: Expression 'left' "+" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "-" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "*" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "/" 'operator' Expression 'right' {{Binary}}
| Expression 'left' "^" 'operator' Expression 'right' {{Binary}}
| "(" Expression ")" {{}}
| Number
;
Number
: <number> {{Number}}
;
例如,我需要添加节点 SEPARATOR 作为每个括号的父节点。通过知道如何做到这一点,这将解决我的 Java 语法问题并将 LOOP_STATEMENT 添加为 while 节点的父节点。
解决方案
推荐阅读
- python - 为什么我不能在 Pandas 上创建具有不同移动平均窗口的两列?
- c - 将一个结构元素添加到另一个结构元素
- android - 从 Android c++ 端使用 .so 共享库时获取函数名称错误?(libAudioFlinger.so)
- php - 如何在 NGINX 上预解释 .html 文件中的 php?
- linux - 在 AWS 中自动计算 VM
- php - Htaccess 路由返回 404 not found
- bash - 创建自定义 `ls` 但仅供手动使用
- django - Django显示多个上传的文件
- python - Python Django:在 for 循环中过滤
- python - 动态算法的问题超时