source: FCS-QL/trunk/src/main/antlr4/eu/clarin/sru/fcs/qlparser/FCSParser.g4 @ 6868

Last change on this file since 6868 was 6868, checked in by Leif-Jöran, 8 years ago

Further simplified AST and working within part

File size: 2.2 KB
Line 
1parser grammar FCSParser;
2options { tokenVocab=FCSLexer; }
3/*
4 * Parser for FCS Core FCS-QL version 2.0
5 * 20150501- /ljo
6 */
7
8query
9    : main_query (WITHIN within_part)? EOF
10    ;
11
12
13main_query
14    : query_simple
15    | query_group
16    | query_sequence
17    | query_disjunction
18    ;
19
20
21query_disjunction
22    : (query_simple | query_sequence | query_group)
23            (OR (query_simple | query_sequence | query_group))+
24    ;
25
26
27query_sequence
28    : (query_simple | query_group)+
29    ;
30
31
32query_group
33    : L_PAREN (query_disjunction | query_sequence) R_PAREN quantifier?
34    ;
35
36
37query_simple
38    : (query_implicit | query_segment) quantifier?
39    ;
40
41
42quantifier
43    : (Q_ONE_OR_MORE | Q_ZERO_OR_MORE | Q_ZERO_OR_ONE |
44        ( L_CURLY_BRACKET
45            (INTEGER |
46             INTEGER? Q_COMMA INTEGER |
47             INTEGER Q_COMMA INTEGER?) R_CURLY_BRACKET))
48    ;
49
50
51query_implicit
52    : regexp
53    ;
54
55
56query_segment
57    : L_SQUARE_BRACKET expression? R_SQUARE_BRACKET     /* [ expression? ] */
58    ;
59
60
61within_part
62    : within_part_simple
63    ;
64
65
66within_part_simple
67    : SIMPLE_WITHIN_SCOPE
68    ;
69
70
71expression
72    : expression_basic
73    | expression_not
74    | expression_group
75    | expression_or
76    | expression_and
77    ;
78
79
80expression_or
81    : (expression_basic | expression_group | expression_not | expression_and)
82        (OR (expression_basic | expression_group | expression_not | expression_and))+
83    ;   
84
85
86expression_and
87    : (expression_basic | expression_group | expression_not)
88        (AND (expression_basic | expression_group | expression_not))+
89    ;   
90
91
92
93expression_group
94    : L_PAREN (expression_basic | expression_not | expression_or | expression_and) R_PAREN
95    ;
96
97
98expression_not
99    : NOT (expression_basic | expression_not | expression_or | expression_and)
100    ;
101
102
103expression_basic
104    : attribute (OPERATOR_EQ | OPERATOR_NE) regexp
105    ;
106
107
108attribute
109    : (qualifier COLON)? identifier
110    ;
111
112
113qualifier
114    : (IDENTIFIER | WITHIN | SIMPLE_WITHIN_SCOPE | REGEXP_FLAGS)
115    ;
116
117
118identifier
119    : (IDENTIFIER | WITHIN | SIMPLE_WITHIN_SCOPE | REGEXP_FLAGS)
120    ;
121
122
123regexp
124    : regexp_pattern (FWD_SLASH regexp_flag)?
125    ;
126
127
128regexp_pattern
129    : REGEXP
130    ;
131
132
133regexp_flag
134    : REGEXP_FLAGS
135    ;
Note: See TracBrowser for help on using the repository browser.