使用ANTLR语法生成if和for语句的代码

时间:2012-11-09 07:22:57

标签: c# code-generation antlr antlr3

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

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

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和loop语句的代码。

问题

  1. 我是否必须构建一个AST树来处理条件和循环 语句?
  2. 我一遍又一遍地用Google搜索,但没有找到明确的答案 关于如何使用或不使用AST树完成此操作的教程,是吗? 知道任何关于此的好教程吗?
  3. 提前致谢,

1 个答案:

答案 0 :(得分:0)

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