簡體   English   中英

在野牛語法中轉移/減少沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM