我正在编写一个解释器,它将我的 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 和循环语句的代码而苦苦挣扎。
问题
- 我是否必须构建一个 AST 树来处理条件和循环语句?
- 我一遍又一遍地用谷歌搜索,但没有找到关于如何在有或没有 AST 树的情况下做到这一点的明确教程,你知道这方面有什么好的教程吗?
提前致谢,