]> pd.if.org Git - pccts/blob - testcpp/10/test.g
auto commit for import
[pccts] / testcpp / 10 / test.g
1 /* This tests a simple DLG-based scanner plus (...)? predicates */
2
3 <<
4 typedef ANTLRCommonToken ANTLRToken;
5 #include "DLGLexer.h"
6 #include "PBlackBox.h"
7
8 int main()
9 {
10         ParserBlackBox<DLGLexer, Expr, ANTLRToken> p(stdin);
11         p.parser()->begin();
12         return 0;
13 }
14
15 void doit(Expr *p)
16 {
17         printf("LT(1) is %s\n", ((ANTLRToken *)p->LT(1))->getText());
18         printf("LT(2) is %s\n", ((ANTLRToken *)p->LT(2))->getText());
19         printf("LT(3) is %s\n", ((ANTLRToken *)p->LT(3))->getText());
20         printf("LT(4) is %s\n", ((ANTLRToken *)p->LT(4))->getText());
21         printf("LT(5) is %s\n", ((ANTLRToken *)p->LT(5))->getText());
22         printf("LT(6) is %s\n", ((ANTLRToken *)p->LT(6))->getText());
23         printf("LT(7) is %s\n", ((ANTLRToken *)p->LT(7))->getText());
24         printf("LT(8) is %s\n", ((ANTLRToken *)p->LT(8))->getText());
25         printf("LT(9) is %s\n", ((ANTLRToken *)p->LT(9))->getText());
26         printf("LT(10) is %s\n", ((ANTLRToken *)p->LT(10))->getText());
27         printf("LT(11) is %s\n", ((ANTLRToken *)p->LT(11))->getText());
28 }
29 >>
30
31 #token "[\ \t\n]+"      <<skip();>>
32 #token Eof "@"
33
34 class Expr {                            /* Define a grammar class */
35
36 begin
37         :       <</*doit(this);*/>> 
38                 e
39         ;
40
41 e       :       ( list "=" )?  list "=" list Eof
42                 <<printf("list = list\n");>>
43         |       list Eof
44                 <<printf("list\n");>>
45         ;
46
47 list:   "\(" (IDENTIFIER|NUMBER)* "\)"
48         ;
49
50 predict
51         :       ( "\(" (IDENTIFIER|NUMBER)* "\)" "=")?
52         |       "\(" "\)" "="
53         ;
54
55 /*
56 Here's another example...
57 #token INT "int"
58 #token SEMI ";"
59 #token STAR "\*"
60 #token ASSIGN "="
61
62 begin:  "extern" "char" declarator ";"
63         ;
64
65 e       :       (decl)?
66         |       expr
67         ;
68
69 expr:   IDENTIFIER "=" NUMBER
70         ;
71
72 decl:   "int" declarator ";"
73         ;
74
75 declarator
76         :       ( "\*" )? "\*" declarator
77     |   IDENTIFIER
78         ;
79 */
80
81 }
82
83 #token IDENTIFIER       "[a-z]+"
84 #token NUMBER           "[0-9]+"