在Happy with GLR模式下启动符号

时间:2014-06-24 00:36:11

标签: parsing haskell happy glr

假设我定义了一个快乐的语法

%name pf f
%tokentype { AB }

%error { parseError }

%token
    a { A }
    b { B }
%%

f : 
  a g a {}
  | b {}
g :
   b b {}

{
data AB = A | B deriving (Eq,Ord,Show)
parseError _ = error " bad "
}

如果我用

编译它
happy --glr

我一般对具有非平凡含糊之处的语法感兴趣;然而,这个例子证明了令我困惑的一点。

我得到一个Haskell解析器。我只有在令牌流时才能获得成功     a b b a     要么     B'/ P>

然而,我对失败更感兴趣。我想失败的速度非常快,而且我似乎需要比我想象的更多的令牌。

例如,如果我输入令牌流a,a,a ......它将使第三个a失败。如果我喂b b b,则第三个b失败。为什么额外的预测?匹配f时,一旦我看到两个' a,语法中就没有任何内容可以匹配。

0 个答案:

没有答案