For the following parser definition (syntax):
%lexer
\n+ %restart
A A
B B
X X
%parser
document:
foo:
$$.sem = [$1.sem]
document X foo:
$$.sem = $1.sem
$$.sem.append($3.sem)
foo:
%empty:
$$.sem = $$.pos
A:
$$.sem = $$.pos
B:
$$.sem = $$.sem
Together with a script bar.py:
#!/usr/bin/env python3
import pprint
import sys
from foo import Parser, Lexer
l = Lexer(open(sys.argv[1], "rb"), filename=sys.argv[1])
p = Parser(l)
result = p.Parse()
for item in result:
print(item)
And the following input (text):
We get the following:
$ python3 -m pyLRp -lL3Td -o foo.py syntax && python3 bar.py text
0 # (0, 4) A "A"
0 4 # (1, 3) X "X"
0 6 # (1, 0) X "X"
0 1 # (0, 2) X "X"
0 1 2 # (1, 2) $EOF ""
0 1 2 3 # (1, 1) $EOF ""
0 1 # (1, 5) $EOF ""
text Line 1:0 - 1:1
Line 0:0 - 1:2
As you can see, even the file name is missing from the position information for the %empty production. I understand that it might be difficult to get a coherent range of characters, but the file name should be available correctly.
If possible, col0 == col1 and line0 == line1 would be nice, too, but I don’t know if it makes sense.
For the following parser definition (
syntax):Together with a script
bar.py:And the following input (
text):We get the following:
As you can see, even the file name is missing from the position information for the
%emptyproduction. I understand that it might be difficult to get a coherent range of characters, but the file name should be available correctly.If possible,
col0 == col1andline0 == line1would be nice, too, but I don’t know if it makes sense.