Class ParseRegion
The main purpose of a ParseRegion is to give detailed locations in error messages and warnings from the parsing and validation process.
A region has a start and end line number and column number. A region is a point if the start and end positions are the same.
The line and column number are one-based, because that is what end-users understand.
A region's end-points are inclusive. For example, in the code
theSELECT FROM [Sales]
SELECT
token has region [1:1, 1:6].
Regions are immutable.
- Author:
- jhyde
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Combination of a region within an MDX statement with the source text of the whole MDX statement. -
Constructor Summary
ConstructorsConstructorDescriptionParseRegion
(int line, int column) Creates a ParseRegion.ParseRegion
(int startLine, int startColumn, int endLine, int endColumn) Creates a ParseRegion. -
Method Summary
Modifier and TypeMethodDescriptionGenerates a string of the source code annotated with caret symbols ("^") at the beginning and end of the region.boolean
static ParseRegion.RegionAndSource
Looks for one or two carets in an MDX string, and if present, converts them into a parser position.int
Return ending column number (1-based).int
Return ending line number (1-based).int
Return starting column number (1-based).int
Return starting line number (1-based).int
hashCode()
boolean
isPoint()
Returns whether this region has the same start and end point.plus
(List<? extends ParseTreeNode> nodes) plus
(ParseRegion... regions) Combines this region with other regions.plus
(ParseTreeNode... nodes) Combines this region with other regions.plusAll
(Iterable<ParseRegion> regions) Combines this region with a list of parse tree nodes to create a region which spans from the first point in the first to the last point in the other.static ParseRegion
sum
(Iterable<ParseRegion> nodes) Combines the parser positions of a list of nodes to create a position which spans from the beginning of the first to the end of the last.toString()
Returns a string representation of this ParseRegion.
-
Constructor Details
-
ParseRegion
public ParseRegion(int startLine, int startColumn, int endLine, int endColumn) Creates a ParseRegion.All lines and columns are 1-based and inclusive. For example, the token "select" in "select from [Sales]" has a region [1:1, 1:6].
- Parameters:
startLine
- Line of the beginning of the regionstartColumn
- Column of the beginning of the regionendLine
- Line of the end of the regionendColumn
- Column of the end of the region
-
ParseRegion
public ParseRegion(int line, int column) Creates a ParseRegion. All lines and columns are 1-based.- Parameters:
line
- Line of the beginning and end of the regioncolumn
- Column of the beginning and end of the region
-
-
Method Details
-
getStartLine
public int getStartLine()Return starting line number (1-based).- Returns:
- 1-based starting line number
-
getStartColumn
public int getStartColumn()Return starting column number (1-based).- Returns:
- 1-based starting column number
-
getEndLine
public int getEndLine()Return ending line number (1-based).- Returns:
- 1-based ending line number
-
getEndColumn
public int getEndColumn()Return ending column number (1-based).- Returns:
- 1-based starting endings column number
-
toString
Returns a string representation of this ParseRegion.Regions are of the form
[startLine:startColumn, endLine:endColumn]
, or[startLine:startColumn]
for point regions. -
isPoint
public boolean isPoint()Returns whether this region has the same start and end point.- Returns:
- whether this region has the same start and end point
-
hashCode
public int hashCode() -
equals
-
plus
Combines this region with other regions.- Parameters:
nodes
- Source code regions- Returns:
- region which represents the span of the given regions
-
plus
-
plus
Combines this region with other regions.- Parameters:
regions
- Source code regions- Returns:
- region which represents the span of the given regions
-
plusAll
Combines this region with a list of parse tree nodes to create a region which spans from the first point in the first to the last point in the other.- Parameters:
regions
- Collection of source code regions- Returns:
- region which represents the span of the given regions
-
sum
Combines the parser positions of a list of nodes to create a position which spans from the beginning of the first to the end of the last.- Parameters:
nodes
- Collection of parse tree nodes- Returns:
- region which represents the span of the given nodes
-
findPos
Looks for one or two carets in an MDX string, and if present, converts them into a parser position.Examples:
- findPos("xxx^yyy") yields {"xxxyyy", position 3, line 1 column 4}
- findPos("xxxyyy") yields {"xxxyyy", null}
- findPos("xxx^yy^y") yields {"xxxyyy", position 3, line 4 column 4 through line 1 column 6}
- Parameters:
code
- Source code- Returns:
- object containing source code annotated with region
-
annotate
Generates a string of the source code annotated with caret symbols ("^") at the beginning and end of the region.For example, for the region
(1, 9, 1, 12)
and source"values (foo)"
, yields the string"values (^foo^)"
.- Parameters:
source
- Source code- Returns:
- Source code annotated with position
-