-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit fbb0751
Showing
44 changed files
with
6,286 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/handins |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
grammar JurjenLang ; | ||
startRule: func EOF ; | ||
|
||
func : func_def scope ; | ||
func_def : FUNC_KW IDENTIFIER ; | ||
func_return : FUNC_RET retstat ; | ||
|
||
scope : BRACK_OPEN stats func_return? BRACK_CLOSE ; | ||
|
||
stats : stat* ; | ||
stat : assignment | ||
| printstat | ||
| ifchain | ||
; | ||
|
||
printstat : PRINT_KW expr=assignable ; | ||
retstat : expr = assignable ; | ||
|
||
ifchain : ifchain_if=ifstat ifchain_elifs=elifstat_chain ifchain_else=maybe_elsestat ; | ||
ifstat : IF_KW expr=bool_e scope ; | ||
elifstat_chain : (elifstat)* ; | ||
elifstat : ELIF_KW expr=bool_e scope ; | ||
maybe_elsestat : (elsestat)? ; | ||
elsestat : ELSE_KW scope ; | ||
|
||
|
||
assignment : name=variable ASSIGN ass=assignable ; | ||
|
||
assignable : expr=e # assignable_expression | ||
| expr=bool_e # assignable_bool_expression | ||
; | ||
|
||
e : PAR_OPEN expr=e PAR_CLOSE # e_parentheses | ||
| expr=e operator=SYMB_EXCLM # e_factorial | ||
| left=e operator=SYMB_HAT right=e # e_exponent | ||
| left=e operator=SYMB_STAR right=e # e_multiply | ||
| left=e operator=SYMB_SLASH right=e # e_division | ||
| left=e operator=SYMB_PLUS right=e # e_addition | ||
| left=e operator=SYMB_MINUS right=e # e_subtraction | ||
| SYMB_MINUS expr=e # e_negation | ||
| value=integer # e_integer | ||
| name=variable # e_variable | ||
; | ||
|
||
bool_e : left=bool_e AND_KW right=bool_e # bool_e_and | ||
| left=bool_e OR_KW right=bool_e # bool_e_or | ||
| NOT_KW bool_expr=bool_e # bool_e_not | ||
| left=e EQUALS right=e # bool_e_expressions | ||
| value=boolean # bool_e_boolean | ||
| name=variable # bool_e_variable | ||
; | ||
|
||
variable : IDENTIFIER ; | ||
integer : (SYMB_MINUS)? NUMBERS ; | ||
boolean : TRUE_KW # boolean_true | ||
| FALSE_KW # boolean_false | ||
; | ||
|
||
FUNC_KW : 'func' ; | ||
FUNC_RET : 'return' ; | ||
PRINT_KW : 'print' ; | ||
|
||
IF_KW : 'if' ; | ||
ELIF_KW : 'elif' ; | ||
ELSE_KW : 'else' ; | ||
|
||
TRUE_KW : 'true' ; | ||
FALSE_KW : 'false' ; | ||
|
||
AND_KW : 'and' ; | ||
OR_KW : 'or' ; | ||
NOT_KW : 'not' ; | ||
|
||
NUMBERS : DIGIT+ ; | ||
IDENTIFIER : ('a' .. 'z' | 'A' .. 'Z') ('a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_')* ; | ||
SYMB_EXCLM : '!' ; | ||
SYMB_HAT : '^' ; | ||
SYMB_STAR : '*' ; | ||
SYMB_SLASH : '/' ; | ||
SYMB_PLUS : '+' ; | ||
SYMB_MINUS : '-' ; | ||
ASSIGN : '=' ; | ||
EQUALS : '==' ; | ||
PAR_OPEN : '(' ; | ||
PAR_CLOSE : ')' ; | ||
BRACK_OPEN : '{' ; | ||
BRACK_CLOSE : '}' ; | ||
WS : [ \t\r\n]+ -> skip ; | ||
|
||
fragment DIGIT : '0' .. '9' ; | ||
fragment BIT : '0' .. '1' ; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# pyANTLR_project | ||
|
||
To execute, follow the following steps | ||
1. Install ANTLR on your OS | ||
2. Install the `antlr4-python3-runtime` package for python | ||
3. `py project.py .\text.txt` | ||
|
||
The repository includes a java folder, which is exclusively used for the antlr4 testrig. I wont be implementing any listeners there. | ||
|
||
## Making changes | ||
|
||
If you made changes to the language or anything else, and the python files (and java classes for testrig) have to be regenerated, use the following steps: | ||
1. Make sure you are in the root folder of the repository | ||
2. `start .\generate.bat` should renew all files | ||
|
||
## Testrig | ||
|
||
To use the antlr4 testrig, use the following tutorial: | ||
1. Navigate to the java/ file `cd java` | ||
2. `start .\testrig.bat` should open a command window and eventually open up the testrig |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
token literal names: | ||
null | ||
'func' | ||
'return' | ||
'print' | ||
'if' | ||
'elif' | ||
'else' | ||
'true' | ||
'false' | ||
'and' | ||
'or' | ||
'not' | ||
null | ||
null | ||
'!' | ||
'^' | ||
'*' | ||
'/' | ||
'+' | ||
'-' | ||
'=' | ||
'==' | ||
'(' | ||
')' | ||
'{' | ||
'}' | ||
null | ||
|
||
token symbolic names: | ||
null | ||
FUNC_KW | ||
FUNC_RET | ||
PRINT_KW | ||
IF_KW | ||
ELIF_KW | ||
ELSE_KW | ||
TRUE_KW | ||
FALSE_KW | ||
AND_KW | ||
OR_KW | ||
NOT_KW | ||
NUMBERS | ||
IDENTIFIER | ||
SYMB_EXCLM | ||
SYMB_HAT | ||
SYMB_STAR | ||
SYMB_SLASH | ||
SYMB_PLUS | ||
SYMB_MINUS | ||
ASSIGN | ||
EQUALS | ||
PAR_OPEN | ||
PAR_CLOSE | ||
BRACK_OPEN | ||
BRACK_CLOSE | ||
WS | ||
|
||
rule names: | ||
startRule | ||
func | ||
func_def | ||
func_return | ||
scope | ||
stats | ||
stat | ||
printstat | ||
retstat | ||
ifchain | ||
ifstat | ||
elifstat_chain | ||
elifstat | ||
maybe_elsestat | ||
elsestat | ||
assignment | ||
assignable | ||
e | ||
bool_e | ||
variable | ||
integer | ||
boolean | ||
|
||
|
||
atn: | ||
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 28, 180, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 5, 6, 62, 10, 6, 3, 6, 3, 6, 3, 7, 7, 7, 67, 10, 7, 12, 7, 14, 7, 70, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 75, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 7, 13, 91, 10, 13, 12, 13, 14, 13, 94, 11, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 5, 15, 101, 10, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 112, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 123, 10, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 142, 10, 19, 12, 19, 14, 19, 145, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 156, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 164, 10, 20, 12, 20, 14, 20, 167, 11, 20, 3, 21, 3, 21, 3, 22, 5, 22, 172, 10, 22, 3, 22, 3, 22, 3, 23, 3, 23, 5, 23, 178, 10, 23, 3, 23, 2, 4, 36, 38, 24, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 2, 2, 2, 180, 2, 46, 3, 2, 2, 2, 4, 49, 3, 2, 2, 2, 6, 52, 3, 2, 2, 2, 8, 55, 3, 2, 2, 2, 10, 58, 3, 2, 2, 2, 12, 68, 3, 2, 2, 2, 14, 74, 3, 2, 2, 2, 16, 76, 3, 2, 2, 2, 18, 79, 3, 2, 2, 2, 20, 81, 3, 2, 2, 2, 22, 85, 3, 2, 2, 2, 24, 92, 3, 2, 2, 2, 26, 95, 3, 2, 2, 2, 28, 100, 3, 2, 2, 2, 30, 102, 3, 2, 2, 2, 32, 105, 3, 2, 2, 2, 34, 111, 3, 2, 2, 2, 36, 122, 3, 2, 2, 2, 38, 155, 3, 2, 2, 2, 40, 168, 3, 2, 2, 2, 42, 171, 3, 2, 2, 2, 44, 177, 3, 2, 2, 2, 46, 47, 5, 4, 3, 2, 47, 48, 7, 2, 2, 3, 48, 3, 3, 2, 2, 2, 49, 50, 5, 6, 4, 2, 50, 51, 5, 10, 6, 2, 51, 5, 3, 2, 2, 2, 52, 53, 7, 3, 2, 2, 53, 54, 7, 15, 2, 2, 54, 7, 3, 2, 2, 2, 55, 56, 7, 4, 2, 2, 56, 57, 5, 18, 10, 2, 57, 9, 3, 2, 2, 2, 58, 59, 7, 26, 2, 2, 59, 61, 5, 12, 7, 2, 60, 62, 5, 8, 5, 2, 61, 60, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 64, 7, 27, 2, 2, 64, 11, 3, 2, 2, 2, 65, 67, 5, 14, 8, 2, 66, 65, 3, 2, 2, 2, 67, 70, 3, 2, 2, 2, 68, 66, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 13, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 75, 5, 32, 17, 2, 72, 75, 5, 16, 9, 2, 73, 75, 5, 20, 11, 2, 74, 71, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 74, 73, 3, 2, 2, 2, 75, 15, 3, 2, 2, 2, 76, 77, 7, 5, 2, 2, 77, 78, 5, 34, 18, 2, 78, 17, 3, 2, 2, 2, 79, 80, 5, 34, 18, 2, 80, 19, 3, 2, 2, 2, 81, 82, 5, 22, 12, 2, 82, 83, 5, 24, 13, 2, 83, 84, 5, 28, 15, 2, 84, 21, 3, 2, 2, 2, 85, 86, 7, 6, 2, 2, 86, 87, 5, 38, 20, 2, 87, 88, 5, 10, 6, 2, 88, 23, 3, 2, 2, 2, 89, 91, 5, 26, 14, 2, 90, 89, 3, 2, 2, 2, 91, 94, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 25, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 95, 96, 7, 7, 2, 2, 96, 97, 5, 38, 20, 2, 97, 98, 5, 10, 6, 2, 98, 27, 3, 2, 2, 2, 99, 101, 5, 30, 16, 2, 100, 99, 3, 2, 2, 2, 100, 101, 3, 2, 2, 2, 101, 29, 3, 2, 2, 2, 102, 103, 7, 8, 2, 2, 103, 104, 5, 10, 6, 2, 104, 31, 3, 2, 2, 2, 105, 106, 5, 40, 21, 2, 106, 107, 7, 22, 2, 2, 107, 108, 5, 34, 18, 2, 108, 33, 3, 2, 2, 2, 109, 112, 5, 36, 19, 2, 110, 112, 5, 38, 20, 2, 111, 109, 3, 2, 2, 2, 111, 110, 3, 2, 2, 2, 112, 35, 3, 2, 2, 2, 113, 114, 8, 19, 1, 2, 114, 115, 7, 24, 2, 2, 115, 116, 5, 36, 19, 2, 116, 117, 7, 25, 2, 2, 117, 123, 3, 2, 2, 2, 118, 119, 7, 21, 2, 2, 119, 123, 5, 36, 19, 5, 120, 123, 5, 42, 22, 2, 121, 123, 5, 40, 21, 2, 122, 113, 3, 2, 2, 2, 122, 118, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 121, 3, 2, 2, 2, 123, 143, 3, 2, 2, 2, 124, 125, 12, 10, 2, 2, 125, 126, 7, 17, 2, 2, 126, 142, 5, 36, 19, 11, 127, 128, 12, 9, 2, 2, 128, 129, 7, 18, 2, 2, 129, 142, 5, 36, 19, 10, 130, 131, 12, 8, 2, 2, 131, 132, 7, 19, 2, 2, 132, 142, 5, 36, 19, 9, 133, 134, 12, 7, 2, 2, 134, 135, 7, 20, 2, 2, 135, 142, 5, 36, 19, 8, 136, 137, 12, 6, 2, 2, 137, 138, 7, 21, 2, 2, 138, 142, 5, 36, 19, 7, 139, 140, 12, 11, 2, 2, 140, 142, 7, 16, 2, 2, 141, 124, 3, 2, 2, 2, 141, 127, 3, 2, 2, 2, 141, 130, 3, 2, 2, 2, 141, 133, 3, 2, 2, 2, 141, 136, 3, 2, 2, 2, 141, 139, 3, 2, 2, 2, 142, 145, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 37, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 146, 147, 8, 20, 1, 2, 147, 148, 7, 13, 2, 2, 148, 156, 5, 38, 20, 6, 149, 150, 5, 36, 19, 2, 150, 151, 7, 23, 2, 2, 151, 152, 5, 36, 19, 2, 152, 156, 3, 2, 2, 2, 153, 156, 5, 44, 23, 2, 154, 156, 5, 40, 21, 2, 155, 146, 3, 2, 2, 2, 155, 149, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 155, 154, 3, 2, 2, 2, 156, 165, 3, 2, 2, 2, 157, 158, 12, 8, 2, 2, 158, 159, 7, 11, 2, 2, 159, 164, 5, 38, 20, 9, 160, 161, 12, 7, 2, 2, 161, 162, 7, 12, 2, 2, 162, 164, 5, 38, 20, 8, 163, 157, 3, 2, 2, 2, 163, 160, 3, 2, 2, 2, 164, 167, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 39, 3, 2, 2, 2, 167, 165, 3, 2, 2, 2, 168, 169, 7, 15, 2, 2, 169, 41, 3, 2, 2, 2, 170, 172, 7, 21, 2, 2, 171, 170, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 7, 14, 2, 2, 174, 43, 3, 2, 2, 2, 175, 178, 7, 9, 2, 2, 176, 178, 7, 10, 2, 2, 177, 175, 3, 2, 2, 2, 177, 176, 3, 2, 2, 2, 178, 45, 3, 2, 2, 2, 16, 61, 68, 74, 92, 100, 111, 122, 141, 143, 155, 163, 165, 171, 177] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
FUNC_KW=1 | ||
FUNC_RET=2 | ||
PRINT_KW=3 | ||
IF_KW=4 | ||
ELIF_KW=5 | ||
ELSE_KW=6 | ||
TRUE_KW=7 | ||
FALSE_KW=8 | ||
AND_KW=9 | ||
OR_KW=10 | ||
NOT_KW=11 | ||
NUMBERS=12 | ||
IDENTIFIER=13 | ||
SYMB_EXCLM=14 | ||
SYMB_HAT=15 | ||
SYMB_STAR=16 | ||
SYMB_SLASH=17 | ||
SYMB_PLUS=18 | ||
SYMB_MINUS=19 | ||
ASSIGN=20 | ||
EQUALS=21 | ||
PAR_OPEN=22 | ||
PAR_CLOSE=23 | ||
BRACK_OPEN=24 | ||
BRACK_CLOSE=25 | ||
WS=26 | ||
'func'=1 | ||
'return'=2 | ||
'print'=3 | ||
'if'=4 | ||
'elif'=5 | ||
'else'=6 | ||
'true'=7 | ||
'false'=8 | ||
'and'=9 | ||
'or'=10 | ||
'not'=11 | ||
'!'=14 | ||
'^'=15 | ||
'*'=16 | ||
'/'=17 | ||
'+'=18 | ||
'-'=19 | ||
'='=20 | ||
'=='=21 | ||
'('=22 | ||
')'=23 | ||
'{'=24 | ||
'}'=25 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
token literal names: | ||
null | ||
'func' | ||
'return' | ||
'print' | ||
'if' | ||
'elif' | ||
'else' | ||
'true' | ||
'false' | ||
'and' | ||
'or' | ||
'not' | ||
null | ||
null | ||
'!' | ||
'^' | ||
'*' | ||
'/' | ||
'+' | ||
'-' | ||
'=' | ||
'==' | ||
'(' | ||
')' | ||
'{' | ||
'}' | ||
null | ||
|
||
token symbolic names: | ||
null | ||
FUNC_KW | ||
FUNC_RET | ||
PRINT_KW | ||
IF_KW | ||
ELIF_KW | ||
ELSE_KW | ||
TRUE_KW | ||
FALSE_KW | ||
AND_KW | ||
OR_KW | ||
NOT_KW | ||
NUMBERS | ||
IDENTIFIER | ||
SYMB_EXCLM | ||
SYMB_HAT | ||
SYMB_STAR | ||
SYMB_SLASH | ||
SYMB_PLUS | ||
SYMB_MINUS | ||
ASSIGN | ||
EQUALS | ||
PAR_OPEN | ||
PAR_CLOSE | ||
BRACK_OPEN | ||
BRACK_CLOSE | ||
WS | ||
|
||
rule names: | ||
FUNC_KW | ||
FUNC_RET | ||
PRINT_KW | ||
IF_KW | ||
ELIF_KW | ||
ELSE_KW | ||
TRUE_KW | ||
FALSE_KW | ||
AND_KW | ||
OR_KW | ||
NOT_KW | ||
NUMBERS | ||
IDENTIFIER | ||
SYMB_EXCLM | ||
SYMB_HAT | ||
SYMB_STAR | ||
SYMB_SLASH | ||
SYMB_PLUS | ||
SYMB_MINUS | ||
ASSIGN | ||
EQUALS | ||
PAR_OPEN | ||
PAR_CLOSE | ||
BRACK_OPEN | ||
BRACK_CLOSE | ||
WS | ||
DIGIT | ||
BIT | ||
|
||
channel names: | ||
DEFAULT_TOKEN_CHANNEL | ||
HIDDEN | ||
|
||
mode names: | ||
DEFAULT_MODE | ||
|
||
atn: | ||
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 28, 160, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 6, 13, 114, 10, 13, 13, 13, 14, 13, 115, 3, 14, 3, 14, 7, 14, 120, 10, 14, 12, 14, 14, 14, 123, 11, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 6, 27, 151, 10, 27, 13, 27, 14, 27, 152, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 2, 2, 30, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 2, 57, 2, 3, 2, 5, 4, 2, 67, 92, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 160, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 3, 59, 3, 2, 2, 2, 5, 64, 3, 2, 2, 2, 7, 71, 3, 2, 2, 2, 9, 77, 3, 2, 2, 2, 11, 80, 3, 2, 2, 2, 13, 85, 3, 2, 2, 2, 15, 90, 3, 2, 2, 2, 17, 95, 3, 2, 2, 2, 19, 101, 3, 2, 2, 2, 21, 105, 3, 2, 2, 2, 23, 108, 3, 2, 2, 2, 25, 113, 3, 2, 2, 2, 27, 117, 3, 2, 2, 2, 29, 124, 3, 2, 2, 2, 31, 126, 3, 2, 2, 2, 33, 128, 3, 2, 2, 2, 35, 130, 3, 2, 2, 2, 37, 132, 3, 2, 2, 2, 39, 134, 3, 2, 2, 2, 41, 136, 3, 2, 2, 2, 43, 138, 3, 2, 2, 2, 45, 141, 3, 2, 2, 2, 47, 143, 3, 2, 2, 2, 49, 145, 3, 2, 2, 2, 51, 147, 3, 2, 2, 2, 53, 150, 3, 2, 2, 2, 55, 156, 3, 2, 2, 2, 57, 158, 3, 2, 2, 2, 59, 60, 7, 104, 2, 2, 60, 61, 7, 119, 2, 2, 61, 62, 7, 112, 2, 2, 62, 63, 7, 101, 2, 2, 63, 4, 3, 2, 2, 2, 64, 65, 7, 116, 2, 2, 65, 66, 7, 103, 2, 2, 66, 67, 7, 118, 2, 2, 67, 68, 7, 119, 2, 2, 68, 69, 7, 116, 2, 2, 69, 70, 7, 112, 2, 2, 70, 6, 3, 2, 2, 2, 71, 72, 7, 114, 2, 2, 72, 73, 7, 116, 2, 2, 73, 74, 7, 107, 2, 2, 74, 75, 7, 112, 2, 2, 75, 76, 7, 118, 2, 2, 76, 8, 3, 2, 2, 2, 77, 78, 7, 107, 2, 2, 78, 79, 7, 104, 2, 2, 79, 10, 3, 2, 2, 2, 80, 81, 7, 103, 2, 2, 81, 82, 7, 110, 2, 2, 82, 83, 7, 107, 2, 2, 83, 84, 7, 104, 2, 2, 84, 12, 3, 2, 2, 2, 85, 86, 7, 103, 2, 2, 86, 87, 7, 110, 2, 2, 87, 88, 7, 117, 2, 2, 88, 89, 7, 103, 2, 2, 89, 14, 3, 2, 2, 2, 90, 91, 7, 118, 2, 2, 91, 92, 7, 116, 2, 2, 92, 93, 7, 119, 2, 2, 93, 94, 7, 103, 2, 2, 94, 16, 3, 2, 2, 2, 95, 96, 7, 104, 2, 2, 96, 97, 7, 99, 2, 2, 97, 98, 7, 110, 2, 2, 98, 99, 7, 117, 2, 2, 99, 100, 7, 103, 2, 2, 100, 18, 3, 2, 2, 2, 101, 102, 7, 99, 2, 2, 102, 103, 7, 112, 2, 2, 103, 104, 7, 102, 2, 2, 104, 20, 3, 2, 2, 2, 105, 106, 7, 113, 2, 2, 106, 107, 7, 116, 2, 2, 107, 22, 3, 2, 2, 2, 108, 109, 7, 112, 2, 2, 109, 110, 7, 113, 2, 2, 110, 111, 7, 118, 2, 2, 111, 24, 3, 2, 2, 2, 112, 114, 5, 55, 28, 2, 113, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 26, 3, 2, 2, 2, 117, 121, 9, 2, 2, 2, 118, 120, 9, 3, 2, 2, 119, 118, 3, 2, 2, 2, 120, 123, 3, 2, 2, 2, 121, 119, 3, 2, 2, 2, 121, 122, 3, 2, 2, 2, 122, 28, 3, 2, 2, 2, 123, 121, 3, 2, 2, 2, 124, 125, 7, 35, 2, 2, 125, 30, 3, 2, 2, 2, 126, 127, 7, 96, 2, 2, 127, 32, 3, 2, 2, 2, 128, 129, 7, 44, 2, 2, 129, 34, 3, 2, 2, 2, 130, 131, 7, 49, 2, 2, 131, 36, 3, 2, 2, 2, 132, 133, 7, 45, 2, 2, 133, 38, 3, 2, 2, 2, 134, 135, 7, 47, 2, 2, 135, 40, 3, 2, 2, 2, 136, 137, 7, 63, 2, 2, 137, 42, 3, 2, 2, 2, 138, 139, 7, 63, 2, 2, 139, 140, 7, 63, 2, 2, 140, 44, 3, 2, 2, 2, 141, 142, 7, 42, 2, 2, 142, 46, 3, 2, 2, 2, 143, 144, 7, 43, 2, 2, 144, 48, 3, 2, 2, 2, 145, 146, 7, 125, 2, 2, 146, 50, 3, 2, 2, 2, 147, 148, 7, 127, 2, 2, 148, 52, 3, 2, 2, 2, 149, 151, 9, 4, 2, 2, 150, 149, 3, 2, 2, 2, 151, 152, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 155, 8, 27, 2, 2, 155, 54, 3, 2, 2, 2, 156, 157, 4, 50, 59, 2, 157, 56, 3, 2, 2, 2, 158, 159, 4, 50, 51, 2, 159, 58, 3, 2, 2, 2, 6, 2, 115, 121, 152, 3, 8, 2, 2] |
Oops, something went wrong.