1
2
3
4
5
6
7
8
9
10
11
12
13
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
+
+
+
+
+
+
+
|
#include "parse.h"
#include "builtins/builtins.h"
using namespace empathy;
using namespace empathy::parse;
Parser Parser::makeNestedParser()
{
Parser p( m_resolver );
p.m_introDelimiter = m_introDelimiter;
return p;
}
optional< Value > Parser::parse( uint32_t precedence )
{
auto next = m_resolver->lookAhead();
if( !next )
return nullopt;
|
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
-
+
-
+
|
optional< Value > Parser::parseInfix( const pvec& vec, uint32_t prec )
{
auto t = *m_resolver->lookAhead();
auto val = ValueFromIRExpr( t );
if( !val )
return Parser( m_resolver ).parse( prec );
return makeNestedParser().parse( prec );
// If the term is an infix rule value, invoke its parseInfix() function.
auto rule = FromValue< Rule >( *val );
if( !rule )
return Parser( m_resolver ).parse( prec );
return makeNestedParser().parse( prec );
m_resolver->consume();
if( !rule->isInfix() )
return nullopt;
return rule->parseInfix( *this, t, prec );
}
|