@@ -55,7 +55,7 @@ public static Evaluator parse(String query) {
55
55
Parse the query. We use this simplified expression of the grammar:
56
56
<pre>
57
57
SelectorGroup ::= Selector (',' Selector)*
58
- Selector ::= SimpleSequence ( Combinator SimpleSequence )*
58
+ Selector ::= [ Combinator ] SimpleSequence ( Combinator SimpleSequence )*
59
59
SimpleSequence ::= [ TypeSelector ] ( ID | Class | Attribute | Pseudo )*
60
60
Pseudo ::= ':' Name [ '(' SelectorGroup ')' ]
61
61
Combinator ::= S+ // descendant (whitespace)
@@ -85,8 +85,16 @@ Evaluator parseSelectorGroup() {
85
85
}
86
86
87
87
Evaluator parseSelector () {
88
- // SimpleSequence ( Combinator SimpleSequence )*
89
- Evaluator left = parseSimpleSequence ();
88
+ // Selector ::= [ Combinator ] SimpleSequence ( Combinator SimpleSequence )*
89
+ tq .consumeWhitespace ();
90
+
91
+ Evaluator left ;
92
+ if (tq .matchesAny (Combinators )) {
93
+ // e.g. query is "> div"; left side is root element
94
+ left = new StructuralEvaluator .Root ();
95
+ } else {
96
+ left = parseSimpleSequence ();
97
+ }
90
98
91
99
while (true ) {
92
100
char combinator = 0 ;
@@ -117,8 +125,6 @@ Evaluator parseSimpleSequence() {
117
125
left = byTag ();
118
126
else if (tq .matchChomp ('*' ))
119
127
left = new Evaluator .AllElements ();
120
- else if (tq .matchesAny (Combinators )) // e.g. query is "> div"; type is root element
121
- left = new StructuralEvaluator .Root ();
122
128
123
129
// zero or more subclasses (#, ., [)
124
130
while (true ) {
0 commit comments