2012-06-08 77 views
0

我想解析兩個文件。我有生成解析器的Yacc/lex代碼。通過yyparse解析第二個文件時遵循的步驟

它工作正常,當我解析第一個文件(a.txt),但當我解析第二個文件(b.txt)它返回錯誤(語法錯誤),但是當我解析第二個文件(b.txt)第一它可以順利地解析它。

我的猜測是,在讀取第一個文件後,當它開始讀取第二個文件時,某些緩衝區或狀態不會被清除。所以我想問一下,在繼續解析第二個文件之前,我是否必須重置某些緩衝區或狀態分析器維護的內容。

我不能在這裏粘貼我的代碼,因爲它太大了。

在此先感謝。

回答

0

其實我發現這個問題的答案通過一些其他的問題。問題是在清理緩衝區,所以如果你添加一個

YY_FLUSH_BUFFER

Befor打開它解決問題的新文件。

0

你想要一個可重入的解析器。野牛至少支持這一點,我不確定yacc是否這樣做,但切換到野牛應該是無痛的。

在您的語法文件中添加%pure-parser

http://www.delorie.com/gnu/docs/bison/bison_66.html

+0

感謝您的回答,但我只能使用Yacc/lex。 –

+0

還有一個問題是我必須更改使用全局靜態變量的完整代碼。另請注意,我並不是同時解析兩個文件。他們正在被一個一個地解析,所以我不一定需要一個可重入的解析器。 –

相關問題