题
我正在构建一个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/