StrictDoc Documentation
strictdoc/core/query_engine/grammar.py
Source file coverage
Path:
strictdoc/core/query_engine/grammar.py
Lines:
151
Non-empty lines:
124
Non-empty lines covered with requirements:
124 / 124 (100.0%)
Functions:
0
Functions covered by requirements:
0 / 0 (0.0%)
1
"""
2
@relation(SDOC-SRS-155, scope=file)
3
"""
4
 
5
QUERY_GRAMMAR = r"""
6
Query:
7
 root_expression = BooleanExpression
8
;
9
 
10
AndExpression:
11
  '('
12
  expressions += BooleanExpression
13
  ('and' expressions += BooleanExpression)+
14
  ')'
15
;
16
 
17
OrExpression:
18
  '('
19
  expressions += BooleanExpression
20
  ('or' expressions += BooleanExpression)+
21
  ')'
22
;
23
 
24
NotExpression:
25
  'not'
26
  expression = BooleanExpression
27
;
28
 
29
BooleanExpression:
30
  AndExpression
31
  |
32
  OrExpression
33
  |
34
  NotExpression
35
  |
36
  NodeHasParentRequirementsExpression
37
  |
38
  NodeHasChildRequirementsExpression
39
  |
40
  InExpression
41
  |
42
  NotInExpression
43
  |
44
  NodeContainsExpression
45
  |
46
  NodeContainsAnyFreeTextExpression
47
  |
48
  NodeIsRequirementExpression
49
  |
50
  NodeIsSectionExpression
51
  |
52
  NodeIsSourceFileExpression
53
  |
54
  NodeIsSourceFileWithCompleteCoverageExpression
55
  |
56
  NodeIsSourceFileWithPartialCoverageExpression
57
  |
58
  NodeIsSourceFileWithNoCoverageExpression
59
  |
60
  NodeIsRootExpression
61
  |
62
  EqualExpression
63
  |
64
  NotEqualExpression
65
;
66
 
67
StringExpression:
68
  '"' string = /[^"]+/ '"'
69
;
70
 
71
NoneExpression:
72
  _ = 'None'
73
;
74
 
75
NodeFieldExpression:
76
  'node["' field_name = /[A-Za-z0-9]+/ '"]'
77
;
78
 
79
NodeContainsExpression:
80
  'node.contains("' string = /[A-Za-z0-9]+/ '")'
81
;
82
 
83
NodeContainsAnyFreeTextExpression:
84
  _ = 'node.contains_any_text'
85
;
86
 
87
NodeHasParentRequirementsExpression:
88
  _ = 'node.has_parent_requirements'
89
;
90
 
91
NodeHasChildRequirementsExpression:
92
  _ = 'node.has_child_requirements'
93
;
94
 
95
NodeIsRequirementExpression:
96
  _ = 'node.is_requirement' '()'?
97
;
98
 
99
NodeIsRootExpression:
100
  _ = 'node.is_root'
101
;
102
 
103
NodeIsSectionExpression:
104
  _ = 'node.is_section' '()'?
105
;
106
 
107
NodeIsSourceFileExpression:
108
  _ = 'node.is_source_file()'
109
;
110
 
111
NodeIsSourceFileWithCompleteCoverageExpression:
112
  _ = 'node.is_source_file_with_complete_coverage()'
113
;
114
 
115
NodeIsSourceFileWithPartialCoverageExpression:
116
  _ = 'node.is_source_file_with_partial_coverage()'
117
;
118
 
119
NodeIsSourceFileWithNoCoverageExpression:
120
  _ = 'node.is_source_file_with_no_coverage()'
121
;
122
 
123
EqualExpression:
124
  lhs_expr = ComparableExpression '==' rhs_expr = ComparableExpression
125
;
126
 
127
NotEqualExpression:
128
  lhs_expr = ComparableExpression '!=' rhs_expr = ComparableExpression
129
;
130
 
131
ComparableExpression:
132
  NodeFieldExpression | StringExpression | NoneExpression
133
;
134
 
135
InExpression:
136
  lhs_expr = InableLHSExpression 'in' rhs_expr = InableRHSExpression
137
;
138
 
139
NotInExpression:
140
  lhs_expr = InableLHSExpression 'not in' rhs_expr = InableRHSExpression
141
;
142
 
143
InableLHSExpression:
144
  NodeFieldExpression | StringExpression
145
;
146
 
147
InableRHSExpression:
148
  NodeFieldExpression | StringExpression
149
;
150
 
151
"""