繁体   English   中英

此yacc语法有什么问题?

[英]What is the problem in this yacc grammar?

我有一个yacc解析器,可以在其中解析“ abc = 123”(VAR = VAR),abc = [1 2 3](VAR = value_series / string)和abc = [[123]]等命令。

我需要解析abc = [xyz = [1 2 3] jkl = [3 4 5]]。由于规则2之间的歧义,此语法失败了(我想,它无法区分value_series和新规则。

我尝试了一个案例:VAR_NAME等价quote_or_brace模型等价quote_or_brace value_series quote_or_brace净等价quote_or_brace value_series quote_or_brace quote_or_brace

没用

series:
   | PLUS series
   {
   }
   | series VAR_NAME EQUAL VAR_NAME
   {
     delete [] $2;
     delete [] $4;
   }
   | series VAR_NAME EQUAL quote_or_brace value_series quote_or_brace
   {
     delete [] $2;
   }
   | series VAR_NAME EQUAL quote_or_brace quote_or_brace value_series quote_or_brace quote_or_brace
   {
     delete [] $2;
   }
   | error
   {
     setErrorMsg(string("error"));
     YYABORT;
   };

如果是我,我可能会写一套类似于以下的规则:

assignment_list
  : assignment
  | assignment assignment_list
  ;

assignment
  : VAR_NAME '=' assignment_rhs
  ;

assignment_rhs
  : expression
  | '[' opt_expression_list ']'  /* allows var1 = [ ... ] */
  ;

opt_expression_list
  : /* empty */
  | expression_list
  ;

expression_list
  : expression
  | expression expression_list
  ;

expression
  : VAR_NAME   /* a variable name, as in var1 = var2 */
  | NUMBER     /* some kind of number, as in var1 = 123 */
  | STRING     /* quoted string, as in var1 = "foo" */
  | assignment /* allows nesting of assignments, as in var1 = [var2 = 4] */
               /* also allows things like var1 = var2 = 123 */
  ;

请注意,无论如何都不会对此进行测试,并且我不确定从expressionassigment的递归。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM