我敢肯定,我会被告知这样做的另一种方式,但具体的原因,有许多工作要做这种方式。如果没有,我也不会被卡住:-P

我工作的脚本语言必须接受这样定义的变量:

Variables: x(1), y("hi"); 

这是一个要求。我写了一个小的语法之前,将让我确定他们这样

int x = 1;
string y = "hi"; 

但要求改变。的方式,这是我的语法看起来像在此之前

syntax sDeclareVar = t:sType i:tID "=" x:sExpression ";"  => DeclareVar { VariableName{i},Type{t},Value{x}};

STYPE的值要么System.String,的Int32等,然后在变量名,然后无论表达。然后,我预计这个成DeclareVar节点,并把它所需的参数,在代码中我把它解析为XML,然后就MGrammar解析XML和走过我的AST就好了。由于他们希望能够做到不变量声明类型,我是那种停留在现在做什么,即如何获取我的变量没有存储在适当的类声明的类型。任何帮助,将理解的那样,希望这一切是很有意义的。

有帮助吗?

解决方案 2

感谢马库斯,这让我在正确的轨道上,这是我终于实现了。

语法sDeclareVar = tVariableKeywords S:Common.List(sVarDeclaration) “;” =>的variablelist {语句{S}};

语法sVarDeclaration = S:sIntVarDeclaration =>取值                          | S:sStringVarDeclaration = S>;

语法sIntVarDeclaration = “”? I:TID “(” ×:tIntegerLiteral “)”=> DeclareVar {VARIABLENAME {I},{型类型{RawValue { “System.Int32”}}},{价值{IntegerLiteral RawValue {X}}}};

语法sStringVarDeclaration = “”? I:的tID '(' X:tStringLiteral ')'=> DeclareVar {VARIABLENAME {I},{型类型{RawValue { “System.String”}}},{价值{串文字RawValue {X}}}};

所以接近你上面有什么,这是容易储存在列表中的变量,虽然,我也不得不添加一些预测,以获得某些节点出来的图形,我并不需要的。感谢您的帮助。

其他提示

这要看你的语法的其余部分的结构,但你可能大致沿着线被卡住做的事情:

syntax sDeclareVar = "Variables:" sVarList ":";
syntax sVarList = sVarDeclaration ("," sVarList)?;
syntax sVarDeclaration = sIntVarDeclaration | sStringVarDeclaration | ...
syntax sIntVarDeclaration = i:tID "(" x:sIntegerLiteral ")"  => DeclareVar VariableName{i},Type{Int32},Value{x}};
syntax sStringVarDeclaration = i:tID "(" x:sStringLiteral ")"  => DeclareVar VariableName{i},Type{System.String},Value{x}};

和等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top