2011-05-03 65 views
0

我正在尋找一種方法來解析文件的特定部分。例如,讓我們看看:Bison Flex令牌用於讀取每個未定義的令牌

if {$cpf_step == "pre_restruct"} { 
create_power_domain  -name domain_GPU_SW \ 
      -shutoff_condition "!$mali_pso_condition_pin" \ 
      -instances "$GPU_SW_instances_list" 
} else { 
create_power_domain  -name domain_GPU_SW \ 
      -shutoff_condition "!$mali_pso_condition_pin" 
}    

我對create_power_domain命令感興趣。我有一個使用不同標記的規則。下面是我使用規則 [編輯]當然,有一些事情前,這種提取物藏漢其他一個create_power_domain命令,我感興趣的解析[/編輯]

file :list_of_statement 
; 

list_of_statement: statement 
    | list_of_statement statement 
    ; 

statement: power_domain 
| T_EVERY_OTHER_THING_I_READ 
; 

power_domain: K_CREATE_POWERDOMAIN K_NAME K_IDENTIFIER options_list 

現在,你可以理解,我想以後只檢查每個電源域是否與語法對應,而我不想關心其他所有內容。

在我的Flex標記生成器,我試過
.* {return T_EVERY_OTHER_THING_I_READ; } 但後來我想起萊克斯嘗試找到最長匹配的正則表達式,這意味着現在一切都將是一個T_EVERY_OTHER_THING_I_READ令牌,我不會找到我的例如K_CREATE_POWERDOMAIN。

我的問題是如何忽略不屬於我感興趣的規則的一部分?

如果你有進一步的問題隨時問。

謝謝

回答

1

假設power_domain由空格,製表符或換行分隔,不包括那些來自T_EVERY_OTHER_THING_I_READ應該幫助,所以嘗試像[^\n\r\t ]* {return T_EVERY_OTHER_THING_I_READ; }(未經測試)

+0

這似乎這樣的伎倆。謝謝。現在我只能將我感興趣的內容考慮在內,我只需要找出如何忽略power_domain之外的某個K_NAME之類的內容。現在我選擇像'statement:power_domain \t | list_of_identifier \t | K_NAME',但我會嘗試簡單地找到如何將每個令牌設置爲T_EVERY_OTHER_THING_I_READ,前提是我沒有找到K_CREATE_POWERDOMAIN!再次感謝您 – djfoxmccloud 2011-05-03 09:54:29

+0

我回到我的標記器上,事實上這條規則不適用於我的其他標記。太多的人被歸類爲T_EVERY_OTHER_THING_I_READ – djfoxmccloud 2011-06-08 12:56:53