[英]shift/reduce conflict in my bison grammar
我不知道如何使用此語法實例化班級來解決班次/減少沖突:
%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轉換為“屬性”,還是將IDENTIFIER轉換為“ id_dot_list”。 我試圖啟用GLR
解析器,該解析器可能可以解析此語法,但是bison
存在一個錯誤,啟用GLR
時會導致錯誤。 我不想引入任何新的關鍵字,例如“屬性”,這將簡化是否轉移的決定。
這樣做似乎是IDENTIFIER
,當IDENTIFIER
出現時將強制進行移動,以解決沖突:
%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_or_property:
id_dot_list '{' instance_body '}' {
}
| property {
}
;
instance_body:
instance_body IDENTIFIER instance_or_property {
$$ = ::std::move($1);
}
| instance_body function {
}
| %empty { $$ = node(); }
;
function:
FUNCTION IDENTIFIER '(' id_comma_list FUNCTION_CHUNK {
}
;
property:
PROPERTY_CHUNK {
}
| MULTILINE_PROPERTY_CHUNK {
}
| NOBIND PROPERTY_CHUNK {
}
| NOBIND MULTILINE_PROPERTY_CHUNK {
}
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.