如何编程Lex和Yacc来解析部分文件

时间:2010-11-26 09:46:56

标签: yacc

让我举一个例子。 假设文本文件的内容如下:

功能fun1 {
int a,b,c;
功能fun2 {
int d,e;
char f g;
功能fun3 {
int h,i;
}
}

在上面的文本文件中,开括号的数量与结束括号的数量不匹配。整个文件不遵循语法。然而,部分函数fun2和fun3遵循语法。通常,文本文件非常大。

如果用户想要解析整个文件即函数fun1,那么程序应该输出错误,因为大括号不匹配。但是,如果用户只想解析部分文件,即函数fun2 / fun3,那么程序不应该因为大括号匹配而抛出错误。

我现在有一个问题 1.有没有办法让Lex和Yacc只加载一个    部分文件?如果是这样,那么它是如何完成的。

1 个答案:

答案 0 :(得分:2)

您使用的是野牛/弹性或普通的老式yacc / lex吗? 我和yacc玩了很长时间。

两种工具的技术答案都不同。

使用flex,您将不得不处理the buffer mechanism。 最终的代码将更清晰。

对于lex,你必须亲手完成。 至少你必须重新定义输入和输出宏。 您也可以尝试使用yyin和fseek

在解析器方面,您将不得不处理错误管理(yyerrok宏)和error令牌

http://dinosaur.compilertools.net/bison/bison_9.html#SEC81