首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YACC :符号*被使用,但没有定义为令牌,也没有规则。

YACC :符号*被使用,但没有定义为令牌,也没有规则。
EN

Stack Overflow用户
提问于 2015-09-15 08:22:00
回答 1查看 5.8K关注 0票数 3
代码语言:javascript
复制
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "parser.h"
extern int yylval;
%}
%start E
%token number
%%
S   :E  {printf("%s",$1);}
    ;
E   :E PLUS T   {$$ = $1 + $3;}
    |T  {$$ = $1;}
    ;
T   :T STAR F   {$$ = $1 * $3;}
    |F  {$$ = $1;}
    ;
F   :LP E RP    {$$ = $2;}
    |number {$$ = $1;}
    ;
%%

yylex(){
    char ch;
    ch = getchar();

    switch(ch){
        case '+':
            return PLUS;
            break;
        case '*':
            return STAR;
            break;
        case '(':
            return LP;
            break;
        case ')':
            return RP;
            break;
        default:
            if(ch >= '0' && ch <= '9'){
                ch -= '0';
                yylval = ch;;
                return (number);
            }
            else
                return -1;
    }
}

void main(){
    yyparse();
}

下午,我在做关于如何使用yacc的作业,问题是我不知道如何在.y文件中适当地包含一个头文件。从我所看到的到描述如何编写.y文件的各个页面,我编写这个.y文件并没有做错什么。所以请救救我!

这些是我收到的错误信息

代码语言:javascript
复制
embedded@embedded-P15xEMx:~/Project/Compiler$ yacc parser.y
parser.y:19.10-11: error: symbol LP is used, but is not defined as a token and has no rules
 F  :LP E RP    {$$ = $2;}
     ^^
parser.y:13.12-15: error: symbol PLUS is used, but is not defined as a token and has no rules
 E  :E PLUS T   {$$ = $1 + $3;}
       ^^^^
parser.y:19.15-16: error: symbol RP is used, but is not defined as a token and has no rules
 F  :LP E RP    {$$ = $2;}
          ^^
parser.y:16.12-15: error: symbol STAR is used, but is not defined as a token and has no rules
 T  :T STAR F   {$$ = $1 * $3;}
       ^^^^

这是我所包含的头文件

代码语言:javascript
复制
#ifndef _PARSER_H_
#define _PARSER_H_

    #include <stdio.h>

    #define PLUS 1
    #define STAR 2
    #define LP 3
    #define RP 4
    #define number 5

#endif
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-15 08:27:40

标记符号不能由您自己声明,您必须使用Yacc来实现,例如

代码语言:javascript
复制
%token PLUS

等。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32581152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档