题
我敢肯定,我会被告知这样做的另一种方式,但具体的原因,有许多工作要做这种方式。如果没有,我也不会被卡住:-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}};
和等等。