Do not insert them in the linked lis of tokens
Do not use them to compute locations on productions
Signed-off-by: Jean Privat <jean@pryen.org>
t = get_token
while t == null do t = get_token
- var l = last_token
- if l != null then
- l.next_token = t
- t.prev_token = l
- else
- _file.first_token = t
+ if t._location != null then
+ var l = last_token
+ if l != null then
+ l.next_token = t
+ t.prev_token = l
+ else
+ _file.first_token = t
+ end
+ last_token = t
end
- last_token = t
_token = t
return t
end
(new ComputeProdLocationVisitor).enter_visit(node)
return node
else if action_type == 3 then # ERROR
+ # skip injected tokens
+ while token._location == null do token = lexer.next
var node2 = new AParserError.init_parser_error("Syntax error: unexpected {token}.", token.location, token)
var node = new Start(null, node2)
return node
redef fun visit(n: ANode)
do
if n isa Token then
- var loc = n.location
+ var loc = n._location
+ if loc == null then return
_last_location = loc
# Add a first token to productions that need one