/usr/share/doc/frown-doc/examples/other/Trace.g is in frown-doc 0.6.2.3-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 39 40 41 42 43 44 45 | {-
DIY tracing. Example taken from the Duponcheel/Swierstra paper.
frown Example.g
Try
fmap (\ s -> s "") (s "abba" :: IO ShowS) >>= putStrLn
-}
module Example
where
type Terminal = Char
type Result = IO
%{
Terminal = 'a' | 'b';
Nonterminal = s {ShowS} | x {ShowS} | y {ShowS};
s {shift 'a' . y . x . reduce "aYX" 'S'}
: 'a', y {y}, x {x};
x {shift 'b' . shift 'a' . reduce "ba" 'X'}
: 'b', 'a';
x {a . reduce "Y" 'X'}
: y {a};
x {a . reduce "S" 'X'}
: s {a};
y {shift 'b' . reduce "b" 'Y'}
: 'b';
y {shift 'a' . shift 'b' . reduce "ab" 'Y'}
: 'a', 'b';
}%
frown ts = fail "syntax error"
nl = showChar '\n'
sp = showChar ' '
shift s = showString "shift " . shows s . nl
reduce ss s = showString "reduce " . shows ss . sp . shows s .nl
|