首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bison文件会产生语法错误吗?

Bison文件会产生语法错误吗?
EN

Stack Overflow用户
提问于 2013-11-15 09:37:27
回答 1查看 2.8K关注 0票数 0

在我的yacc文件中,我有一个开始符号'Program‘,如下所示:

代码语言:javascript
运行
复制
Program: Declaration Statements E_O_F {/*Semantic Action*/};

E_O_F是flex返回的令牌,如下所示:

代码语言:javascript
运行
复制
<<EOF>> return E_O_F;

但是,当我编译我的文件时,总是会在lastline+1第四行报告语法错误。Lex文件:文件 Yacc文件:文件

输入: test.txt

代码语言:javascript
运行
复制
a=(b);
b=c+d/e;
a=3/5-2*4;
a=a-b;
if(a>b) 
{
    a=a+1;
}

我想我不会把

代码语言:javascript
运行
复制
<<EOF>>

标记正确。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2013-11-15 15:27:30

您不需要显式返回EOF令牌,您的语法不应该试图检测EOF

bison/yacc总是创建一个隐式开始规则:

代码语言:javascript
运行
复制
real_start: start <<EOF>>

其中start是您的开始生产,而<<EOF>>是令牌类型0

此外,flex总是在找到输入结束时返回0

因此,这两件事一起工作,使您不必在正常的事件过程中担心EOF。但是,如果您希望解析器只解析部分输入(在这个问题中似乎并非如此),它们会使生活复杂化。

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

https://stackoverflow.com/questions/19997853

复制
相关文章

相似问题

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