1
我不知道如何解決位移/減少這種語法衝突實例化我的課:轉變/減少我的野牛語法衝突
%start root_instance
%token IDENTIFIER
%token FUNCTION
%token FUNCTION_CHUNK
%token NOBIND
%token PROPERTY_CHUNK
%token MULTILINE_PROPERTY_CHUNK
%%
id_comma_list:
id_comma_list IDENTIFIER {
}
| id_comma_list ',' IDENTIFIER {
}
| %empty { $$ = id_list(); }
;
id_dot_list:
id_dot_list IDENTIFIER {
}
| id_dot_list '.' IDENTIFIER {
}
| %empty { $$ = id_list(); }
;
root_instance:
id_dot_list '{' instance_body '}' {
}
;
instance:
id_dot_list '{' instance_body '}' {
}
;
instance_body:
instance_body instance {
}
| instance_body function {
}
| instance_body property {
}
| %empty { $$ = node(); }
;
function:
FUNCTION IDENTIFIER '(' id_comma_list FUNCTION_CHUNK {
}
;
property:
IDENTIFIER PROPERTY_CHUNK {
}
| IDENTIFIER MULTILINE_PROPERTY_CHUNK {
}
| IDENTIFIER NOBIND PROPERTY_CHUNK {
}
| IDENTIFIER NOBIND MULTILINE_PROPERTY_CHUNK {
}
;
%%
衝突出現在「instance_body」規則。解析器無法決定是將IDENTIFIER移入「屬性」還是縮小爲「id_dot_list」。我嘗試啓用GLR
解析器,該解析器可能可以解析此語法,但是bison
中存在一個錯誤,當啓用GLR
時會導致錯誤。我不想引入任何新的關鍵字,例如「財產」,這將緩解是否轉移的決定。