Я использую SMIE для анализа языка, который не всегда требует ;
, чтобы завершить утверждение. Если конец строки находится за пределами конструкции фигурной скобки ({}
, ()
, []
), а последний токен без комментария не был оператором, то \n
действует как терминатор утверждения. В противном случае, если конец строки находится в конструкции скобки или последний токен был оператором, то \n
действует как продолжение.Использование SMIE Emac для синтаксического анализа языка с опцией; для завершения заявления
Например,
variable := 172 + 92;
variable := 172 + 92
variable :=
172 + 92;
variable :=
172 + 92
variable := (172 +
92)
все действительные заявления. Но,
variable
:= 172 + 92
нет.
Как я могу кодировать это грамматика BNF для SMIE (или любого BNF для стартеров)? Или это невозможно?
Я понимаю, как я могу поместить это в лексер и добавить токены ;
, если это необходимо, но я предпочел бы поместить его в грамматику, если это возможно.