Грамматика для разбора выражения IF
-
08-07-2019 - |
Вопрос
Я создаю спецификацию 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/