使用Happy和属性语法解析错误

时间:2017-06-17 14:45:41

标签: parsing haskell grammar happy

我是Haskell和Happy的新手,我正试图在Haskell中使用Happy来创建一个带有归属语法的解析器。我已经为变量声明制作了一点语法,给了BNFC以及一切,因为这里工作正常。然后我开始在解析器中添加属性,此时我发现了我的第一个问题:当我添加%attributetype {MyAttribute a}

happy -gca Pargrammar.y工作正常,但在我添加%attribute parseTree {a}

后立即生效

happy给了我这个解析错误

  

开心:解析错误

所以我只保留%attributetype {MyAttribute a}并尝试修改首先更改的基本类型

String  :: { String }  : L_quoted {  $1 }

这一行

String  : L_quoted { $$= $1 }

然后我的第二个问题出现了:当我启动Makefile时,我在这里遇到了这个错误

  

Pargrammar.hs:344:19:错误:       变量不在范围内:($$ =):: t1 - >字符串 - >吨

     

Pargrammar.hs:1066:19:错误:

• Couldn't match type ‘t1 -> t’ with ‘[Char]’
  Expected type: HappyAbsSyn String
    Actual type: HappyAbsSyn (t1 -> t)
• In the first argument of ‘fn’, namely ‘v1’
  In the expression: fn v1
  In an equation for ‘r’: r = fn v1
• Relevant bindings include
    r :: HappyAbsSyn (t1 -> t) (bound at Pargrammar.hs:1066:12)
    stk' :: HappyStk (HappyAbsSyn (t1 -> t))
      (bound at Pargrammar.hs:1065:81)
    v1 :: HappyAbsSyn (t1 -> t) (bound at Pargrammar.hs:1065:69)
    fn :: HappyAbsSyn String -> HappyAbsSyn (t1 -> t)
      (bound at Pargrammar.hs:1065:22)
    happySpecReduce_1 :: Happy_GHC_Exts.Int#
                         -> (HappyAbsSyn String -> HappyAbsSyn (t1 -> t))
                         -> Happy_GHC_Exts.Int#
                         -> Token
                         -> Happy_GHC_Exts.Int#
                         -> Happy_IntList
                         -> HappyStk (HappyAbsSyn (t1 -> t))
                         -> [Token]
                         -> Err (HappyAbsSyn (t1 -> t))
      (bound at Pargrammar.hs:1063:1)

确实在Pargrammar.hs的第344行我得到了这个

happyIn8
        ($$= happy_var_1
    )

$$=不应该在那里。

我的Makefile只是这样做

all:
    happy -gca Pargrammar.y
    alex -g Lexgrammar.x
    ghc --make Testgrammar.hs -o Testgrammar

clean:
    -rm -f *.log *.aux *.hi *.o *.dvi
    -rm -f Docgrammar.ps

distclean: clean
    -rm -f Docgrammar.* Lexgrammar.* Pargrammar.* Layoutgrammar.* Skelgrammar.* Printgrammar.* Testgrammar.* Absgrammar.* Testgrammar ErrM.* SharedString.* ComposOp.* grammar.dtd XMLgrammar.* Makefile*

我真的不知道如何解决这个问题。如果你们中的任何人可以向我提出一些想法,我将不胜感激。

0 个答案:

没有答案