所以我用flex從我的lex代碼生成一個c文件,然後使用gcc創建相應的實際解析器.exe。但是,我無法弄清楚如何讓它從我自己輸入的內容中讀取。我試圖讓它解析一個巨大的字典文件。誰能幫忙?Flex:使用文本文件作爲輸入流
1
A
回答
4
你有兩種解決方法。首先是重新從標準輸入輸入與命令提示符<
操作:
> parser.exe < some_file.txt
另一個解決辦法是讓該程序打開該文件,並告訴詞法分析器是什麼文件。欲瞭解更多信息,請參閱the Flex manual。重要功能是yy_create_buffer
和yy_switch_to_buffer
。
+0
還有一些其他相關部分,例如關於EOF處理和yywrap的部分。 YY_INPUT宏是答案的一部分。儘管如此,該手冊指出,作爲一個整體來處理問題。 –
7
嘗試將以下代碼添加到* .l文件中。
int main(int argc, char *argv[])
{
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}
2
添加到由@Eliko上面的回答,而使用Flex與YACC /野牛,你可以在你grammar.y文件的全局部分定義FILE *yyin;
。生成的lex.yy.c中的定義默認爲extern FILE *yyin
。因此,在你的grammar.y
,做這樣的事情:
/* Some other global definitions */
FILE *yyin;
%%
/* Grammar rules*/
/* Grammar rules*/
%%
void main(int argc, char **argv) {
/* Process command line args*/
yyin = fopen("input.c", "r");
yyparse();
fclose(yyin);
return 0;
}
相關問題
- 1. Flex文本輸入焦點
- 2. 使用流作爲文件?
- 3. 使用文本文件作爲輸入源
- 4. 使用流寫入文本文件
- 5. g ++:使用ZIP文件作爲輸入
- 6. 使用文件輸入作爲標準輸入shell腳本不起作用
- 7. 使用輸入文本過濾flex flex AdvancedDataGrid
- 8. 將文本文件作爲輸入的批處理文件
- 9. 發送可用作輸入流而非文件的文件
- 10. XML文件作爲輸入
- 11. 使用流寫入文本
- 12. 如何使用文本文件的內容作爲shell腳本的輸入?
- 13. 如何使用xml文件作爲腳本的參數輸入
- 14. 使用txt文件作爲輸入創建RDF文件
- 15. 使用csv文件作爲輸入創建RDF文件
- 16. JAX-RS POST文件輸入流爲空
- 17. 將文本文件的內容作爲python腳本的輸入
- 18. 操縱輸入文件流
- 19. 有關文件輸入流
- 20. r用輸入的文件名作爲輸出文件名
- 21. 使用文件輸入流的文件未找到異常
- 22. 如何在Flex動作腳本中確認文本輸入
- 23. Java 7使用文件輸入流檢索和讀取本地文件
- 24. FORM輸入文本以輸出文本作爲特定鏈接
- 25. 使用流寫入文件
- 26. 使用VLC作爲RTSP流文件
- 27. Java文本文件輸入
- 28. 日誌解析器:在WHERE子句中使用文本文件作爲輸入
- 29. 如何使用sys.stdin作爲多個文本文件的輸入運行代碼
- 30. Flex文本輸入與圖標裏面像Mac OS X搜索文本輸入
'程序<龐大的詞典,file'會做短期的伎倆;這是輸入重定向。您必須設置輸入函數,使其從您選擇的文件中讀取而不是標準輸入(這是默認源的合理選擇)。我將需要檢查機制...... Flex和Lex中的機制是不同的。 –