2016-05-20 52 views
0

我已生成sintax.tab.hhsitax.tab.cc與成功野牛和包括在lex.l以產生lex.yy.cc用下面的命令:如何在其他地方使用yyparse()的野牛?

bison -d sintax.yy 
flex lexer.l 

和我有3個對應文件的簡單解析器,在syntax.yylexer.l我不在最後的部分不要放任何C++代碼;這是正確的嗎?

我想在我正在處理的另一個項目中使用這些文件,所以我不知道如何執行此操作。

在我自己的方法在其他類中聲明我怎麼能:

  1. 指定解析器的輸入將是一個定義字符串?
  2. 用另一個字符串重新啓動解析器?

回答

0

這實際上只是一個lex(flex)問題,因爲詞法分析器處理輸入。

藉助Flex,您可以使用的功能:

yyrestart(FILE * input_file) 
yy_scan_string(const char * string) 
yy_scan_buffer(const char * buffer, size_t size) 

將輸入切換到一些源比其他標準輸入(主叫yyparse之前調用這些)。還有一堆「緩衝」函數可用於在動態創建多個緩衝區並在解析過程中在它們之間切換(可用於處理諸如'include'指令之類的內容)。

你可以在the flex documentation