我正在编写一个解释器,将我的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语句的代码。
问题
提前致谢,
答案 0 :(得分:0)
看起来像是通过嵌入在语法中的动作代码来检查if语句是否可行,但这是不推荐的处理方法,因为一旦语法变大,它就不会扩展。