MGrammar для синтаксического анализа оператора IF - PullRequest
0 голосов
/ 17 сентября 2009

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

Псевдокод поддерживает синтаксис if-then-else, и мне не удалось найти удовлетворительный способ его синтаксического анализа. Точная конструкция ...

IF expression operator expression THEN<br> Statement1<br> Statement2<br> Statementn<br> ELSEIF expression operator expression THEN<br> Statement1<br> Statement2<br> Statementn<br> ELSE<br> Statement1<br> Statement2<br> Statementn<br> ENDIF

... Где Elseif и 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: Идентификатор оператора: Оператор Тогда оператор: Statement => ElseIf [имя, оператор, Then [оператор]];
синтаксис ElseClause = оператор Else: оператор => Else [оператор];
синтаксис EndClause = Endif; `

Однако оператор после 'Then' и 'Else' недостаточно жаден и захватывает только первое выражение в дереве разбора.

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

1 Ответ

0 голосов
/ 02 июня 2010

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

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

...