2
我會發布有問題的語法規則以開始。解決語法歧義
interface_sections : main_interface bind_buttons bind_functions bind_panel_items
; /* Components of a gui program */
bind_buttons : T_BEGIN T_BIND T_BUTTONS T_SEMIC component_list
T_END T_BIND T_BUTTONS T_SEMIC
| epsilon
; /* Bind the buttons for GUI */
bind_functions : T_BEGIN T_BIND T_FUNCTIONS T_SEMIC component_list
T_END T_BIND T_FUNCTIONS T_SEMIC
| epsilon
; /* Bind the graphical drawing functions for GUI */
bind_panel_items : T_BEGIN T_BIND T_PANEL T_ITEMS T_SEMIC component_list
T_END T_BIND T_PANEL T_ITEMS T_SEMIC
| epsilon
; /* Bind the panel items or menus for GUI */
要注意,如果編譯器看到令牌T_BEGIN它不會知道去哪個的綁定規則main_interface後。這可能意味着開始bind_buttons,或者它可能意味着你想跳過bind_buttons並且T_BEGIN是啓動bind_functions。
如何將此語法更改爲不存在此問題?
要求:我不允許添加/刪除終端。我不能告訴用戶他們必須改變他們編寫代碼的方式,我必須改變規則來處理它。
我很難過,有什麼想法嗎?
更新: interface_sections:main_interface bind_buttons bind_functions bind_panel_items ;/* gui程序的組件*/
prefix_stuff : T_BEGIN T_BIND
bind_buttons : prefix_stuff T_BUTTONS T_SEMIC component_list
T_END T_BIND T_BUTTONS T_SEMIC
| epsilon
; /* Bind the buttons for GUI */
bind_functions : prefix_stuff T_FUNCTIONS T_SEMIC component_list
T_END T_BIND T_FUNCTIONS T_SEMIC
| epsilon
; /* Bind the graphical drawing functions for GUI */
bind_panel_items : prefix_stuff T_PANEL T_ITEMS T_SEMIC component_list
T_END T_BIND T_PANEL T_ITEMS T_SEMIC
| epsilon
; /* Bind the panel items or menus for GUI */
這給了我通過野牛運行時的相同的轉換/減少錯誤。
不過,我認爲這是在正確的軌道上,我認爲我需要得到T_BUTTONS和T_FUNCTIONS和T_PANEL到規則
附加信息的前面:
component_list : component_list valid_components
| valid_components
; /* For the four bind blocks - a list of components */
valid_components : dialog_box_spec
| browser_box_spec
| pull_down_or_right
; /* Possible components for the list */
我開始編輯我的答案,但現在我很好奇 - 爲什麼你認爲這裏存在轉換 - 減少衝突?解析器是一個shift-reduce解析器,意味着它將令牌轉移到堆棧上,然後儘可能減少到非終結符。當解析器看到T_BEGIN時,它將被迫移位,因爲它不能減少。看起來你在以自上而下的方式思考。 – Kizaru 2010-11-03 03:53:18
我使用flex/bison來進行解析。它告訴我有2個換檔減少錯誤。我還被告知作爲這項任務的一部分,有2個減少的錯誤。我還被告知涉及的問題能夠包括0-3這些綁定部分。 – kralco626 2010-11-03 03:57:07
我將嘗試移動T-BEGIN T_BIND到prefix_stuff規則中,看看野牛給我什麼 – kralco626 2010-11-03 03:58:10