나는 다음과 같은 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>;
및 상수 선언 양식은 const:<type> <name>;
입니다. 내가 yacc -vd grammar.y
을 실행하면
내가 얻을 : 은 yacc는
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
규칙이 쓸모가 있다고 않습니다에는 grammar.y -Vd?
당신 말이 맞습니다. 변수와 상수에 대한 규칙은 (아직 정의되지 않은) 프로그램 규칙의 구성 요소입니다. – cristid9