Load /tmp/tmp.vjbgZ10456/jabref-2.2~b2 into
[debian/jabref.git] / src / java / net / sf / jabref / bst / bst.g
1 grammar Bst;
2
3 options {
4     output=AST;
5 }
6
7 tokens {
8         IDLIST;
9         STACK;
10         ENTRY;
11         COMMANDS;
12 }
13
14 program : commands+ -> ^(COMMANDS commands+);
15
16 commands 
17         : STRINGS^^ idList
18         | INTEGERS^^ idList
19         | FUNCTION^^ id stack
20         | MACRO^^ id '{'! STRING '}'!
21         | READ^^
22         | EXECUTE^^ '{'! function '}'!
23         | ITERATE^^ '{'! function '}'!
24         | REVERSE^^ '{'! function '}'!
25         | ENTRY^^ idList0 idList0 idList0
26         | SORT^^;
27
28 identifier 
29         : IDENTIFIER;
30
31 id 
32         : '{'! identifier '}'!;
33         
34 idList 
35         : '{' identifier+ '}' -> ^(IDLIST identifier+);
36         
37 idList0 
38         : '{' identifier* '}' -> ^(IDLIST identifier*);
39
40 function 
41         : '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier;
42         
43 stack 
44         : '{' stackitem+ '}' -> ^(STACK stackitem+);
45         
46 stackitem
47         : function
48         | STRING 
49         | INTEGER 
50         | QUOTED
51         | stack;
52
53 STRINGS : 'STRINGS';
54 INTEGERS : 'INTEGERS';
55 FUNCTION : 'FUNCTION';
56 EXECUTE : 'EXECUTE';
57 SORT : 'SORT';
58 ITERATE : 'ITERATE';
59 REVERSE : 'REVERSE';
60 ENTRY : 'ENTRY';
61 READ : 'READ';
62 MACRO : 'MACRO';
63
64 QUOTED
65         : '\'' IDENTIFIER;
66
67 IDENTIFIER
68         : LETTER (LETTER|NUMERAL)* ;
69
70 fragment LETTER
71         : ('a'..'z'|'A'..'Z'|'.'|'$');
72
73 STRING
74         : '"' (~('"'))* '"';
75         
76 INTEGER   
77         : '#' ('+'|'-')? NUMERAL+ ;
78
79 fragment NUMERAL
80         : ('0'..'9');
81         
82 WS
83         : (' '|'\t'|'\n')+ {channel=99;} ;
84         
85 LINE_COMMENT
86     : '%' ~('\n'|'\r')* '\r'? '\n' {channel=99;}
87     ;
88