从单独的程序调用lex / yacc

时间:2010-08-24 13:55:53

标签: bison yacc lex flex-lexer

我一直在阅读lex / yacc。书籍和例子并不难理解。事实上,整个概念都很明确。有一个例外。 Lex / yacc似乎生成独立程序。如果我想将它们称为解析器函数怎么办? Yacc似乎产生了一个主要功能,所以如何在没有冲突的情况下从我自己调用。

我现在还不清楚它们如何操作文件输入。我可以从文件中抓取一行并将其发送到解析器,但是如果你的解析器正在寻找像括号括起来的块这样的多行结构呢?

我意识到我对这两个都很愚蠢,但任何帮助都会受到赞赏。感谢。

2 个答案:

答案 0 :(得分:3)

输入到lexx / yacc组合是通过一个名为yyin的文件*。

这默认为stdin - trawl在lex.yy.c周围找到它

如果您为yyin分配FILE *,词法分析器将从该文件中读取,您执行类似

的操作

yyin = fopen(“parseme”,“rt”);

在调用yyparse()之前,通常在main()。

答案 1 :(得分:2)

两个程序都生成yylex()yyparse()函数,但它们都不会生成主函数。您必须在某处添加自己的main()函数。许多教程将它们放入.l或.y文件中,但您可以随意将它们放在任何您想要的位置。