УМЕНЬШИТЬ ОШИБКИ может кто-нибудь помочь мне с этим кодом лекс и грамматики - PullRequest
1 голос
/ 13 июня 2019

Это моя грамматика:

%% Start : _PROGRAM _ID _SEMI Block
Block : Declarations BlockStatements
Declarations : _VAR _LPAREN VariableDeclarions _SEMI _RPAREN _ADD 
               | ;
VariableDeclarions : _ID _LPAREN _COMMA _ID _RPAREN _MULT _COLON TypeSpec
TypeSpec : _INTEGER 
           | _REAL
BlockStatements : _BEGIN Statements _END 
                  | ;
Statements : Assignment W 
             | ;
W : Statements
Statement : Assignment 
            | ;
Assignment : _ID _ASSIGN Expr _SEMI
Expr : Term _LPAREN _ADD Term _RPAREN _MULT 
       | Term _LPAREN _SUB Term _RPAREN _MULT 
       | Term _LPAREN _MULT 
       | Term _LPAREN _DIV _RPAREN _MULT
Term : _CONST 
       | _LPAREN Expr _RPAREN 
       | _ID

Я получаю сообщение об ошибке: 2 правила никогда не уменьшаются.

Может кто-нибудь помочь мне разобраться в проблеме?

Я не могу исправить грамматику.

1 Ответ

1 голос
/ 13 июня 2019

Когда я запускаю вашу грамматику через bison (после добавления отсутствующих %token определений), я получаю следующий вывод:

bla.y: warning: 1 nonterminal useless in grammar [-Wother]
bla.y: warning: 2 rules useless in grammar [-Wother]
bla.y:17.1-9: warning: nonterminal useless in grammar: Statement [-Wother]
 Statement : Assignment

Таким образом, согласно последней части вывода, Statement это тот, который бесполезен.Итак, давайте посмотрим, где Statement используется в грамматике: это не так.Вы определяете Statement, но никогда нигде не используете его.Вот почему это бесполезно, и почему вы получаете это предупреждение.

...