This file is indexed.

/usr/share/doc/frown-doc/examples/other/VarType.g is in frown-doc 0.6.1-13.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{-

The following unambiguous grammar has a reduce/reduce conflict.

	frown --debug Type.g

Try

	tType [Int, LPAR, RPAR] :: [()]
	tType [Int, LPAR, Num, RPAR] :: [()]

Nice example for the use of nondeterminism.

Alternatively, we can use 2 tokens of lookahead. As the grammar is
LR(2) this yields a deterministic parser.

	frown --debug --lookahead=2 Type.g

Try

	tType [Int, LPAR, RPAR] >>= print
	tType [Int, LPAR, Num 9, RPAR] >>= print

-}

module VarType
where
import Monad

type Result                   =  IO

%{

Terminal                      =  Int | Char | Void | "(" = LPAR | ")" = RPAR | Num {Int};
Nonterminal                   =  tType | aType | vType | aBasicType | aSize | vBasicType | vSize;

tType                         :  aType;
                              |  vType;

aType                         :  aBasicType, aSize;

vType                         :  vBasicType, vSize;

aBasicType                    :  Int;
                              |  Char;

aSize                         :  "(", Num {n}, ")";

vBasicType                    :  Int;
                              |  Char;
                              |  Void;

vSize                         :  "(", ")";

}%

data Terminal                 =  Int | Char | Void | LPAR | RPAR | Num Int

frown _                       =  fail "syntax error"