
Hi, I have a question about StartOffset of DefaultAstNode.
I implemented if-statement grammar using LL(*) Parser Framework,
and the output from LL Parser Debugger looks fine,
but my StartOffset values for Expression, TrueStatement, and FalseStatement seem to be wrong.
The following is my grammar definition, Output from LL Parser Debugger, and offset values;
Grammar:
Root = new NonTerminal("DocumentRoot");
var statement = new NonTerminal("statement");
statement.Production = @identifier + @assignInput + @integer + @semicolon;
var expression = new NonTerminal("expression");
expression.Production = @identifier.ToTerm().ToProduction();
Root.Production = @if
+ @openParen + expression["expression"] + @closeParen
+ statement["true_stm"]
+ (@else + statement["false_stm"]).Optional()
> Ast("TestIfStatement",
Ast("Expression", AstFrom("expression")),
Ast("TrueStatement", AstFrom("true_stm")),
Ast("FalseStatement", AstFrom("false_stm")));
Input text:
if (isTrue) x := 1; else x := 2;
Output from LL Parser Debugger:
TestIfStatement[
Expression[
expression[
"isTrue"
]
]
TrueStatement[
statement[
"x"
":="
"1"
";"
]
]
FalseStatement[
statement[
"x"
":="
"2"
";"
]
]
]
Ast node offsets(from debugging with Visual Studio):
Expression StartOffset: 0 EndOffset: 32
expression StartOffset: 4 EndOffset: 10
isTrue StartOffset: 4 EndOffset: 10
TrueStatement StartOffset: 0 EndOffset: 32
statement StartOffset: 12 EndOffset: 19
x StartOffset: 12 EndOffset: 13
:= StartOffset: 14 EndOffset: 16
1 StartOffset: 17 EndOffset: 18
; StartOffset: 18 EndOffset: 19
FalseStatement StartOffset: 0 EndOffset: 32
statement StartOffset: 25 EndOffset: 32
x StartOffset: 25 EndOffset: 26
:= StartOffset: 27 EndOffset: 29
2 StartOffset: 30 EndOffset: 31
; StartOffset: 31 EndOffset: 32
Question:
Why are the StartOffset values for Expression, TrueStatement, and FalseStatement Zero,
even though they are not at the beginning of the document?