2015-09-09 29 views
0

我正在爲C語言製作詞彙分析器,這是一種功耗較低的版本。是否可以在同一個C/C++程序中使用兩個或多個不同的yylex()函數?

我想要在不同的時間處理不同類型的正則表達式,例如第一次來自源程序的輸入字符流,然後第二次處理第一次處理後生成的程序的中間表示形式。

那麼有可能使用FLEX創建2個或更多的yylex()函數,並將它用於相同的C/C++程序中,即詞法分析器?

+1

你確定要用flex/bison來做這個,而不是[Boost.Spirit](http://www.boost.org/doc/libs/release/libs/spirit/doc/html/index。 HTML)? – DevSolar

+1

@DevSolar是的。這是一個學術課程項目,必須使用flex/bison。 – PalashV

+1

是的,有時候學術慣性是無法幫助的。 ;-) – DevSolar

回答

1

flexsimilar parameter

'-PPREFIX,前綴=前綴%選擇前綴= 「前綴」' 更改所有全局變量可見使用柔性的 默認 'YY' 前綴和 函數名稱改爲'PREFIX'。例如,'--prefix = foo' 將yytext的名稱更改爲footext。它還將默認輸出文件 的名稱從lex.yy.c更改爲lex.foo.c.

因此,您可以重命名第二個函數及其變量。 不幸的是POSIX lex沒有這樣的參數。

+0

非常感謝。 :) – PalashV

2

可以使用%prefix聲明中yylexyy(和其他各種全球性的名稱)更改爲不同的東西,它可以讓你在同一個項目中多臺掃描儀。您可能還需要使用-o選項來設置生成的文件的名稱;否則,構建過程變得很難看。

但它們將是完全獨立的掃描儀,每個掃描儀都有自己的輸入流。這可能不是你想要的。

如果您希望掃描儀的詞彙定義可以更改爲另一組,您需要使用start conditions。這樣可以讓您在不同的環境下更改掃描儀行爲,並且可以分享常見詞彙功能。

+0

非常感謝。 :) – PalashV

相關問題