Я создаю спецификацию 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, или у вас есть предложения ??