首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MGrammar语法和变量声明

MGrammar语法和变量声明
EN

Stack Overflow用户
提问于 2009-03-27 21:12:28
回答 2查看 450关注 0票数 1

我相信我会被告知用另一种方式来做这件事,但出于特定的原因,它必须这样做。如果没有,我就不会被卡住了:-P

我正在使用的脚本语言必须接受如下定义的变量:

代码语言:javascript
复制
Variables: x(1), y("hi"); 

这是一个要求。在此之前,我写了一个小语法,让我这样定义它们

代码语言:javascript
复制
int x = 1;
string y = "hi"; 

但需求发生了变化。在我的语法出现之前是这样的

代码语言:javascript
复制
syntax sDeclareVar = t:sType i:tID "=" x:sExpression ";"  => DeclareVar { VariableName{i},Type{t},Value{x}};

SType值可以是System.String、Int32等,然后是变量名,然后是表达式。然后,我将其映射到一个DeclareVar节点中,并为其提供所需的参数,在代码中,我将其解析为DeclareVar,然后让MGrammar解析该XML,并很好地遍历我的AST。因为他们希望能够在不声明类型的情况下执行变量,所以我有点纠结于现在该做什么,例如,我如何将没有声明类型的变量存储到适当的类中。任何帮助都将不胜感激,希望这一切都是有意义的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-28 15:47:52

谢谢Markus,这让我走上了正确的道路,这就是我最终要做的。

语法sDeclareVar = tVariableKeywords s:Common.List(sVarDeclaration) ";“=> VariableList{语句{s}};

语法sVarDeclaration =s: syntax声明=> s|s:syntax声明=> s;

语法sIntVarDeclaration = ","?i:tID "(“x:t整型文字")”=> DeclareVar{VariableName{i},类型{RawValue{“System.Int32”},值{IntegerLiteral{RawValue{x};

语法sStringVarDeclaration = ","?i:tID '(‘x:tStringLiteral ')’=> DeclareVar{VariableName{i},类型{RawValue{“System.String”},值{StringLiteral{RawValue{x};

与上面的内容非常接近,所以将变量存储在列表中会更容易,而且我还必须添加一些投影,以便从图中提取一些不需要的节点。谢谢你的帮助。

票数 0
EN

Stack Overflow用户

发布于 2009-03-27 21:31:23

这取决于语法的其余部分是如何组织的,但你可能会被困在做一些大致如下的事情:

代码语言:javascript
复制
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}};

以此类推。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/691461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档