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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
/* This tests a simple DLG-based scanner plus (...)? predicates */
<<
typedef ANTLRCommonToken ANTLRToken;
#include "DLGLexer.h"
#include "PBlackBox.h"
int main()
{
ParserBlackBox<DLGLexer, Expr, ANTLRToken> p(stdin);
p.parser()->begin();
return 0;
}
void doit(Expr *p)
{
printf("LT(1) is %s\n", ((ANTLRToken *)p->LT(1))->getText());
printf("LT(2) is %s\n", ((ANTLRToken *)p->LT(2))->getText());
printf("LT(3) is %s\n", ((ANTLRToken *)p->LT(3))->getText());
printf("LT(4) is %s\n", ((ANTLRToken *)p->LT(4))->getText());
printf("LT(5) is %s\n", ((ANTLRToken *)p->LT(5))->getText());
printf("LT(6) is %s\n", ((ANTLRToken *)p->LT(6))->getText());
printf("LT(7) is %s\n", ((ANTLRToken *)p->LT(7))->getText());
printf("LT(8) is %s\n", ((ANTLRToken *)p->LT(8))->getText());
printf("LT(9) is %s\n", ((ANTLRToken *)p->LT(9))->getText());
printf("LT(10) is %s\n", ((ANTLRToken *)p->LT(10))->getText());
printf("LT(11) is %s\n", ((ANTLRToken *)p->LT(11))->getText());
}
>>
#token "[\ \t\n]+" <<skip();>>
#token Eof "@"
class Expr { /* Define a grammar class */
begin
: <</*doit(this);*/>>
e
;
e : ( list "=" )? list "=" list Eof
<<printf("list = list\n");>>
| list Eof
<<printf("list\n");>>
;
list: "\(" (IDENTIFIER|NUMBER)* "\)"
;
predict
: ( "\(" (IDENTIFIER|NUMBER)* "\)" "=")?
| "\(" "\)" "="
;
/*
Here's another example...
#token INT "int"
#token SEMI ";"
#token STAR "\*"
#token ASSIGN "="
begin: "extern" "char" declarator ";"
;
e : (decl)?
| expr
;
expr: IDENTIFIER "=" NUMBER
;
decl: "int" declarator ";"
;
declarator
: ( "\*" )? "\*" declarator
| IDENTIFIER
;
*/
}
#token IDENTIFIER "[a-z]+"
#token NUMBER "[0-9]+"
|