@@ -55,7 +55,7 @@ public static Evaluator parse(String query) {
5555 Parse the query. We use this simplified expression of the grammar:
5656 <pre>
5757 SelectorGroup ::= Selector (',' Selector)*
58- Selector ::= SimpleSequence ( Combinator SimpleSequence )*
58+ Selector ::= [ Combinator ] SimpleSequence ( Combinator SimpleSequence )*
5959 SimpleSequence ::= [ TypeSelector ] ( ID | Class | Attribute | Pseudo )*
6060 Pseudo ::= ':' Name [ '(' SelectorGroup ')' ]
6161 Combinator ::= S+ // descendant (whitespace)
@@ -85,8 +85,16 @@ Evaluator parseSelectorGroup() {
8585 }
8686
8787 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+ }
9098
9199 while (true ) {
92100 char combinator = 0 ;
@@ -117,8 +125,6 @@ Evaluator parseSimpleSequence() {
117125 left = byTag ();
118126 else if (tq .matchChomp ('*' ))
119127 left = new Evaluator .AllElements ();
120- else if (tq .matchesAny (Combinators )) // e.g. query is "> div"; type is root element
121- left = new StructuralEvaluator .Root ();
122128
123129 // zero or more subclasses (#, ., [)
124130 while (true ) {
0 commit comments