2015-01-05 94 views
0

結構,如何編寫不區分大小寫的Lex模式規則?我的文件

`pragma TOKEN1_NAME TOKEN1_VALUE 
`pragma TOKEN2_NAME TOKEN2_VALUE 
`pragma TOKEN3_NAME TOKEN3_VALUE 
`pragma TOKEN4_NAME TOKEN4_VALUE 
TEXT{ 

// A valid VHDL or verilog 
} 
`pragma TOKEN2_NAME TOKEN2_VALUE 
TEXT{ 

    // VHDL or verilog 
} 

因爲我處理的Verilog和VHDL.I需要通過考慮到心神調整自己的標記名稱是VHDL不區分大小寫。 我想爲這兩種情況使用單個解析器。對於相同的情況,什麼是最有效的方法? Do flex是否支持某種功能以允許區分大小寫的模式匹配,並且如果文件格式爲Verilog,我們可以稍後檢查是否清除了標記名稱(包含所有小寫字母)?

+0

你認爲用一種語法來處理兩種語言是個好主意嗎?你是否試圖在單個文件或TextStream中嵌入VHDL和Verilog? – Paebbels

+0

Flex/Lex使用-i參數支持此操作。它將生成一個不區分大小寫的解析器。 –

回答

4

Flex支持內部使用語法圖案不區分大小寫:

(?i:...) 

之間的圖案:將不考慮情況下進行掃描。

這是的不是意味着輸入被「消毒」,變成小寫,或以任何方式修改。這是你的責任,如果你想這樣做。它的意思是,(例如):

(?i:KeyWord) 

將匹配任何輸入KEYWORDkeywordkEywOrd

如果你有一個古老的柔性版(年齡大於2.5.34發佈在2007年年底),由於某種原因,你不想升級,你需要習慣寫法是這樣的:

[Kk][Ee][Yy][Ww][Oo][Rr][Dd] 

,你還是會發現的例子中老年掃描器定義文件。

+0

哪個版本的flex支持這個?我無法使用flex 2.5.4版本中的功能,或者可能是我做錯了什麼。 這是正確的方式來使用(?我:「開始」){/ /動作}? –

+0

@AnkurGautam:您需要2.5.34版本(2007-12-12發佈),但我建議升級到當前版本,而不是從20年前的版本升級到7年前的版本。你的語法是好的,儘管你不需要引號,'(?i:begin)'可以正常工作。 – rici

相關問題