2012-07-10 88 views
0

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

THX,九件

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 
    ; 
+0

basistypen是无用的,因为它没有在您的语法中的任何地方被引用。 Basistyp真的应该是basistypen吗?我看不出任何冲突。 – Craig 2012-07-11 20:32:51

回答

1

你的作品defdef_next看我错了。正确编码重复项目列表的递归定义可能很困难。我会这样做:

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

defs : def defs 
    | def 
    ; 

def : BEZEICHNER Doppelpunkt typ 
    ;