Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
Simplify handling of position in the parser by adding a class Span that keeps track of the tokens that have contributed to the current non-terminal.
Some patterns:
- final Span s; declaration of a Span at the top of a production
- s = span(); initializes s to a Span that includes the token we just saw; very often occurs immediately after the first token in the production
- s.end(this); adds the most recent token to span s and evaluates to a SqlParserPosition that spans from beginning to end; commonly used when making a call to a function
- s.add(node); adds a SqlNode's parser position to a span
- s.addAll(nodeList); adds several SqlNodes' parser positions to a span
- s = Span.of(); initializes s to an empty Span, not even including the most recent token; rarely used