1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
{-
This grammar is LR(1) but not LALR(1). However, thanks to the stack
information there is no reduce/reduce conflict. In the traditional
setting only the look-ahead information and the current state is used
to determine the reducing production. Here, we can use also the past,
ie the path to the current state.
Exercise 4.40, dragon book.
frown --debug LR.g
-}
module LR
where
type Terminal = Char
type Result = []
%{
Terminal = 'a' | 'b' | 'c' | 'd';
Nonterminal = s | x | y;
s : x, 'a';
| 'b', x, 'c';
| y, 'c';
| 'b', y, 'a';
x : 'd';
y : 'd';
}%
frown ts = fail "syntax error"
|