2016-10-15 3 views
0

私のプログラムをyaccでコンパイルするとエラーが出る。 間接的な再帰などを使用しているかどうかはわかりません。 私はyaccであまり心配していません。 私のコードのルールセクションがある:私が得た文法で役に立たない非終端[-Wother]

stmtfor : exprfor OPENB CLOSEB { printf("\nValid For statement!\n"); }   | 
     exprfor OPENB stmtfor CLOSEB { printf("\nValid For statement!\n"); } | 
     exprfor  { printf("\nValid For statement!\n"); } 
     ; 

exprfor : FOR '(' ID '=' DIGIT DELIMITER ID COND DIGIT DELIMITER ID INC ')' | 
     FOR '(' ID '=' ID DELIMITER ID COND DIGIT DELIMITER ID INC ')'  | 
     FOR '(' ID '=' DIGIT DELIMITER ID COND ID DELIMITER ID INC ')'  | 
     FOR '(' ID '=' ID DELIMITER ID COND ID DELIMITER ID INC ')'   | 
     FOR '(' DELIMITER DELIMITER ')'          | 
     FOR '(' DELIMITER ID COND DELIMITER INC')'       | 
     FOR '(' DELIMITER DELIMITER INC ')' 
     ; 

stmtif : exprif OPENB CLOSEB ELSE OPENB CLOSEB { printf("\nValid if statement!\n"); } | 
     exprif OPENB CLOSEB { printf("\nValid if statement!\n"); } | 
     exprif OPENB stmtif CLOSEB { printf("\nValid if statement!\n"); } | 
     exprif OPENB stmtif CLOSEB ELSE OPENB stmtif CLOSEB { printf("\nValid if statement!\n"); } 
     ; 

exprif : IF '(' ID COND DIGIT ')' | 
     IF '(' ID COND ID ')'  | 
     IF '(' DIGIT COND DIGIT ')' | 
     IF '(' ID ')'    | 
     IF '(' DIGIT COND ID ')' 
     ; 

stmtwh : exprwh OPENB CLOSEB  { printf("\nValid while statement"); }  | 
     exprwh OPENB stmtwh CLOSEB { printf("\nValid while statement"); } | 
     exprwh { printf("\nValid while statement"); } 
     ; 

exprwh : WHILE '(' ID COND DIGIT ')' | 
     WHILE '(' ID COND ID ')' | 
     WHILE '(' DIGIT COND DIGIT ')' | 
     WHILE '(' DIGIT COND ID ')' | 
     WHILE '(' ID ')'   | 
     WHILE '(' DIGIT ')' 
     ; 
%% 

エラーは次のとおりです。

ond_rec.y: warning: 2 nonterminals useless in grammar [-Wother] 
    cond_rec.y: warning: 9 rules useless in grammar [-Wother] 
    cond_rec.y:21.1-6: warning: nonterminal useless in grammar: stmtwh  [-Wother] 
    stmtwh : exprwh OPENB CLOSEB  { printf("\nValid while   statement"); }  | 
    ^^^^^^ 
    cond_rec.y:21.17-22: warning: nonterminal useless in grammar: exprwh  [-Wother] 
    stmtwh : exprwh OPENB CLOSEB  { printf("\nValid while  statement"); }  | 
      ^^^^^^ 
    cond_rec.y:21.17-97: warning: rule useless in grammar [-Wother] 
    stmtwh : exprwh OPENB CLOSEB  { printf("\nValid while statement"); }  | 
      ^^^^^^^^^^ 
    cond_rec.y:22.25-105: warning: rule useless in grammar [-Wother] 
     exprwh OPENB stmtwh CLOSEB { printf("\nValid while statement"); } | 
        ^^^ 
    cond_rec.y:23.25-81: warning: rule useless in grammar [-Wother] 
     exprwh { printf("\nValid while statement"); } 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    cond_rec.y:26.17-43: warning: rule useless in grammar [-Wother] 
    exprwh : WHILE '(' ID COND DIGIT ')' | 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    cond_rec.y:27.25-48: warning: rule useless in grammar [-Wother] 
     WHILE '(' ID COND ID ')' | 
        ^^^^^^^^^^^^^^^^^^^^^^^^ 
    cond_rec.y:28.25-54: warning: rule useless in grammar [-Wother] 
     WHILE '(' DIGIT COND DIGIT ')' | 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    cond_rec.y:29.25-51: warning: rule useless in grammar [-Wother] 
     WHILE '(' DIGIT COND ID ')' | 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    cond_rec.y:30.25-40: warning: rule useless in grammar [-Wother] 
     WHILE '(' ID ')'   | 
        ^^^^^^^^^^^^^^^^ 
    cond_rec.y:31.25-43: warning: rule useless in grammar [-Wother] 
     WHILE '(' DIGIT ')' 
        ^^^^^^^^^^^^^^^^^^^ 

私はこのトピックに関する以前の記事を見てきましたが、それらのどれも私のために働くように見えるんN i'amありませんこれで間違っていることを理解することができます。

答えて

1

文法のどこにいてもstmtwhは使用されていないようです。それは、それ自身の定義だけで、どこにも現れません。

+0

いいえ使用していますstmtwh! – Omniverse10

+0

@ Omniverse10どこ? – sepp2k

+0

具体的には、エラーがあなたに伝えていることです。開始記号から 'stmtwh'または' exprwh'までのパスがないので、決して到達できないので、すべてのルールは「無駄」です。 –

関連する問題