1 # Lexer and its tokens.
2 # This file was generated by SableCC (http://www.sablecc.org/).
8 readable writable attr _text
: String
9 readable attr _filename
: String
10 readable attr _line
: Int
11 readable attr _pos
: Int
13 meth parser_index
: Int is abstract
15 redef meth to_s
: String do
21 redef meth parser_index
: Int
26 init(text
: String, fname
: String, line
: Int, pos
: Int)
36 redef meth parser_index
: Int
41 init(text
: String, fname
: String, line
: Int, pos
: Int)
50 redef class TKwpackage
51 redef meth parser_index
: Int
56 init(fname
: String, line
: Int, pos
: Int)
58 _text
= once
"package"
66 redef meth parser_index
: Int
71 init(fname
: String, line
: Int, pos
: Int)
81 redef meth parser_index
: Int
86 init(fname
: String, line
: Int, pos
: Int)
95 redef class TKwabstract
96 redef meth parser_index
: Int
101 init(fname
: String, line
: Int, pos
: Int)
103 _text
= once
"abstract"
110 redef class TKwinterface
111 redef meth parser_index
: Int
116 init(fname
: String, line
: Int, pos
: Int)
118 _text
= once
"interface"
125 redef class TKwuniversal
126 redef meth parser_index
: Int
131 init(fname
: String, line
: Int, pos
: Int)
133 _text
= once
"universal"
140 redef class TKwspecial
141 redef meth parser_index
: Int
146 init(fname
: String, line
: Int, pos
: Int)
148 _text
= once
"special"
156 redef meth parser_index
: Int
161 init(fname
: String, line
: Int, pos
: Int)
171 redef meth parser_index
: Int
176 init(fname
: String, line
: Int, pos
: Int)
186 redef meth parser_index
: Int
191 init(fname
: String, line
: Int, pos
: Int)
201 redef meth parser_index
: Int
206 init(fname
: String, line
: Int, pos
: Int)
216 redef meth parser_index
: Int
221 init(fname
: String, line
: Int, pos
: Int)
231 redef meth parser_index
: Int
236 init(fname
: String, line
: Int, pos
: Int)
246 redef meth parser_index
: Int
251 init(fname
: String, line
: Int, pos
: Int)
261 redef meth parser_index
: Int
266 init(fname
: String, line
: Int, pos
: Int)
275 redef class TKwreadable
276 redef meth parser_index
: Int
281 init(fname
: String, line
: Int, pos
: Int)
283 _text
= once
"readable"
290 redef class TKwwritable
291 redef meth parser_index
: Int
296 init(fname
: String, line
: Int, pos
: Int)
298 _text
= once
"writable"
306 redef meth parser_index
: Int
311 init(fname
: String, line
: Int, pos
: Int)
320 redef class TKwintern
321 redef meth parser_index
: Int
326 init(fname
: String, line
: Int, pos
: Int)
328 _text
= once
"intern"
335 redef class TKwextern
336 redef meth parser_index
: Int
341 init(fname
: String, line
: Int, pos
: Int)
343 _text
= once
"extern"
350 redef class TKwprotected
351 redef meth parser_index
: Int
356 init(fname
: String, line
: Int, pos
: Int)
358 _text
= once
"protected"
365 redef class TKwprivate
366 redef meth parser_index
: Int
371 init(fname
: String, line
: Int, pos
: Int)
373 _text
= once
"private"
380 redef class TKwintrude
381 redef meth parser_index
: Int
386 init(fname
: String, line
: Int, pos
: Int)
388 _text
= once
"intrude"
396 redef meth parser_index
: Int
401 init(fname
: String, line
: Int, pos
: Int)
411 redef meth parser_index
: Int
416 init(fname
: String, line
: Int, pos
: Int)
426 redef meth parser_index
: Int
431 init(fname
: String, line
: Int, pos
: Int)
441 redef meth parser_index
: Int
446 init(fname
: String, line
: Int, pos
: Int)
456 redef meth parser_index
: Int
461 init(fname
: String, line
: Int, pos
: Int)
471 redef meth parser_index
: Int
476 init(fname
: String, line
: Int, pos
: Int)
486 redef meth parser_index
: Int
491 init(fname
: String, line
: Int, pos
: Int)
501 redef meth parser_index
: Int
506 init(fname
: String, line
: Int, pos
: Int)
516 redef meth parser_index
: Int
521 init(fname
: String, line
: Int, pos
: Int)
530 redef class TKwreturn
531 redef meth parser_index
: Int
536 init(fname
: String, line
: Int, pos
: Int)
538 _text
= once
"return"
545 redef class TKwcontinue
546 redef meth parser_index
: Int
551 init(fname
: String, line
: Int, pos
: Int)
553 _text
= once
"continue"
561 redef meth parser_index
: Int
566 init(fname
: String, line
: Int, pos
: Int)
576 redef meth parser_index
: Int
581 init(fname
: String, line
: Int, pos
: Int)
590 redef class TKwassert
591 redef meth parser_index
: Int
596 init(fname
: String, line
: Int, pos
: Int)
598 _text
= once
"assert"
606 redef meth parser_index
: Int
611 init(fname
: String, line
: Int, pos
: Int)
621 redef meth parser_index
: Int
626 init(fname
: String, line
: Int, pos
: Int)
636 redef meth parser_index
: Int
641 init(fname
: String, line
: Int, pos
: Int)
651 redef meth parser_index
: Int
656 init(fname
: String, line
: Int, pos
: Int)
666 redef meth parser_index
: Int
671 init(fname
: String, line
: Int, pos
: Int)
681 redef meth parser_index
: Int
686 init(fname
: String, line
: Int, pos
: Int)
696 redef meth parser_index
: Int
701 init(fname
: String, line
: Int, pos
: Int)
711 redef meth parser_index
: Int
716 init(fname
: String, line
: Int, pos
: Int)
726 redef meth parser_index
: Int
731 init(fname
: String, line
: Int, pos
: Int)
741 redef meth parser_index
: Int
746 init(fname
: String, line
: Int, pos
: Int)
756 redef meth parser_index
: Int
761 init(fname
: String, line
: Int, pos
: Int)
771 redef meth parser_index
: Int
776 init(fname
: String, line
: Int, pos
: Int)
786 redef meth parser_index
: Int
791 init(fname
: String, line
: Int, pos
: Int)
801 redef meth parser_index
: Int
806 init(fname
: String, line
: Int, pos
: Int)
816 redef meth parser_index
: Int
821 init(fname
: String, line
: Int, pos
: Int)
831 redef meth parser_index
: Int
836 init(fname
: String, line
: Int, pos
: Int)
846 redef meth parser_index
: Int
851 init(fname
: String, line
: Int, pos
: Int)
861 redef meth parser_index
: Int
866 init(fname
: String, line
: Int, pos
: Int)
875 redef class TDotdotdot
876 redef meth parser_index
: Int
881 init(fname
: String, line
: Int, pos
: Int)
891 redef meth parser_index
: Int
896 init(fname
: String, line
: Int, pos
: Int)
906 redef meth parser_index
: Int
911 init(fname
: String, line
: Int, pos
: Int)
921 redef meth parser_index
: Int
926 init(fname
: String, line
: Int, pos
: Int)
936 redef meth parser_index
: Int
941 init(fname
: String, line
: Int, pos
: Int)
951 redef meth parser_index
: Int
956 init(fname
: String, line
: Int, pos
: Int)
966 redef meth parser_index
: Int
971 init(fname
: String, line
: Int, pos
: Int)
981 redef meth parser_index
: Int
986 init(fname
: String, line
: Int, pos
: Int)
996 redef meth parser_index
: Int
1001 init(fname
: String, line
: Int, pos
: Int)
1011 redef meth parser_index
: Int
1016 init(fname
: String, line
: Int, pos
: Int)
1026 redef meth parser_index
: Int
1031 init(fname
: String, line
: Int, pos
: Int)
1041 redef meth parser_index
: Int
1046 init(fname
: String, line
: Int, pos
: Int)
1056 redef meth parser_index
: Int
1061 init(fname
: String, line
: Int, pos
: Int)
1071 redef meth parser_index
: Int
1076 init(fname
: String, line
: Int, pos
: Int)
1085 redef class TStarship
1086 redef meth parser_index
: Int
1091 init(fname
: String, line
: Int, pos
: Int)
1100 redef class TClassid
1101 redef meth parser_index
: Int
1106 init(text
: String, fname
: String, line
: Int, pos
: Int)
1116 redef meth parser_index
: Int
1121 init(text
: String, fname
: String, line
: Int, pos
: Int)
1131 redef meth parser_index
: Int
1136 init(text
: String, fname
: String, line
: Int, pos
: Int)
1146 redef meth parser_index
: Int
1151 init(text
: String, fname
: String, line
: Int, pos
: Int)
1161 redef meth parser_index
: Int
1166 init(text
: String, fname
: String, line
: Int, pos
: Int)
1176 redef meth parser_index
: Int
1181 init(text
: String, fname
: String, line
: Int, pos
: Int)
1191 redef meth parser_index
: Int
1196 init(text
: String, fname
: String, line
: Int, pos
: Int)
1205 redef class TStartString
1206 redef meth parser_index
: Int
1211 init(text
: String, fname
: String, line
: Int, pos
: Int)
1220 redef class TMidString
1221 redef meth parser_index
: Int
1226 init(text
: String, fname
: String, line
: Int, pos
: Int)
1235 redef class TEndString
1236 redef meth parser_index
: Int
1241 init(text
: String, fname
: String, line
: Int, pos
: Int)
1252 redef meth parser_index
: Int
1257 init(fname
: String, line
: Int, pos
: Int)
1267 readable writable attr _message
: String
1269 init init_error
(fname
: String, line
: Int, pos
: Int, message
: String)
1271 init(fname
, line
, pos
)
1277 # The lexer extract NIT tokens from an input stream.
1278 # It is better user with the Parser
1283 # Lexer current state
1286 # Name of the stream (as given to tokens)
1287 readable attr _filename
: String
1289 # Input stream where character are read
1290 attr _stream
: IStream
1292 # Pushback buffer to store unread character
1293 attr _stream_buf
: String
1295 # Number of character stored in the pushback buffer
1296 attr _stream_pos
: Int
1298 # Current line number in the input stream
1301 # Current column in the input stream
1304 # Was the last character a cariage-return?
1307 # If the end of stream?
1310 # Current working text read from the input stream
1313 # Constante state values
1314 private meth state_initial
: Int do return 0 end
1316 # Create a new lexer for a stream (and a name)
1317 init(stream
: IStream, fname
: String)
1323 _stream_buf
= new String
1328 # Give the next token (but do not consume it)
1331 while _token
== null do
1337 # Give and consume the next token
1341 while result
== null do
1348 # Get a token, or null if it is discarded
1349 private meth get_token
: Token
1353 var start_pos
= _pos
1354 var start_line
= _line
1356 var accept_state
= -1
1357 var accept_token
= -1
1358 var accept_length
= -1
1360 var accept_line
= -1
1362 var goto_table
= _goto_table
[_state
]
1363 var accept
= _accept_table
[_state
]
1377 else if c
== 13 then
1388 var first_loop
= true # aka until
1389 while dfa_state
< -1 or first_loop
do
1390 var old_state
= dfa_state
1391 if dfa_state
< -1 then
1392 old_state
= -2 - dfa_state
1397 var tmp1
= goto_table
[old_state
]
1399 var high
= tmp1
.length
- 1
1401 while low
<= high
do
1402 var middle
= (low
+ high
) / 2
1403 var tmp2
= tmp1
[middle
]
1407 else if c
> tmp2
[1] then
1411 low
= high
+ 1 # aka break
1414 first_loop
= false # aka until
1420 if dfa_state
>= 0 then
1421 if accept
[dfa_state
] != -1 then
1422 accept_state
= dfa_state
1423 accept_token
= accept
[dfa_state
]
1424 accept_length
= _text
.length
1429 if accept_state
!= -1 then
1430 if accept_token
== 0 then
1431 push_back
(accept_length
)
1436 if accept_token
== 1 then
1437 var token_text
= _text
.substring
(0, accept_length
)
1438 var token
= new TEol(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1439 push_back
(accept_length
)
1444 if accept_token
== 2 then
1445 var token_text
= _text
.substring
(0, accept_length
)
1446 var token
= new TComment(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1447 push_back
(accept_length
)
1452 if accept_token
== 3 then
1453 var token
= new TKwpackage(_filename
, start_line
+ 1, start_pos
+ 1)
1454 push_back
(accept_length
)
1459 if accept_token
== 4 then
1460 var token
= new TKwimport(_filename
, start_line
+ 1, start_pos
+ 1)
1461 push_back
(accept_length
)
1466 if accept_token
== 5 then
1467 var token
= new TKwclass(_filename
, start_line
+ 1, start_pos
+ 1)
1468 push_back
(accept_length
)
1473 if accept_token
== 6 then
1474 var token
= new TKwabstract(_filename
, start_line
+ 1, start_pos
+ 1)
1475 push_back
(accept_length
)
1480 if accept_token
== 7 then
1481 var token
= new TKwinterface(_filename
, start_line
+ 1, start_pos
+ 1)
1482 push_back
(accept_length
)
1487 if accept_token
== 8 then
1488 var token
= new TKwuniversal(_filename
, start_line
+ 1, start_pos
+ 1)
1489 push_back
(accept_length
)
1494 if accept_token
== 9 then
1495 var token
= new TKwspecial(_filename
, start_line
+ 1, start_pos
+ 1)
1496 push_back
(accept_length
)
1501 if accept_token
== 10 then
1502 var token
= new TKwend(_filename
, start_line
+ 1, start_pos
+ 1)
1503 push_back
(accept_length
)
1508 if accept_token
== 11 then
1509 var token
= new TKwmeth(_filename
, start_line
+ 1, start_pos
+ 1)
1510 push_back
(accept_length
)
1515 if accept_token
== 12 then
1516 var token
= new TKwtype(_filename
, start_line
+ 1, start_pos
+ 1)
1517 push_back
(accept_length
)
1522 if accept_token
== 13 then
1523 var token
= new TKwattr(_filename
, start_line
+ 1, start_pos
+ 1)
1524 push_back
(accept_length
)
1529 if accept_token
== 14 then
1530 var token
= new TKwinit(_filename
, start_line
+ 1, start_pos
+ 1)
1531 push_back
(accept_length
)
1536 if accept_token
== 15 then
1537 var token
= new TKwredef(_filename
, start_line
+ 1, start_pos
+ 1)
1538 push_back
(accept_length
)
1543 if accept_token
== 16 then
1544 var token
= new TKwis(_filename
, start_line
+ 1, start_pos
+ 1)
1545 push_back
(accept_length
)
1550 if accept_token
== 17 then
1551 var token
= new TKwdo(_filename
, start_line
+ 1, start_pos
+ 1)
1552 push_back
(accept_length
)
1557 if accept_token
== 18 then
1558 var token
= new TKwreadable(_filename
, start_line
+ 1, start_pos
+ 1)
1559 push_back
(accept_length
)
1564 if accept_token
== 19 then
1565 var token
= new TKwwritable(_filename
, start_line
+ 1, start_pos
+ 1)
1566 push_back
(accept_length
)
1571 if accept_token
== 20 then
1572 var token
= new TKwvar(_filename
, start_line
+ 1, start_pos
+ 1)
1573 push_back
(accept_length
)
1578 if accept_token
== 21 then
1579 var token
= new TKwintern(_filename
, start_line
+ 1, start_pos
+ 1)
1580 push_back
(accept_length
)
1585 if accept_token
== 22 then
1586 var token
= new TKwextern(_filename
, start_line
+ 1, start_pos
+ 1)
1587 push_back
(accept_length
)
1592 if accept_token
== 23 then
1593 var token
= new TKwprotected(_filename
, start_line
+ 1, start_pos
+ 1)
1594 push_back
(accept_length
)
1599 if accept_token
== 24 then
1600 var token
= new TKwprivate(_filename
, start_line
+ 1, start_pos
+ 1)
1601 push_back
(accept_length
)
1606 if accept_token
== 25 then
1607 var token
= new TKwintrude(_filename
, start_line
+ 1, start_pos
+ 1)
1608 push_back
(accept_length
)
1613 if accept_token
== 26 then
1614 var token
= new TKwif(_filename
, start_line
+ 1, start_pos
+ 1)
1615 push_back
(accept_length
)
1620 if accept_token
== 27 then
1621 var token
= new TKwthen(_filename
, start_line
+ 1, start_pos
+ 1)
1622 push_back
(accept_length
)
1627 if accept_token
== 28 then
1628 var token
= new TKwelse(_filename
, start_line
+ 1, start_pos
+ 1)
1629 push_back
(accept_length
)
1634 if accept_token
== 29 then
1635 var token
= new TKwwhile(_filename
, start_line
+ 1, start_pos
+ 1)
1636 push_back
(accept_length
)
1641 if accept_token
== 30 then
1642 var token
= new TKwfor(_filename
, start_line
+ 1, start_pos
+ 1)
1643 push_back
(accept_length
)
1648 if accept_token
== 31 then
1649 var token
= new TKwin(_filename
, start_line
+ 1, start_pos
+ 1)
1650 push_back
(accept_length
)
1655 if accept_token
== 32 then
1656 var token
= new TKwand(_filename
, start_line
+ 1, start_pos
+ 1)
1657 push_back
(accept_length
)
1662 if accept_token
== 33 then
1663 var token
= new TKwor(_filename
, start_line
+ 1, start_pos
+ 1)
1664 push_back
(accept_length
)
1669 if accept_token
== 34 then
1670 var token
= new TKwnot(_filename
, start_line
+ 1, start_pos
+ 1)
1671 push_back
(accept_length
)
1676 if accept_token
== 35 then
1677 var token
= new TKwreturn(_filename
, start_line
+ 1, start_pos
+ 1)
1678 push_back
(accept_length
)
1683 if accept_token
== 36 then
1684 var token
= new TKwcontinue(_filename
, start_line
+ 1, start_pos
+ 1)
1685 push_back
(accept_length
)
1690 if accept_token
== 37 then
1691 var token
= new TKwbreak(_filename
, start_line
+ 1, start_pos
+ 1)
1692 push_back
(accept_length
)
1697 if accept_token
== 38 then
1698 var token
= new TKwabort(_filename
, start_line
+ 1, start_pos
+ 1)
1699 push_back
(accept_length
)
1704 if accept_token
== 39 then
1705 var token
= new TKwassert(_filename
, start_line
+ 1, start_pos
+ 1)
1706 push_back
(accept_length
)
1711 if accept_token
== 40 then
1712 var token
= new TKwnew(_filename
, start_line
+ 1, start_pos
+ 1)
1713 push_back
(accept_length
)
1718 if accept_token
== 41 then
1719 var token
= new TKwisa(_filename
, start_line
+ 1, start_pos
+ 1)
1720 push_back
(accept_length
)
1725 if accept_token
== 42 then
1726 var token
= new TKwonce(_filename
, start_line
+ 1, start_pos
+ 1)
1727 push_back
(accept_length
)
1732 if accept_token
== 43 then
1733 var token
= new TKwsuper(_filename
, start_line
+ 1, start_pos
+ 1)
1734 push_back
(accept_length
)
1739 if accept_token
== 44 then
1740 var token
= new TKwself(_filename
, start_line
+ 1, start_pos
+ 1)
1741 push_back
(accept_length
)
1746 if accept_token
== 45 then
1747 var token
= new TKwtrue(_filename
, start_line
+ 1, start_pos
+ 1)
1748 push_back
(accept_length
)
1753 if accept_token
== 46 then
1754 var token
= new TKwfalse(_filename
, start_line
+ 1, start_pos
+ 1)
1755 push_back
(accept_length
)
1760 if accept_token
== 47 then
1761 var token
= new TKwnull(_filename
, start_line
+ 1, start_pos
+ 1)
1762 push_back
(accept_length
)
1767 if accept_token
== 48 then
1768 var token
= new TOpar(_filename
, start_line
+ 1, start_pos
+ 1)
1769 push_back
(accept_length
)
1774 if accept_token
== 49 then
1775 var token
= new TCpar(_filename
, start_line
+ 1, start_pos
+ 1)
1776 push_back
(accept_length
)
1781 if accept_token
== 50 then
1782 var token
= new TObra(_filename
, start_line
+ 1, start_pos
+ 1)
1783 push_back
(accept_length
)
1788 if accept_token
== 51 then
1789 var token
= new TCbra(_filename
, start_line
+ 1, start_pos
+ 1)
1790 push_back
(accept_length
)
1795 if accept_token
== 52 then
1796 var token
= new TComma(_filename
, start_line
+ 1, start_pos
+ 1)
1797 push_back
(accept_length
)
1802 if accept_token
== 53 then
1803 var token
= new TColumn(_filename
, start_line
+ 1, start_pos
+ 1)
1804 push_back
(accept_length
)
1809 if accept_token
== 54 then
1810 var token
= new TQuad(_filename
, start_line
+ 1, start_pos
+ 1)
1811 push_back
(accept_length
)
1816 if accept_token
== 55 then
1817 var token
= new TAssign(_filename
, start_line
+ 1, start_pos
+ 1)
1818 push_back
(accept_length
)
1823 if accept_token
== 56 then
1824 var token
= new TPluseq(_filename
, start_line
+ 1, start_pos
+ 1)
1825 push_back
(accept_length
)
1830 if accept_token
== 57 then
1831 var token
= new TMinuseq(_filename
, start_line
+ 1, start_pos
+ 1)
1832 push_back
(accept_length
)
1837 if accept_token
== 58 then
1838 var token
= new TDotdotdot(_filename
, start_line
+ 1, start_pos
+ 1)
1839 push_back
(accept_length
)
1844 if accept_token
== 59 then
1845 var token
= new TDotdot(_filename
, start_line
+ 1, start_pos
+ 1)
1846 push_back
(accept_length
)
1851 if accept_token
== 60 then
1852 var token
= new TDot(_filename
, start_line
+ 1, start_pos
+ 1)
1853 push_back
(accept_length
)
1858 if accept_token
== 61 then
1859 var token
= new TPlus(_filename
, start_line
+ 1, start_pos
+ 1)
1860 push_back
(accept_length
)
1865 if accept_token
== 62 then
1866 var token
= new TMinus(_filename
, start_line
+ 1, start_pos
+ 1)
1867 push_back
(accept_length
)
1872 if accept_token
== 63 then
1873 var token
= new TStar(_filename
, start_line
+ 1, start_pos
+ 1)
1874 push_back
(accept_length
)
1879 if accept_token
== 64 then
1880 var token
= new TSlash(_filename
, start_line
+ 1, start_pos
+ 1)
1881 push_back
(accept_length
)
1886 if accept_token
== 65 then
1887 var token
= new TPercent(_filename
, start_line
+ 1, start_pos
+ 1)
1888 push_back
(accept_length
)
1893 if accept_token
== 66 then
1894 var token
= new TEq(_filename
, start_line
+ 1, start_pos
+ 1)
1895 push_back
(accept_length
)
1900 if accept_token
== 67 then
1901 var token
= new TNe(_filename
, start_line
+ 1, start_pos
+ 1)
1902 push_back
(accept_length
)
1907 if accept_token
== 68 then
1908 var token
= new TLt(_filename
, start_line
+ 1, start_pos
+ 1)
1909 push_back
(accept_length
)
1914 if accept_token
== 69 then
1915 var token
= new TLe(_filename
, start_line
+ 1, start_pos
+ 1)
1916 push_back
(accept_length
)
1921 if accept_token
== 70 then
1922 var token
= new TGt(_filename
, start_line
+ 1, start_pos
+ 1)
1923 push_back
(accept_length
)
1928 if accept_token
== 71 then
1929 var token
= new TGe(_filename
, start_line
+ 1, start_pos
+ 1)
1930 push_back
(accept_length
)
1935 if accept_token
== 72 then
1936 var token
= new TStarship(_filename
, start_line
+ 1, start_pos
+ 1)
1937 push_back
(accept_length
)
1942 if accept_token
== 73 then
1943 var token_text
= _text
.substring
(0, accept_length
)
1944 var token
= new TClassid(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1945 push_back
(accept_length
)
1950 if accept_token
== 74 then
1951 var token_text
= _text
.substring
(0, accept_length
)
1952 var token
= new TId(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1953 push_back
(accept_length
)
1958 if accept_token
== 75 then
1959 var token_text
= _text
.substring
(0, accept_length
)
1960 var token
= new TAttrid(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1961 push_back
(accept_length
)
1966 if accept_token
== 76 then
1967 var token_text
= _text
.substring
(0, accept_length
)
1968 var token
= new TNumber(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1969 push_back
(accept_length
)
1974 if accept_token
== 77 then
1975 var token_text
= _text
.substring
(0, accept_length
)
1976 var token
= new TFloat(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1977 push_back
(accept_length
)
1982 if accept_token
== 78 then
1983 var token_text
= _text
.substring
(0, accept_length
)
1984 var token
= new TChar(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1985 push_back
(accept_length
)
1990 if accept_token
== 79 then
1991 var token_text
= _text
.substring
(0, accept_length
)
1992 var token
= new TString(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
1993 push_back
(accept_length
)
1998 if accept_token
== 80 then
1999 var token_text
= _text
.substring
(0, accept_length
)
2000 var token
= new TStartString(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
2001 push_back
(accept_length
)
2006 if accept_token
== 81 then
2007 var token_text
= _text
.substring
(0, accept_length
)
2008 var token
= new TMidString(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
2009 push_back
(accept_length
)
2014 if accept_token
== 82 then
2015 var token_text
= _text
.substring
(0, accept_length
)
2016 var token
= new TEndString(token_text
, _filename
, start_line
+ 1, start_pos
+ 1)
2017 push_back
(accept_length
)
2023 if _text
.length
> 0 then
2024 var token
= new PError.init_error
(_filename
, start_line
+ 1, start_pos
+ 1, "Unknown token: {_text}")
2027 var token
= new EOF(_filename
, start_line
+ 1, start_pos
+ 1)
2036 # Read the next character.
2037 # The character is read from the stream of from the pushback buffer.
2038 private meth get_char
: Int
2046 var sp
= _stream_pos
2048 var res
= _stream_buf
[_stream_pos
]
2049 _stream_pos
= sp
- 1
2052 result
= _stream
.read_char
2055 if result
== -1 then
2062 # Unread some characters.
2063 # Unread characters are stored in the pushback buffer.
2064 private meth push_back
(accept_length
: Int)
2066 var length
= _text
.length
2068 while i
>= accept_length
do
2070 _stream_pos
= _stream_pos
+ 1
2071 _stream_buf
[_stream_pos
] = _text
[i
]
2076 attr _goto_table
: Array[Array[Array[Array[Int]]]]
2077 private meth build_goto_table
2079 _goto_table
= once
[
3228 private meth nil_array
: Array[Array[Int]]
3230 return once
new Array[Array[Int]]
3233 attr _accept_table
: Array[Array[Int]]
3234 private meth build_accept_table
do
3235 _accept_table
= once
[
3237 -1 , 0 , 1 , 1 , 0 , -1 , -1 , -1 , 65 , -1 , 48 , 49 , 63 , 61 , 52 , 62 , 60 , 64 , 76 , 53 , 68 , 55 , 70 , 73 , 50 , 51 , -1 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , -1 , 1 , 67 , -1 , 79 , -1 , 80 , -1 , 2 , 2 , -1 , 78 , 56 , 57 , 59 , 77 , -1 , 54 , 69 , 66 , 71 , 73 , 73 , 73 , 73 , 75 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 17 , 74 , 74 , 74 , 74 , 74 , 26 , 74 , 31 , 16 , 74 , 74 , 74 , 74 , 74 , 33 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , -1 , 82 , -1 , 81 , -1 , 2 , 58 , 72 , 75 , 75 , 75 , 75 , 74 , 74 , 32 , 74 , 74 , 74 , 74 , 74 , 74 , 10 , 74 , 74 , 30 , 74 , 74 , 74 , 41 , 74 , 40 , 34 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 20 , 74 , 74 , -1 , 74 , 74 , 74 , 13 , 74 , 74 , 74 , 28 , 74 , 74 , 74 , 14 , 74 , 74 , 11 , 47 , 42 , 74 , 74 , 74 , 74 , 74 , 74 , 44 , 74 , 74 , 27 , 45 , 12 , 74 , 74 , 74 , 38 , 74 , 74 , 37 , 5 , 74 , 74 , 46 , 74 , 74 , 74 , 74 , 74 , 74 , 74 , 15 , 74 , 74 , 43 , 74 , 29 , 74 , 74 , 39 , 74 , 22 , 4 , 74 , 21 , 74 , 74 , 74 , 74 , 74 , 35 , 74 , 74 , 74 , 74 , 74 , 74 , 25 , 3 , 24 , 74 , 74 , 9 , 74 , 74 , 6 , 36 , 74 , 74 , 18 , 74 , 19 , 7 , 23 , 8