File: test.g

package info (click to toggle)
pccts 1.33MR33-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 3,212 kB
  • ctags: 5,280
  • sloc: ansic: 46,051; cpp: 3,234; makefile: 957
file content (84 lines) | stat: -rw-r--r-- 1,677 bytes parent folder | download | duplicates (19)
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]+"