【问题标题】:bison rule useless in parser due to conflicts由于冲突,bison 规则在解析器中无用
【发布时间】:2012-07-11 05:03:29
【问题描述】:

我写了一个语法,但是当我编译它时,我遇到了冲突(由于冲突,规则在解析器中无用)。我不知道如何解决它。我不明白“emtpy”的问题。

谢谢,九

axdef : BBEGIN GKLAMMERLINKS AXDEF GKLAMMERRECHTS def END GKLAMMERLINKS AXDEF GKLAMMERRECHTS
      |
      ;

def : BEZEICHNER Doppelpunkt typ def_next
    ;

def_next : def
         |
         ;

typ : basistyp
    | typ_power
    | FINSET basistyp
    | typ_function
    ;

basistypen : NAT
           | INTEGER
           | REAL
           | BOOL
           | BEZEICHNER
           ;

typ_power : POWER basistyp
          ;

typ_function : BEZEICHNER FUN BEZEICHNER
             | BEZEICHNER FUN POWER BEZEICHNER
             | KLAMMERAUF BEZEICHNER TIMES BEZEICHNER KLAMMERZU fun POWER BEZEICHNER
             ;  

fun : PFUNCTION
    | PINJ
    | PSUR
    | TFUNCTION
    | TINJ
    | SURJ
    | FFUN
    | FINJ
    | BIJ
    ;

【问题讨论】:

  • basistypen 没用,因为它在语法中的任何地方都没有引用。基础类型真的应该是基础类型吗?我认为这两种方式都没有冲突。

标签: bison rule


【解决方案1】:

您的作品 defdef_next 在我看来是错误的。很难正确编码重复项目列表的递归定义。我会这样做:

axdef : BBEGIN GKLAMMERLINKS AXDEF GKLAMMERRECHTS defs END GKLAMMERLINKS AXDEF GKLAMMERRECHTS
      |
      ;

defs : def defs
     | def
     ;

def : BEZEICHNER Doppelpunkt typ
    ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多