2010-08-24 77 views
3

我一直在閱讀lex/yacc。書籍和例子不難遵循。事實上,整個概念清晰可見。有一個例外。 Lex/yacc似乎會生成獨立程序。如果我想將它們稱爲解析器函數呢? Yacc似乎產生了一個主要的功能,所以我怎麼會從我自己的電話沒有衝突。從單獨的程序調用lex/yacc

我現在還不清楚他們如何操作文件輸入。我可以從文件中抓取一行並將其發送給解析器,但是如果解析器正在尋找一個多線結構(如用大括號括起來的塊)呢?

我意識到我對這些都很愚蠢,但任何幫助表示讚賞。謝謝。

回答

3

輸入到lexx/yacc組合是通過名爲yyin的FILE *。

此默認爲標準輸入 - 周圍的lex.yy.c拖網找到它

如果你分配一個FILE *到yyin中,詞法分析器會從該文件中讀取,你這樣做

yyin中= fopen(「parseme」,「rt」);

在調用yyparse()之前,通常在你的main()中。

+0

+1:簡明扼要,正確。 – 2010-10-23 21:28:33

2

這兩個程序都會生成yylex()yyparse()函數,但它們都不會生成主函數。您必須在某處添加您自己的main()功能。許多教程將它們放在.l或.y文件中,但您可以隨意將它們放在任何你想要的地方。