gpt4 book ai didi

c - YACC : symbol **** is used but, 未定义为 token ,没有规则

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:22 32 4
gpt4 key购买 nike

%{
#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 文件方面没有做错任何事情。所以,请帮助我!

这些是我收到的错误信息

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;}
^^^^

这是我包含的头文件

#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

最佳答案

token符号不能自己声明,必须用yacc来声明,比如

%token PLUS

等等

关于c - YACC : symbol **** is used but, 未定义为 token ,没有规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581152/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com