1

我正在编写一个解释器,它将我的 DSL 语言转换为 C#,然后将其编译并作为独立的可执行文件发布。我已经成功地处理了变量定义和一些基本的算术表达式计算。

到目前为止,我在没有生成 AST 树的情况下使用 ANTLR 完成了所有这些工作。我设法通过将动作代码嵌入到语法中来完成所有事情,如下所示:

statement
    : var_declaration
    | if_statement
    ;
// k = var or k = var.something.somethingelse
var_declaration
    : 
    varType=ID varName=ID ASSIGN r=rvalue
    {
        if(variablesTable.ContainsKey(varName.Text)){
            // Variable ID not defined yet, cannot continue;
            ReportError("A local variable '"+varName.Text+"' is already defined");
            return;
        }
        if(r == null){ ReportError ("No r-value specified"); return;}
    }
    ;

if_statement
    : 'if' expression s1=statement ('else' s2=statement)?

statement
    :...
expression
    :...

我现在正在为如何处理和正确生成 if 和循环语句的代码而苦苦挣扎。

问题

  1. 我是否必须构建一个 AST 树来处理条件和循环语句?
  2. 我一遍又一遍地用谷歌搜索,但没有找到关于如何在有或没有 AST 树的情况下做到这一点的明确教程,你知道这方面有什么好的教程吗?

提前致谢,

4

1 回答 1

0

看起来好像可以通过语法中嵌入的动作代码来检查 if 语句,但这是不推荐的处理方法,因为一旦语法变大,它就不会扩展。

于 2012-11-18T19:10:05.757 回答