Вопрос

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

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

оператор выражения IF THEN
 заявлении1
 оператор2
 Statementn
Выражение оператора ELSEIF выражение THEN
 заявлении1
 оператор2
 Statementn
ELSE
 заявлении1
 оператор2
 Statementn
ENDIF

... Где Elseif и Elseif являются необязательными.

Что я имею до сих пор: `Синтаксис Statement = r: ReturnClause = > r |
i: IfClause = > я |
ei: ElseifClause = > EI |
e: ElseClause = > е |
end: EndClause = > конец |
v: выражение = > v;

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top