我正在构建一个MGrammar规范来解析一些寻找特定信息位的伪代码。除了1个重要元素外,我的大多数规范都在工作。

伪代码支持if-then-else语法,我一直无法找到解析它的令人满意的方法。确切的结构是......

IF表达式运算符表达式THEN
 语句1结果  声明2结果  Statementn结果 ELSEIF表达式运算符表达式THEN
 语句1结果  声明2结果  Statementn结果 ELSE结果  语句1结果  声明2结果  Statementn结果 ENDIF

...... Else和Elseif是可选的。

到目前为止我所拥有的是: `syntax Statement = r:ReturnClause => r |
i:IfClause =>我|
ei:ElseifClause => ei |
e:ElseClause => e |
结束:EndClause =>结束|
v:表达式=> v;

语法IfClause =如果name:Identifier operator:Operator Then语句:Statement =>如果[name,operator,Then [statement]];
语法ElseifClause = Elseif name:Identifier operator:Operator Then语句:Statement => ElseIf [name,operator,Then [statement]];
语法ElseClause = Else语句:Statement =>否则,[声明]点击 语法EndClause = Endif; `

然而,'Then'和'Else'之后的Statement并不够贪婪,只捕获解析树中的第一个语句。

是否有人尝试使用MGrammar实现If语句的解析或有任何建议?

有帮助吗?

解决方案

您可以在codeplex上的archetype项目中找到(几乎)完整的C#4.0语法。 Dan Vanderboom在准备他的新语言代码“Archetype”时写了这篇文章。

也许这有帮助: http://archetype.codeplex.com/

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