Я хотел бы написать переводчика в haskell для простого императивного языка. Для этого я сначала написал грамматику этого языка для инструмента BNFC (http://bnfc.digitalgrammars.com/).BNFC сгенерированная грамматика не работает на простейших примерах
Часть этой грамматики посвящена арифметике выражения, такие как:
EAdd. Expr ::= Expr "+" Expr ;
EMinus. Expr ::= Expr "-" Expr ;
EMul. Expr ::= Expr "*" Expr ;
ENum. Expr ::= Integer ;
Имея только, что я могу запустить инструмент BNFC и проверить его при условии сценария. Он успешно анализирует арифметические операции.
Однако, если добавить еще один раздел (скажем, с типами):
Tint. Type ::= "int" ;
А затем положить ехрг secion, арифметические операции больше не разобрать (при тестировании на 1 + 2 он говорит: «не удалось Анализировать. .. [некоторые токены здесь] синтаксическая ошибка в строке 1 до 1 + 2 ")
Почему это происходит? Как это исправить?
Перефразируя:
Почему такой gramar:
TInt. Type ::= "int" ;
EAdd. Expr ::= Expr "+" Expr ;
ENum. Expr ::= Integer ;
не разобрать правильно 1 + 1
с помощью bnfc?