0
私は、次のyacc
文法を持っている:警告:文法での非終端無用:const_declaration [-Wother]
%{
#include <stdio.h>
extern FILE* yyin;
extern char* yytext;
%}
%token VAR ID_NAME TYPE_STRING TYPE_BOOL TYPE_NUMBER CONST
%%
var_declaration: VAR ':' type ID_NAME ';' { printf("var\n"); }
;
const_declaration: CONST ':' type ID_NAME ';' {printf("const\n");}
;
type: TYPE_NUMBER
| TYPE_STRING
| TYPE_BOOL
;
%%
void yyerror (char const *s) {
fprintf (stderr, "%s\n", s);
}
int main(int argc, char** argv[])
{
yyparse();
return 0;
}
それは、この時点でフォームvar:<type> <name>;
と定数の宣言の変数宣言を可能にしなければならないことはほとんどの言語を記述する必要があります形式はです。私はyacc -vd grammar.y
を実行すると
私が取得: yaccの-vd grammar.y
grammar.y: warning: 1 nonterminal useless in grammar [-Wother]
grammar.y: warning: 1 rule useless in grammar [-Wother]
grammar.y:16.1-17: warning: nonterminal useless in grammar: const_declaration [-Wother]
const_declaration: CONST ':' type ID_NAME ';' {printf("const\n");}
^^^^^^^^^^^^^^^^^
grammar.y:16.20-67: warning: rule useless in grammar [-Wother]
const_declaration: CONST ':' type ID_NAME ';' {printf("const\n");}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
は、なぜそれがconst_declaration
ルールは無用であると言うのでしょうか?
あなたは正しいです。変数と定数の両方のルールは、(まだ定義されていない)プログラムルールのコンポーネントです。 – cristid9