MGrammar для синтаксического анализа оператора IF

Я создаю спецификацию MGrammar для анализа некоторого псевдокода в поисках определенных фрагментов информации. У меня большая часть спецификаций работает за исключением 1 крутого элемента.

Псевдокод поддерживает синтаксис 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 являются необязательными.

Пока что у меня есть: `синтаксис Statement = r: ReturnClause => r |
i: IfClause => i |
ei: ElseifClause => ei |
e: ElseClause => e |
end: EndClause => end |
v: выражение => v;

синтаксис IfClause = If name: оператор идентификатора: оператор Then оператор:Statement => If[имя, оператор, Then[оператор]];
синтаксис ElseifClause = Elseif name: Идентификатор оператора: Оператор Тогда оператор: Оператор => ElseIf[имя, оператор, Тогда [оператор]];
синтаксис ElseClause = инструкция Else:Statement => Else[инструкция];
синтаксис EndClause = Endif; `

Тем не менее, оператор после "Тогда" и "Остальное" не является достаточно жадным и захватывает только первое утверждение в дереве разбора.

Кто-нибудь пытался реализовать разбор оператора If, используя MGrammar, или у вас есть предложения?

1 ответ

Решение

Вы можете найти (почти) полную грамматику C# 4.0 в проекте архетипа на codeplex. Дэн Вандербом написал это при подготовке своего нового языкового кода под названием "Архетип".

Может быть, это поможет: http://archetype.codeplex.com/

Другие вопросы по тегам