我收到来自野牛的不完全了解的警告。

warning: empty rule for typed non-terminal, and no action


适用于我的每个非终结符。我不了解的部分是,如果不给它们指定类型,则会出现编译错误,指出所有$ ns都未定义。这是我的野牛文件的语法部分。

%union {
  char *sval;
}

%token <sval> PLUS TIMES LPAREN RPAREN ID
%type  <sval> s e t f
%%

s : e                   { cout << GetNonConstCharStar(std::string("(e ") + $1 + ")") << endl; }

e :
    | e PLUS t          { $$ = GetNonConstCharStar(std::string("(e ") + $1 + ")" + " (PLUS " + $2 + ") " + "(t " + $3 + ")" ); }
    | t                 { $$ = GetNonConstCharStar(std::string("(t ") + $1 + ")"); }
    ;
t :
    | t TIMES f         { $$ = GetNonConstCharStar(std::string("(t ") + $1 + ")" + " (TIMES " + $2 + ") " + "(f " + $3 + ")"); }
    | f                 { $$ = GetNonConstCharStar(std::string("(f ") + $1 + ")"); }
    ;

f :
    | LPAREN e RPAREN   { $$ = GetNonConstCharStar(std::string("(LPAREN \\")+ $1 + ") (e " + $2 + ") (RPAREN \\" + $3 + ")") ; }
    | ID                { $$ = GetNonConstCharStar(std::string("(ID ") + $1 + ")") ; }
    ;

%%

最佳答案

e :
    | e PLUS t
    | t


e: | e PLUS t | t,即什么都不是,或者是e PLUS tt。删除第一个|

关于c++ - 野牛警告:输入非终结符的空规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14887852/

10-10 19:28