Bison 从单独的程序调用lex/yacc
我一直在读lex/yacc。这些书和例子并不难理解。事实上,整个概念非常清楚。只有一个例外。Lex/yacc似乎可以生成独立的程序。如果我想把它们作为解析器函数调用呢?Yacc似乎生成了一个main函数,那么我如何从自己的函数调用而不发生冲突呢 我也不清楚他们是如何操作文件输入的。我可以从文件中抓取一行并将其发送给解析器,但是如果您的解析器正在寻找一个多行结构,比如用大括号括起来的块,该怎么办Bison 从单独的程序调用lex/yacc,bison,yacc,lex,flex-lexer,Bison,Yacc,Lex,Flex Lexer,我一直在读lex/yacc。这些书和例子并不难理解。事实上,整个概念非常清楚。只有一个例外。Lex/yacc似乎可以生成独立的程序。如果我想把它们作为解析器函数调用呢?Yacc似乎生成了一个main函数,那么我如何从自己的函数调用而不发生冲突呢 我也不清楚他们是如何操作文件输入的。我可以从文件中抓取一行并将其发送给解析器,但是如果您的解析器正在寻找一个多行结构,比如用大括号括起来的块,该怎么办 我意识到我在这两件事上都很愚蠢,但任何帮助都是非常感谢的。谢谢。这两个程序都会生成yylex()和yy
我意识到我在这两件事上都很愚蠢,但任何帮助都是非常感谢的。谢谢。这两个程序都会生成
yylex()
和yyparse()
函数,但它们都不会生成主函数。您必须在某处添加自己的main()
函数。许多教程将它们放入.l或.y文件中,但您可以随意将它们放在任何需要的地方。lexx/yacc组合的输入是通过一个名为yyin的文件*进行的
这默认为stdin-trawl围绕lex.yy.c查找它
如果您将一个文件*分配给yyin,lexer将从该文件中读取,您可以执行以下操作
yyin=fopen(“parseme”,“rt”)
在调用yyparse()之前,通常在main()中