首页 > 解决方案 > 如何在 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 节点的父节点。

标签: abstract-syntax-treesmalltalkpharoconcrete-syntax-treesmacc

解决方案


推荐阅读