2013-05-19 77 views
0

我有兩個lex文件,功能分別爲xxlex()yylex(),我有一個yacc語法文件。我想要一個語法規則來總是調用xxlex()。但是xxlex()只被調用一次,我希望它總是被調用。我該怎麼做?lex和yacc - 結合兩個詞法分析器和一個yacc

+0

我認爲分享您的代碼將是一個好的開始。 – gkovacs90

+0

我認爲分享你的*實際問題*是個好主意。你爲什麼需要兩個詞法分析器?有兩個輸入源嗎? – EJP

回答

1

默認情況下,Yacc語法調用yylex()來獲取新的令牌。

如果您想在某些時間撥打xxlex(),那麼您會安排在適當的時間從yylex()撥打電話。

如果你想xxlex()被稱爲每次,然後要麼將其重命名yylex()和重命名原始xxlex()zzlex(),或使用bison -p xx使一切(包括解析器函數)xx代替yy開始。 (同樣的標誌,-p,還與POSIX兼容的yaccflex程序需要-P xx生成符號的所有開始的xx代替yy; POSIX lex沒有一個選項,這樣做,但我已經看到許多makefile使用sed腳本編輯由lex生成的源,以將前綴從yy更改爲其他字母,如xx。)