[英]How do I specify an input buffer to lex and yacc?
我必須使用lex和yacc創建一個匯編程序,但是我必須從ac文件將lex的輸入提供給我,這里我有主要功能。 但是我該怎么做呢?
我只有一個緩沖區。
char *buffer;
但是我想知道如何將那個緩沖區傳遞給lex。
我只希望從“ C”文件為lex提供一個緩沖區。 我想要一個示例,說明如何執行此操作。 謝謝。
從緩沖區掃描非常簡單,但是幾乎可以肯定這不是您想要執行的操作。
如果要從文件進行掃描,只需打開文件進行讀取,然后將fopen
調用中的值保存到yyin
。 確保檢查fopen
成功,因為如果yyin
最終為NULL(如果fopen
失敗,將會發生這種情況),則掃描程序將從stdin
讀取。
您需要聲明yyin
,除非在輸入文件中設置的程序部分與掃描儀定義包含在同一轉換單元中。 聲明是:
extern FILE* yyin;
如果您真的想從內存中的單個字符串中讀取數據,則只需調用
yy_scan_string(buffer);
在開始掃描之前。 (還有一個同時占用緩沖區地址和長度的函數,您可以將其用於非NUL終止且可能包含NUL字節的輸入:
yy_scan_bytes(buffer, buflen);
但是您提供的緩沖區必須是整個輸入。 您不會使用該界面一次讀取一行文件。 (有很多方法可以做到這一點,但我真的不認為這就是您想要的。如果您感到好奇,請在Flex手冊的“ 多輸入緩沖區”部分中進行介紹 。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.