我正在构建一个MGrammar规范来解析一些伪代码,以寻找特定的信息位。我有大部分的规范工作,除了一个关键的元素。
伪代码支持if-then-else语法,但我一直无法找到一种令人满意的解析方法。确切的结构是...
IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF
Else和Elseif是可选的...Where。
到目前为止,我得到的是:`语法语句= r:ReturnClause => r|
I:i子句=> I|
ei:ElseifClause => ei |
e:ElseClause => e|
end:EndClause => end |
v:Expression => v;
语法IfClause = If名称:标识符运算符:运算符Then语句:语句=> If[名称,运算符,语句];
语法ElseifClause = Elseif名称:标识符运算符:运算符Then语句:语句=> ElseIf[名称,运算符,然后语句];
语法ElseClause = Else语句:语句=> Else语句;
语法EndClause = Endif;`
但是,'Then‘和'Else’后面的语句不够贪婪,只捕获解析树中的第一条语句。
有没有人尝试过使用MGrammar实现If语句的解析,或者有什么建议?
发布于 2010-06-02 17:12:51
您可以在Codeplex上的原型项目中找到(几乎)完整的C# 4.0语法。Dan Vanderboom在准备他的名为“原型”的新语言代码时写下了它。
也许这会有帮助:http://archetype.codeplex.com/
https://stackoverflow.com/questions/1437504
复制相似问题