我正在使用 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 节点的父节点。