首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么yytext跳过YACC中的第一个输入?

为什么yytext跳过YACC中的第一个输入?
EN

Stack Overflow用户
提问于 2019-04-26 18:04:01
回答 1查看 69关注 0票数 0

我一直在处理一个示例问题,为一个表达式构造一个三地址代码。但令我惊讶的是,YACC似乎跳过了我的第一个输入符号。我将附加一个图像与输出,以使它变得清晰。

规则并不太复杂,所以我似乎不明白问题出在哪里。

下面是我的lex文件:

代码语言:javascript
复制
%{
#include"y.tab.h"
%}
%%
[a-zA-Z]+ return ID;
[0-9]+ return NUM;
. return yytext[0];
%%
int yywrap(){return 1;}

下面是我的yacc文件:

代码语言:javascript
复制
%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char st[50][50];
extern char * yytext;
int top=-1;char t[5]="0";char temp[5];
void push();
void code();
%}
%token NUM ID
%left '+' '-'
%left '*' '/'
%%
S:' 'E
|' 'A'='E
;
A:ID{push();printf("yytext is %s\n",yytext);}
;
E:E'+'{push();}T{code();}
|E'-'{push();}T{code();}
|T
;
T:T'*'{push();}F{code();}
|T'/'{push();}F{code();}
|F
;
F:ID{push();}
|NUM{push();}
;
%%
void push(){strcpy(st[++top],yytext);}

void code(){
strcpy(temp,"t");
strcat(temp,t);
t[0]++;
printf("%s = %s %s %s \n",temp,st[top-2],st[top-1],st[top]);
top=top-2;
strcpy(st[top],temp);

}

int main(){yyparse();}
int yyerror(){exit(0);}

我希望A:ID产品中的打印将打印输入的ID,但它打印的是'=‘。下面是我的输出:my output

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 18:16:32

为了确保看到A,yacc必须前进(向前看)才能看到=。这将覆盖yytext中的第一个令牌。

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

https://stackoverflow.com/questions/55865265

复制
相关文章

相似问题

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