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 |
1×
4286×
4281×
3853×
4364×
4359×
278×
4081×
235×
235×
234×
234×
1×
233×
233×
3846×
3846×
| import { MEMBER, INVOCATION } from 'config/types';
import readPrimary from './readPrimary';
import readExpressionList from './shared/readExpressionList';
import readRefinement from './shared/readRefinement';
import { expectedParen } from './shared/errors';
export default function ( parser ) {
let expression = readPrimary( parser );
if ( !expression ) return null;
while ( expression ) {
const refinement = readRefinement( parser );
if ( refinement ) {
expression = {
t: MEMBER,
x: expression,
r: refinement
};
}
else if ( parser.matchString( '(' ) ) {
parser.sp();
const expressionList = readExpressionList( parser, true );
parser.sp();
if ( !parser.matchString( ')' ) ) {
parser.error( expectedParen );
}
expression = {
t: INVOCATION,
x: expression
};
if ( expressionList ) expression.o = expressionList;
}
else {
break;
}
}
return expression;
}
|