diff --git a/src/main/java/org/programsnail/truffle_lama/nodes/controlflow/LamaIfNode.java b/src/main/java/org/programsnail/truffle_lama/nodes/controlflow/LamaIfNode.java
index 0d620b9..c1693df 100644
--- a/src/main/java/org/programsnail/truffle_lama/nodes/controlflow/LamaIfNode.java
+++ b/src/main/java/org/programsnail/truffle_lama/nodes/controlflow/LamaIfNode.java
@@ -4,6 +4,9 @@ import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.UnexpectedResultException;
import com.oracle.truffle.api.profiles.ConditionProfile;
import org.programsnail.truffle_lama.nodes.LamaExpressionNode;
+import org.programsnail.truffle_lama.runtime.LamaUnit;
+
+import java.util.Objects;
public final class LamaIfNode extends LamaExpressionNode {
@Child
@@ -19,9 +22,10 @@ public final class LamaIfNode extends LamaExpressionNode {
@Override
public Object executeGeneric(VirtualFrame frame) throws UnexpectedResultException {
- if (this.condition.profile(this.conditionExpr.executeBoolean(frame))) {
- return this.thenExpr.executeGeneric(frame);
- }
- return this.elseExpr; // TODO: cases with no else
+ if (this.condition.profile(this.conditionExpr.executeBoolean(frame))) {
+ return this.thenExpr.executeGeneric(frame);
+ }
+ // TODO: or throw ??
+ return Objects.requireNonNullElse(this.elseExpr, LamaUnit.INSTANCE);
}
}
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/Lama.g4 b/src/main/java/org/programsnail/truffle_lama/parser/Lama.g4
index 2eb1d1b..a531362 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/Lama.g4
+++ b/src/main/java/org/programsnail/truffle_lama/parser/Lama.g4
@@ -49,6 +49,7 @@ grammar Lama;
{
// DO NOT MODIFY - generated from Lama.g4
+import java.util.Optional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -110,27 +111,66 @@ public static LamaExpressionNode parseLama(LamaLanguage language, Source source)
// parser
-lama : /* (import_expression)* */ scope_expression EOF;
+lama returns [LamaExpressionNode result]:
+ /* (import_expression)* */
+ scope_expression { $result = $scope_expression.result; }
+ EOF;
//import_expression : 'import' UIDENT ';';
-scope_expression :
- definition+ (expression)?
- | expression;
+scope_expression returns [LamaExpressionNode result]:
+ definition { $result = $expression.result; }
+ (
+ definition { $result = factory.createSeqNode($result, $expression.result); }
+ )* (
+ expression { $result = factory.createSeqNode($result, $expression.result); }
+ )?
+ | expression { $result = $expression.result; }
+;
definition returns [LamaExpressionNode result]:
- variable_definition
- | function_definition
+ variable_definition { $result = $variable_definition.result; }
+ | function_definition { $result = $function_definition.result; }
+;
// | infix_definition;
//
-variable_definition: ('var' | 'public') variable_definition_sequence;
-variable_definition_sequence : variable_definition_item (',' variable_definition_item)* ';';
-variable_definition_item : LIDENT ('=' basic_expression)?;
-function_definition returns [LamaExpressionNode result]: ('public')? 'fun' LIDENT '(' (function_arguments)? ')' function_body;
-function_arguments : LIDENT (',' LIDENT)*;
-function_body returns [LamaExpressionNode result]: '{' scope_expression '}';
+variable_definition returns [LamaExpressionNode result]
+ : { boolean is_public = false; }
+ ('var' |
+ 'public' { is_public = true; }
+ )
+ variable_definition_sequence[is_public] { $result = $variable_definition_sequence.result; }
+;
+variable_definition_sequence[boolean is_public] returns [LamaExpressionNode result]:
+ variable_definition_item { $result = factory.addVarNode($variable_definition_item.name, $variable_definition_item.expr); }
+ (','
+ variable_definition_item { $result = factory.addSeqNode($result, factory.addVarNode($variable_definition_item.name, $variable_definition_item.expr)); }
+ )* ';';
+variable_definition_item returns [TruffleString name, Optional expr]
+ : { $expr = Optional.empty(); }
+ LIDENT { $name = $LIDENT; }
+ ('='
+ basic_expression { $expr = Optional.of($basic_expression.result); }
+ )?;
+function_definition returns [LamaExpressionNode result] // TODO: scopes
+ : { boolean is_public = false; }
+ (
+ 'public' { is_public = true; }
+ )? 'fun' LIDENT '(' (function_arguments)? ')' function_body
+ { $result = factory.addFunctionDefinition($LIDENT, $function_arguments.args, $function_body.result); }
+;
+function_arguments returns [List args]
+ : { $args = new ArrayList(); }
+ LIDENT { $args.addLast($LIDENT); }
+ (','
+ LIDENT { $args.addLast($LIDENT); }
+ )*;
+function_body returns [LamaExpressionNode result]:
+ '{'
+ scope_expression { $result = $scope_expression.result; }
+ '}';
//
@@ -141,93 +181,217 @@ function_body returns [LamaExpressionNode result]: '{' scope_expression '}';
//
-expression returns [LamaExpressionNode result]: basic_expression (';' expression)?;
-basic_expression returns [LamaExpressionNode result]: binary_expression;
-binary_expression returns [LamaExpressionNode result]: postfix_expression (any_infix postfix_expression)*;
-postfix_expression returns [LamaExpressionNode result]: ('-')? primary (postfix)*;
-postfix :
- '(' expression (',' expression)* ')'
+expression returns [LamaExpressionNode result]:
+ basic_expression { $result = $basic_expression.result; }
+ (';'
+ expression { $result = factory.createSeqNode($result, $expression.result); }
+ )?; // TODO: additional things, exit scope ??
+basic_expression returns [LamaExpressionNode result]: binary_expression { $result = $binary_expression.result; };
+binary_expression returns [LamaExpressionNode result]:
+ postfix_expression { $result = $postfix_expression.result; }
+ (
+ any_infix
+ postfix_expression { $result = factory.createBinopNode($any_infix.result, $result, $postfix_expression.result); }
+ )*;
+postfix_expression returns [LamaExpressionNode result]
+ : { boolean with_minus = false; }
+ (
+ MINUS { with_minus = true; }
+ )?
+ primary { $result = $primary.result; }
+ (
+ postfix {
+ if ($postfix.access_index.isPresent()) {
+ $result = factory.createElemNode($result, ($postfix.access_index.get())); // TODO: or RefElem node
+ } else {
+ $result = factory.createCallNode($result, $postfix.args);
+ }
+ }
+ )*; // TODO: elem or elem ref for access node ??
+postfix returns [List args, Optional access_index]
+ : { $args = new ArrayList(); $access_index = Option.empty(); }
+ '('
+ expression { $args.addLast($expression.result); }
+ (','
+ expression { $args.addLast($expression.result); }
+ )*
+ ')'
| '(' ')'
- | '[' expression ']';
+ | '['
+ expression { $access_index = Option.of($expression.result); }
+ ']'
+;
primary returns [LamaExpressionNode result]:
- DECIMAL_LITERAL
- | STRING_LITERAL
- | CHAR_LITERAL
- | LIDENT
- | 'true'
- | 'false'
- | 'infix' any_infix
+ DECIMAL_LITERAL { $result = factory.createConstNode($DECIMAL_LITERAL); } // minus - inside decimal literal definition
+ | STRING_LITERAL { $result = factory.createStringNode(LamaStrings.convertStringLiteral($STRING_LITERAL)); }
+ | CHAR_LITERAL { $result = factory.createConstNode(LamaStrings.convertCharLiteral($CHAR_LITERAL)); }
+ | LIDENT { $result = factory.createRefNode($LIDENT); }
+ | 'true' { $result = factory.createConstNode(1); }
+ | 'false' { $result = factory.createConstNode(0); }
+ | 'infix' any_infix { $result = factory.createRefNode($any_infix.result); }
| 'fun' '(' function_arguments ')' function_body
- | 'skip'
- | '(' scope_expression ')'
- | list_expression
- | array_expression
- | s_expression
- | if_expression
- | while_do_expression
- | do_while_expression
- | for_expression
- | case_expression
+ { $result = factory.addClosureDefinition($function_arguments.args, $function_body.result); } // TODO: scopes
+ | 'skip' { $result = factory.createSkipNode(); }
+ | '(' scope_expression ')' { $result = $scope_expression.result; } // add some scope for correct attribution ??
+ | list_expression { $result = $list_expression.result; }
+ | array_expression { $result = $array_expression.result; }
+ | s_expression { $result = $s_expression.result; }
+ | if_expression { $result = $if_expression.result; }
+ | while_do_expression { $result = $while_do_expression.result; }
+ | do_while_expression { $result = $do_while_expression.result; }
+ | for_expression { $result = $for_expression.result; }
+ | case_expression { $result = $case_expression.result; }
;
//
-array_expression returns [LamaExpressionNode result]: '[' (expression (',' expression)* )? ']';
-list_expression returns [LamaExpressionNode result]: '{' (expression (',' expression)* )? '}';
-s_expression returns [LamaExpressionNode result]: /*TODO */ UIDENT ('(' (expression (',' expression)* )? ')')?;
+array_expression returns [LamaExpressionNode result]
+ : { List elems = new ArrayList(); }
+ '[' (
+ expression { elems.addLast($expression.result); }
+ (','
+ expression { elems.addLast($expression.result); }
+ )*
+ )? ']'
+ { $result = factory.createArrayNode(elems); }
+;
+list_expression returns [LamaExpressionNode result]
+ : { List elems = new ArrayList(); }
+ '{' (
+ expression { elems.addLast($expression.result); }
+ (','
+ expression {elems.addLast($expression.result); }
+ )*
+ )? '}'
+ { $result = factory.createListSexpNode(elems); }
+;
+s_expression returns [LamaExpressionNode result]
+ : { List elems = new ArrayList(); }
+ UIDENT
+ ('(' (
+ expression {elems.addLast($expression.result); }
+ (','
+ expression {elems.addLast($expression.result); }
+ )*
+ )? ')')?
+ { $result = factory.createSexpNode($UIDENT, elems); }
+;
//
-if_expression returns [LamaExpressionNode result]: 'if' expression 'then' scope_expression (else_part)? 'fi';
-else_part :
- 'elif' expression 'then' scope_expression (else_part)?
- | 'else' scope_expression;
+if_expression returns [LamaExpressionNode result]
+ : { LamaExpressionNode do_else = null; }
+ 'if' expression 'then' scope_expression (
+ else_part { do_else = $else_part.result; }
+ )? 'fi'
+ { $result = factory.createIfNode($expression.result, $scope_expression.result, do_else); }
+;
+else_part returns [LamaExpressionNode result]:
+ 'elif' { LamaExpressionNode do_else = null; } expression 'then' scope_expression (
+ else_part { do_else = $else_part.result; }
+ )? { $result = factory.createIfNode($expression.result, $scope_expression.result, do_else); }
+ | 'else' scope_expression { $result = $scope_expression.result; };
//
-while_do_expression returns [LamaExpressionNode result]: 'while' expression 'do' scope_expression 'od';
-do_while_expression returns [LamaExpressionNode result]: 'do' scope_expression 'while' expression 'od';
-for_expression returns [LamaExpressionNode result]: 'for' scope_expression ',' expression ',' expression 'do' scope_expression 'od';
+while_do_expression returns [LamaExpressionNode result]: 'while' expression 'do' scope_expression 'od'
+ { $result = factory.createWhileNode($expression.result, $scope_expression.result); };
+do_while_expression returns [LamaExpressionNode result]: 'do' scope_expression 'while' expression 'od'
+ { $result = factory.createDoWhileNode($expression.result, $scope_expression.result); };
+for_expression returns [LamaExpressionNode result]:
+ 'for' init=scope_expression ',' cond=expression ',' inc=expression 'do' expr=scope_expression 'od'
+ // TODO: add scope, etc.
+ { $result = factory.createSeqNode($init.result, factory.createWhileNode($cond.result, factory.createSeqNode($expr.result, $inc.result))); }
+;
//
-pattern returns [LamaPattern result]: cons_pattern | simple_pattern;
-cons_pattern returns [LamaPattern result]: simple_pattern ':' pattern;
+pattern returns [LamaPattern result]:
+ cons_pattern { $result = $cons_pattern.result; }
+ | simple_pattern { $result = $simple_pattern.result; }
+;
+cons_pattern returns [LamaPattern result]: simple_pattern ':' pattern { $result = factory.createSexpPattern("cons", {$simple_pattern.result, $pattern.result}); };
simple_pattern returns [LamaPattern result]:
- wildcard_pattern
- | s_expr_pattern
- | array_pattern
- | list_pattern
- | LIDENT ('@' pattern)?
- | (MINUS)? DECIMAL_LITERAL
- | STRING_LITERAL
- | CHAR_LITERAL
- | 'true'
- | 'false'
- | '#' 'box'
- | '#' 'val'
- | '#' 'str'
- | '#' 'array'
- | '#''sexp'
- | '#' 'fun'
- | '(' pattern ')'
+ wildcard_pattern { $result = $wildcard_pattern.result; }
+ | s_expr_pattern { $result = $s_expr_pattern.result; }
+ | array_pattern { $result = $array_pattern.result; }
+ | list_pattern { $result = $list_pattern.result; }
+ | LIDENT
+ { LamaPattern pat = null; }
+ ('@'
+ pattern { pat = $pattern.result; }
+ )?
+ { $result = factory.createNamedPattern($LIDENT, Objects.requireNonNullElse(pat, factory.createWildcardPattern()); }
+ | { boolean is_negative = false; }
+ (
+ MINUS { is_negative = true; }
+ )?
+ DECIMAL_LITERAL { $result = is_negative ? factory.createNegativeConstPattern($DECIMAL_LITERAL) : factory.createConstPattern($DECIMAL_LITERAL); }
+ | STRING_LITERAL { $result = factory.createStringPattern(LamaStrings.convertStringLiteral($STRING_LITERAL)); }
+ | CHAR_LITERAL { $result = factory.createConstPattern(LamaStrings.convertCharLiteral($CHAR_LITERAL)); }
+ | 'true' { $result = factory.createConstPattern(1); }
+ | 'false' { $result = factory.createConstPattern(0); }
+ | '#' 'box' { $result = factory.createBoxedPattern(); }
+ | '#' 'val' { $result = factory.createUnBoxedPattern(); }
+ | '#' 'str' { $result = factory.createStringTagPattern(); }
+ | '#' 'array' { $result = factory.createArrayTagPattern(); }
+ | '#''sexp' { $result = factory.createSexpTagPattern(); }
+ | '#' 'fun' { $result = factory.createClosureTagPattern(); }
+ | '(' pattern ')' { $result = $pattern.result; } // add some scope for correct attribution ??
;
-wildcard_pattern returns [LamaPattern result]: '_';
-s_expr_pattern returns [LamaPattern result]: UIDENT ('(' (pattern (',' pattern)*)? ')')?;
-array_pattern returns [LamaPattern result]: '[' (pattern (',' pattern)*)? ']';
-list_pattern returns [LamaPattern result]: '{' (pattern (',' pattern)*)? '}';
+wildcard_pattern returns [LamaPattern result]: '_' { $result = factory.createWildcardPattern(); };
+s_expr_pattern returns [LamaPattern result]
+ : { List elems = new ArrayList(); }
+ UIDENT
+ ('(' (
+ pattern { elems.addLast($pattern.result); }
+ (','
+ pattern { elems.addLast($pattern.result); }
+ )*)?
+ ')')?
+ { $result = factory.createSexpPattern($UIDENT, elems); }
+;
+array_pattern returns [LamaPattern result]
+ : { List elems = new ArrayList(); }
+ '[' (
+ pattern { elems.addLast($pattern.result); }
+ (','
+ pattern { elems.addLast($pattern.result); }
+ )*)?
+ ']'
+ { $result = factory.createArrayPattern(elems); }
+;
+list_pattern returns [LamaPattern result]:
+ '{' (
+ pattern { $result = $pattern.result; }
+ (','
+ pattern { $result = factory.createSexpPattern("cons", {$result, $pattern.result}); } //FIXME: wrong order
+ )*)?
+ '}';
//
-case_expression returns [LamaExpressionNode result]: 'case' expression 'of' case_branches 'esac';
-case_branches : case_branch ('|' case_branch)*;
-case_branch : pattern '->' scope_expression;
+case_expression returns [LamaExpressionNode result]:
+ 'case' expression 'of' case_branches 'esac' { $result = factory.createCaseNode($expression.result, $case_branches.pats, $case_branches.exprs); }
+;
+case_branches returns [List pats, List exprs]
+ : { $pats = new ArrayList(); $exprs = new ArrayList exprs; }
+ case_branch { $pats.addLast($case_branch.pat); $exprs.addLast($case_branch.expr); }
+ ('|'
+ case_branch { $pats.addLast($case_branch.pat); $exprs.addLast($case_branch.expr); }
+ )*;
+case_branch returns [LamaPattern pat, LamaExpressionNode expr]:
+ pattern { $pat = $pattern.result; }
+ '->'
+ scope_expression { $expr = $scope_expression.result; }
+;
-//
-
-any_infix : INFIX | MINUS;
+any_infix returns [String result]:
+ INFIX { $result = $INFIX; }
+ | MINUS { $result = $MINUS; }
+;
// lexer
@@ -239,13 +403,13 @@ fragment NON_ZERO_DIGIT : [1-9];
fragment DIGIT : [0-9];
fragment STRING_CHAR : ~('"' | '\r' | '\n');
-MINUS: '-';
+MINUS : '-';
INFIX : [+*/%$#@!|&^?<>.:=\-]+;
UIDENT : [A-Z][a-zA-Z_0-9]*;
LIDENT : [a-z][a-zA-Z_0-9]*;
CHAR_LITERAL : '\'' STRING_CHAR '\'';
STRING_LITERAL : '"' STRING_CHAR* '"';
-DECIMAL_LITERAL : '0' | ('-'?) NON_ZERO_DIGIT DIGIT*;
+DECIMAL_LITERAL : '0' | /*('-'?)*/ NON_ZERO_DIGIT DIGIT*;
WORD : [a-zA-Z_0-9]+;
\ No newline at end of file
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/Lama.interp b/src/main/java/org/programsnail/truffle_lama/parser/Lama.interp
index b8dd464..6294a85 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/Lama.interp
+++ b/src/main/java/org/programsnail/truffle_lama/parser/Lama.interp
@@ -1,27 +1,20 @@
token literal names:
null
-'import'
-';'
'var'
'public'
','
+';'
'='
'fun'
'('
')'
'{'
'}'
-'infix'
-'infixl'
-'infixr'
-'at'
-'before'
-'after'
-'-'
'['
']'
'true'
'false'
+'infix'
'skip'
'if'
'then'
@@ -32,7 +25,6 @@ null
'do'
'od'
'for'
-'|'
':'
'@'
'#'
@@ -45,10 +37,12 @@ null
'case'
'of'
'esac'
+'|'
'->'
null
null
null
+'-'
null
null
null
@@ -98,27 +92,20 @@ null
null
null
null
-null
-null
-null
-null
-null
-null
-null
WS
COMMENT
LINE_COMMENT
-WORD
+MINUS
INFIX
UIDENT
LIDENT
CHAR_LITERAL
STRING_LITERAL
DECIMAL_LITERAL
+WORD
rule names:
lama
-import_expression
scope_expression
definition
variable_definition
@@ -127,10 +114,6 @@ variable_definition_item
function_definition
function_arguments
function_body
-infix_definition
-infix_head
-infixity
-level
expression
basic_expression
binary_expression
@@ -155,7 +138,8 @@ list_pattern
case_expression
case_branches
case_branch
+any_infix
atn:
-[4, 1, 56, 424, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 1, 0, 5, 0, 78, 8, 0, 10, 0, 12, 0, 81, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 2, 91, 8, 2, 11, 2, 12, 2, 92, 1, 2, 3, 2, 96, 8, 2, 1, 2, 3, 2, 99, 8, 2, 1, 3, 1, 3, 1, 3, 3, 3, 104, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 112, 8, 5, 10, 5, 12, 5, 115, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 3, 6, 122, 8, 6, 1, 7, 3, 7, 125, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 131, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 5, 8, 139, 8, 8, 10, 8, 12, 8, 142, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 3, 11, 155, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 169, 8, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 5, 16, 176, 8, 16, 10, 16, 12, 16, 179, 9, 16, 1, 17, 3, 17, 182, 8, 17, 1, 17, 1, 17, 5, 17, 186, 8, 17, 10, 17, 12, 17, 189, 9, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 195, 8, 18, 10, 18, 12, 18, 198, 9, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 206, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 235, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 241, 8, 20, 10, 20, 12, 20, 244, 9, 20, 3, 20, 246, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 254, 8, 21, 10, 21, 12, 21, 257, 9, 21, 3, 21, 259, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 268, 8, 22, 10, 22, 12, 22, 271, 9, 22, 3, 22, 273, 8, 22, 1, 22, 3, 22, 276, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 283, 8, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 292, 8, 24, 1, 24, 1, 24, 3, 24, 296, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 335, 8, 30, 1, 30, 3, 30, 338, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 361, 8, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 370, 8, 32, 10, 32, 12, 32, 373, 9, 32, 3, 32, 375, 8, 32, 1, 32, 3, 32, 378, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 384, 8, 33, 10, 33, 12, 33, 387, 9, 33, 3, 33, 389, 8, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 397, 8, 34, 10, 34, 12, 34, 400, 9, 34, 3, 34, 402, 8, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 5, 36, 415, 8, 36, 10, 36, 12, 36, 418, 9, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 0, 0, 38, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 0, 3, 1, 0, 3, 4, 1, 0, 12, 14, 1, 0, 15, 17, 456, 0, 79, 1, 0, 0, 0, 2, 85, 1, 0, 0, 0, 4, 98, 1, 0, 0, 0, 6, 103, 1, 0, 0, 0, 8, 105, 1, 0, 0, 0, 10, 108, 1, 0, 0, 0, 12, 118, 1, 0, 0, 0, 14, 124, 1, 0, 0, 0, 16, 135, 1, 0, 0, 0, 18, 143, 1, 0, 0, 0, 20, 147, 1, 0, 0, 0, 22, 154, 1, 0, 0, 0, 24, 160, 1, 0, 0, 0, 26, 162, 1, 0, 0, 0, 28, 165, 1, 0, 0, 0, 30, 170, 1, 0, 0, 0, 32, 172, 1, 0, 0, 0, 34, 181, 1, 0, 0, 0, 36, 205, 1, 0, 0, 0, 38, 234, 1, 0, 0, 0, 40, 236, 1, 0, 0, 0, 42, 249, 1, 0, 0, 0, 44, 262, 1, 0, 0, 0, 46, 277, 1, 0, 0, 0, 48, 295, 1, 0, 0, 0, 50, 297, 1, 0, 0, 0, 52, 303, 1, 0, 0, 0, 54, 309, 1, 0, 0, 0, 56, 319, 1, 0, 0, 0, 58, 323, 1, 0, 0, 0, 60, 360, 1, 0, 0, 0, 62, 362, 1, 0, 0, 0, 64, 364, 1, 0, 0, 0, 66, 379, 1, 0, 0, 0, 68, 392, 1, 0, 0, 0, 70, 405, 1, 0, 0, 0, 72, 411, 1, 0, 0, 0, 74, 419, 1, 0, 0, 0, 76, 78, 3, 2, 1, 0, 77, 76, 1, 0, 0, 0, 78, 81, 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 82, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 82, 83, 3, 4, 2, 0, 83, 84, 5, 0, 0, 1, 84, 1, 1, 0, 0, 0, 85, 86, 5, 1, 0, 0, 86, 87, 5, 52, 0, 0, 87, 88, 5, 2, 0, 0, 88, 3, 1, 0, 0, 0, 89, 91, 3, 6, 3, 0, 90, 89, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 90, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 95, 1, 0, 0, 0, 94, 96, 3, 28, 14, 0, 95, 94, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 99, 1, 0, 0, 0, 97, 99, 3, 28, 14, 0, 98, 90, 1, 0, 0, 0, 98, 97, 1, 0, 0, 0, 99, 5, 1, 0, 0, 0, 100, 104, 3, 8, 4, 0, 101, 104, 3, 14, 7, 0, 102, 104, 3, 20, 10, 0, 103, 100, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 103, 102, 1, 0, 0, 0, 104, 7, 1, 0, 0, 0, 105, 106, 7, 0, 0, 0, 106, 107, 3, 10, 5, 0, 107, 9, 1, 0, 0, 0, 108, 113, 3, 12, 6, 0, 109, 110, 5, 5, 0, 0, 110, 112, 3, 12, 6, 0, 111, 109, 1, 0, 0, 0, 112, 115, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 116, 1, 0, 0, 0, 115, 113, 1, 0, 0, 0, 116, 117, 5, 2, 0, 0, 117, 11, 1, 0, 0, 0, 118, 121, 5, 53, 0, 0, 119, 120, 5, 6, 0, 0, 120, 122, 3, 30, 15, 0, 121, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 13, 1, 0, 0, 0, 123, 125, 5, 4, 0, 0, 124, 123, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 126, 1, 0, 0, 0, 126, 127, 5, 7, 0, 0, 127, 128, 5, 53, 0, 0, 128, 130, 5, 8, 0, 0, 129, 131, 3, 16, 8, 0, 130, 129, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 5, 9, 0, 0, 133, 134, 3, 18, 9, 0, 134, 15, 1, 0, 0, 0, 135, 140, 5, 53, 0, 0, 136, 137, 5, 5, 0, 0, 137, 139, 5, 53, 0, 0, 138, 136, 1, 0, 0, 0, 139, 142, 1, 0, 0, 0, 140, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 17, 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 143, 144, 5, 10, 0, 0, 144, 145, 3, 4, 2, 0, 145, 146, 5, 11, 0, 0, 146, 19, 1, 0, 0, 0, 147, 148, 3, 22, 11, 0, 148, 149, 5, 8, 0, 0, 149, 150, 3, 16, 8, 0, 150, 151, 5, 9, 0, 0, 151, 152, 3, 18, 9, 0, 152, 21, 1, 0, 0, 0, 153, 155, 5, 4, 0, 0, 154, 153, 1, 0, 0, 0, 154, 155, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 157, 3, 24, 12, 0, 157, 158, 5, 51, 0, 0, 158, 159, 3, 26, 13, 0, 159, 23, 1, 0, 0, 0, 160, 161, 7, 1, 0, 0, 161, 25, 1, 0, 0, 0, 162, 163, 7, 2, 0, 0, 163, 164, 5, 51, 0, 0, 164, 27, 1, 0, 0, 0, 165, 168, 3, 30, 15, 0, 166, 167, 5, 2, 0, 0, 167, 169, 3, 28, 14, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 29, 1, 0, 0, 0, 170, 171, 3, 32, 16, 0, 171, 31, 1, 0, 0, 0, 172, 177, 3, 34, 17, 0, 173, 174, 5, 51, 0, 0, 174, 176, 3, 34, 17, 0, 175, 173, 1, 0, 0, 0, 176, 179, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 33, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 180, 182, 5, 18, 0, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 187, 3, 38, 19, 0, 184, 186, 3, 36, 18, 0, 185, 184, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 35, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 5, 8, 0, 0, 191, 196, 3, 28, 14, 0, 192, 193, 5, 5, 0, 0, 193, 195, 3, 28, 14, 0, 194, 192, 1, 0, 0, 0, 195, 198, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 199, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 200, 5, 9, 0, 0, 200, 206, 1, 0, 0, 0, 201, 202, 5, 19, 0, 0, 202, 203, 3, 28, 14, 0, 203, 204, 5, 20, 0, 0, 204, 206, 1, 0, 0, 0, 205, 190, 1, 0, 0, 0, 205, 201, 1, 0, 0, 0, 206, 37, 1, 0, 0, 0, 207, 235, 5, 56, 0, 0, 208, 235, 5, 55, 0, 0, 209, 235, 5, 54, 0, 0, 210, 235, 5, 53, 0, 0, 211, 235, 5, 21, 0, 0, 212, 235, 5, 22, 0, 0, 213, 214, 5, 12, 0, 0, 214, 235, 5, 51, 0, 0, 215, 216, 5, 7, 0, 0, 216, 217, 5, 8, 0, 0, 217, 218, 3, 16, 8, 0, 218, 219, 5, 9, 0, 0, 219, 220, 3, 18, 9, 0, 220, 235, 1, 0, 0, 0, 221, 235, 5, 23, 0, 0, 222, 223, 5, 8, 0, 0, 223, 224, 3, 4, 2, 0, 224, 225, 5, 9, 0, 0, 225, 235, 1, 0, 0, 0, 226, 235, 3, 42, 21, 0, 227, 235, 3, 40, 20, 0, 228, 235, 3, 44, 22, 0, 229, 235, 3, 46, 23, 0, 230, 235, 3, 50, 25, 0, 231, 235, 3, 52, 26, 0, 232, 235, 3, 54, 27, 0, 233, 235, 3, 70, 35, 0, 234, 207, 1, 0, 0, 0, 234, 208, 1, 0, 0, 0, 234, 209, 1, 0, 0, 0, 234, 210, 1, 0, 0, 0, 234, 211, 1, 0, 0, 0, 234, 212, 1, 0, 0, 0, 234, 213, 1, 0, 0, 0, 234, 215, 1, 0, 0, 0, 234, 221, 1, 0, 0, 0, 234, 222, 1, 0, 0, 0, 234, 226, 1, 0, 0, 0, 234, 227, 1, 0, 0, 0, 234, 228, 1, 0, 0, 0, 234, 229, 1, 0, 0, 0, 234, 230, 1, 0, 0, 0, 234, 231, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 234, 233, 1, 0, 0, 0, 235, 39, 1, 0, 0, 0, 236, 245, 5, 19, 0, 0, 237, 242, 3, 28, 14, 0, 238, 239, 5, 5, 0, 0, 239, 241, 3, 28, 14, 0, 240, 238, 1, 0, 0, 0, 241, 244, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 246, 1, 0, 0, 0, 244, 242, 1, 0, 0, 0, 245, 237, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 5, 20, 0, 0, 248, 41, 1, 0, 0, 0, 249, 258, 5, 10, 0, 0, 250, 255, 3, 28, 14, 0, 251, 252, 5, 5, 0, 0, 252, 254, 3, 28, 14, 0, 253, 251, 1, 0, 0, 0, 254, 257, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 259, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 258, 250, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 261, 5, 11, 0, 0, 261, 43, 1, 0, 0, 0, 262, 275, 5, 52, 0, 0, 263, 272, 5, 8, 0, 0, 264, 269, 3, 28, 14, 0, 265, 266, 5, 5, 0, 0, 266, 268, 3, 28, 14, 0, 267, 265, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 273, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 264, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 276, 5, 9, 0, 0, 275, 263, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 45, 1, 0, 0, 0, 277, 278, 5, 24, 0, 0, 278, 279, 3, 28, 14, 0, 279, 280, 5, 25, 0, 0, 280, 282, 3, 4, 2, 0, 281, 283, 3, 48, 24, 0, 282, 281, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 5, 26, 0, 0, 285, 47, 1, 0, 0, 0, 286, 287, 5, 27, 0, 0, 287, 288, 3, 28, 14, 0, 288, 289, 5, 25, 0, 0, 289, 291, 3, 4, 2, 0, 290, 292, 3, 48, 24, 0, 291, 290, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 296, 1, 0, 0, 0, 293, 294, 5, 28, 0, 0, 294, 296, 3, 4, 2, 0, 295, 286, 1, 0, 0, 0, 295, 293, 1, 0, 0, 0, 296, 49, 1, 0, 0, 0, 297, 298, 5, 29, 0, 0, 298, 299, 3, 28, 14, 0, 299, 300, 5, 30, 0, 0, 300, 301, 3, 4, 2, 0, 301, 302, 5, 31, 0, 0, 302, 51, 1, 0, 0, 0, 303, 304, 5, 30, 0, 0, 304, 305, 3, 4, 2, 0, 305, 306, 5, 29, 0, 0, 306, 307, 3, 28, 14, 0, 307, 308, 5, 31, 0, 0, 308, 53, 1, 0, 0, 0, 309, 310, 5, 32, 0, 0, 310, 311, 3, 4, 2, 0, 311, 312, 5, 5, 0, 0, 312, 313, 3, 28, 14, 0, 313, 314, 5, 5, 0, 0, 314, 315, 3, 28, 14, 0, 315, 316, 5, 30, 0, 0, 316, 317, 3, 4, 2, 0, 317, 318, 5, 31, 0, 0, 318, 55, 1, 0, 0, 0, 319, 320, 3, 58, 29, 0, 320, 321, 5, 33, 0, 0, 321, 322, 3, 60, 30, 0, 322, 57, 1, 0, 0, 0, 323, 324, 3, 60, 30, 0, 324, 325, 5, 34, 0, 0, 325, 326, 3, 56, 28, 0, 326, 59, 1, 0, 0, 0, 327, 361, 3, 62, 31, 0, 328, 361, 3, 64, 32, 0, 329, 361, 3, 66, 33, 0, 330, 361, 3, 68, 34, 0, 331, 334, 5, 53, 0, 0, 332, 333, 5, 35, 0, 0, 333, 335, 3, 56, 28, 0, 334, 332, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 361, 1, 0, 0, 0, 336, 338, 5, 18, 0, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 361, 5, 56, 0, 0, 340, 361, 5, 55, 0, 0, 341, 361, 5, 54, 0, 0, 342, 361, 5, 21, 0, 0, 343, 361, 5, 22, 0, 0, 344, 345, 5, 36, 0, 0, 345, 361, 5, 37, 0, 0, 346, 347, 5, 36, 0, 0, 347, 361, 5, 38, 0, 0, 348, 349, 5, 36, 0, 0, 349, 361, 5, 39, 0, 0, 350, 351, 5, 36, 0, 0, 351, 361, 5, 40, 0, 0, 352, 353, 5, 36, 0, 0, 353, 361, 5, 41, 0, 0, 354, 355, 5, 36, 0, 0, 355, 361, 5, 7, 0, 0, 356, 357, 5, 8, 0, 0, 357, 358, 3, 56, 28, 0, 358, 359, 5, 9, 0, 0, 359, 361, 1, 0, 0, 0, 360, 327, 1, 0, 0, 0, 360, 328, 1, 0, 0, 0, 360, 329, 1, 0, 0, 0, 360, 330, 1, 0, 0, 0, 360, 331, 1, 0, 0, 0, 360, 337, 1, 0, 0, 0, 360, 340, 1, 0, 0, 0, 360, 341, 1, 0, 0, 0, 360, 342, 1, 0, 0, 0, 360, 343, 1, 0, 0, 0, 360, 344, 1, 0, 0, 0, 360, 346, 1, 0, 0, 0, 360, 348, 1, 0, 0, 0, 360, 350, 1, 0, 0, 0, 360, 352, 1, 0, 0, 0, 360, 354, 1, 0, 0, 0, 360, 356, 1, 0, 0, 0, 361, 61, 1, 0, 0, 0, 362, 363, 5, 42, 0, 0, 363, 63, 1, 0, 0, 0, 364, 377, 5, 52, 0, 0, 365, 374, 5, 8, 0, 0, 366, 371, 3, 56, 28, 0, 367, 368, 5, 5, 0, 0, 368, 370, 3, 56, 28, 0, 369, 367, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 366, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 378, 5, 9, 0, 0, 377, 365, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 65, 1, 0, 0, 0, 379, 388, 5, 19, 0, 0, 380, 385, 3, 56, 28, 0, 381, 382, 5, 5, 0, 0, 382, 384, 3, 56, 28, 0, 383, 381, 1, 0, 0, 0, 384, 387, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 389, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 388, 380, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 391, 5, 20, 0, 0, 391, 67, 1, 0, 0, 0, 392, 401, 5, 10, 0, 0, 393, 398, 3, 56, 28, 0, 394, 395, 5, 5, 0, 0, 395, 397, 3, 56, 28, 0, 396, 394, 1, 0, 0, 0, 397, 400, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 402, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 393, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 404, 5, 11, 0, 0, 404, 69, 1, 0, 0, 0, 405, 406, 5, 43, 0, 0, 406, 407, 3, 28, 14, 0, 407, 408, 5, 44, 0, 0, 408, 409, 3, 72, 36, 0, 409, 410, 5, 45, 0, 0, 410, 71, 1, 0, 0, 0, 411, 416, 3, 74, 37, 0, 412, 413, 5, 33, 0, 0, 413, 415, 3, 74, 37, 0, 414, 412, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 73, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 420, 3, 56, 28, 0, 420, 421, 5, 46, 0, 0, 421, 422, 3, 4, 2, 0, 422, 75, 1, 0, 0, 0, 39, 79, 92, 95, 98, 103, 113, 121, 124, 130, 140, 154, 168, 177, 181, 187, 196, 205, 234, 242, 245, 255, 258, 269, 272, 275, 282, 291, 295, 334, 337, 360, 371, 374, 377, 385, 388, 398, 401, 416]
\ No newline at end of file
+[4, 1, 50, 556, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 78, 8, 1, 10, 1, 12, 1, 81, 9, 1, 1, 1, 1, 1, 1, 1, 3, 1, 86, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 91, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 99, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 105, 8, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 116, 8, 4, 10, 4, 12, 4, 119, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 130, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 135, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 141, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 153, 8, 7, 10, 7, 12, 7, 156, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 169, 8, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 180, 8, 11, 10, 11, 12, 11, 183, 9, 11, 1, 12, 1, 12, 1, 12, 3, 12, 188, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 195, 8, 12, 10, 12, 12, 12, 198, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 208, 8, 13, 10, 13, 12, 13, 211, 9, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 222, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 278, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 288, 8, 15, 10, 15, 12, 15, 291, 9, 15, 3, 15, 293, 8, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 306, 8, 16, 10, 16, 12, 16, 309, 9, 16, 3, 16, 311, 8, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 325, 8, 17, 10, 17, 12, 17, 328, 9, 17, 3, 17, 330, 8, 17, 1, 17, 3, 17, 333, 8, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 345, 8, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 358, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 399, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 424, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 430, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 465, 8, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 479, 8, 27, 10, 27, 12, 27, 482, 9, 27, 3, 27, 484, 8, 27, 1, 27, 3, 27, 487, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 5, 28, 499, 8, 28, 10, 28, 12, 28, 502, 9, 28, 3, 28, 504, 8, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 516, 8, 29, 10, 29, 12, 29, 519, 9, 29, 3, 29, 521, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 539, 8, 31, 10, 31, 12, 31, 542, 9, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 554, 8, 33, 1, 33, 0, 0, 34, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 0, 0, 593, 0, 68, 1, 0, 0, 0, 2, 90, 1, 0, 0, 0, 4, 98, 1, 0, 0, 0, 6, 100, 1, 0, 0, 0, 8, 109, 1, 0, 0, 0, 10, 122, 1, 0, 0, 0, 12, 131, 1, 0, 0, 0, 14, 146, 1, 0, 0, 0, 16, 157, 1, 0, 0, 0, 18, 162, 1, 0, 0, 0, 20, 170, 1, 0, 0, 0, 22, 173, 1, 0, 0, 0, 24, 184, 1, 0, 0, 0, 26, 221, 1, 0, 0, 0, 28, 277, 1, 0, 0, 0, 30, 279, 1, 0, 0, 0, 32, 297, 1, 0, 0, 0, 34, 315, 1, 0, 0, 0, 36, 336, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 367, 1, 0, 0, 0, 42, 374, 1, 0, 0, 0, 44, 381, 1, 0, 0, 0, 46, 398, 1, 0, 0, 0, 48, 400, 1, 0, 0, 0, 50, 464, 1, 0, 0, 0, 52, 466, 1, 0, 0, 0, 54, 469, 1, 0, 0, 0, 56, 490, 1, 0, 0, 0, 58, 508, 1, 0, 0, 0, 60, 524, 1, 0, 0, 0, 62, 531, 1, 0, 0, 0, 64, 543, 1, 0, 0, 0, 66, 553, 1, 0, 0, 0, 68, 69, 3, 2, 1, 0, 69, 70, 6, 0, -1, 0, 70, 71, 5, 0, 0, 1, 71, 1, 1, 0, 0, 0, 72, 73, 3, 4, 2, 0, 73, 79, 6, 1, -1, 0, 74, 75, 3, 4, 2, 0, 75, 76, 6, 1, -1, 0, 76, 78, 1, 0, 0, 0, 77, 74, 1, 0, 0, 0, 78, 81, 1, 0, 0, 0, 79, 77, 1, 0, 0, 0, 79, 80, 1, 0, 0, 0, 80, 85, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 82, 83, 3, 18, 9, 0, 83, 84, 6, 1, -1, 0, 84, 86, 1, 0, 0, 0, 85, 82, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 91, 1, 0, 0, 0, 87, 88, 3, 18, 9, 0, 88, 89, 6, 1, -1, 0, 89, 91, 1, 0, 0, 0, 90, 72, 1, 0, 0, 0, 90, 87, 1, 0, 0, 0, 91, 3, 1, 0, 0, 0, 92, 93, 3, 6, 3, 0, 93, 94, 6, 2, -1, 0, 94, 99, 1, 0, 0, 0, 95, 96, 3, 12, 6, 0, 96, 97, 6, 2, -1, 0, 97, 99, 1, 0, 0, 0, 98, 92, 1, 0, 0, 0, 98, 95, 1, 0, 0, 0, 99, 5, 1, 0, 0, 0, 100, 104, 6, 3, -1, 0, 101, 105, 5, 1, 0, 0, 102, 103, 5, 2, 0, 0, 103, 105, 6, 3, -1, 0, 104, 101, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 106, 1, 0, 0, 0, 106, 107, 3, 8, 4, 0, 107, 108, 6, 3, -1, 0, 108, 7, 1, 0, 0, 0, 109, 110, 3, 10, 5, 0, 110, 117, 6, 4, -1, 0, 111, 112, 5, 3, 0, 0, 112, 113, 3, 10, 5, 0, 113, 114, 6, 4, -1, 0, 114, 116, 1, 0, 0, 0, 115, 111, 1, 0, 0, 0, 116, 119, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 120, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 120, 121, 5, 4, 0, 0, 121, 9, 1, 0, 0, 0, 122, 123, 6, 5, -1, 0, 123, 124, 5, 46, 0, 0, 124, 129, 6, 5, -1, 0, 125, 126, 5, 5, 0, 0, 126, 127, 3, 20, 10, 0, 127, 128, 6, 5, -1, 0, 128, 130, 1, 0, 0, 0, 129, 125, 1, 0, 0, 0, 129, 130, 1, 0, 0, 0, 130, 11, 1, 0, 0, 0, 131, 134, 6, 6, -1, 0, 132, 133, 5, 2, 0, 0, 133, 135, 6, 6, -1, 0, 134, 132, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 5, 6, 0, 0, 137, 138, 5, 46, 0, 0, 138, 140, 5, 7, 0, 0, 139, 141, 3, 14, 7, 0, 140, 139, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 5, 8, 0, 0, 143, 144, 3, 16, 8, 0, 144, 145, 6, 6, -1, 0, 145, 13, 1, 0, 0, 0, 146, 147, 6, 7, -1, 0, 147, 148, 5, 46, 0, 0, 148, 154, 6, 7, -1, 0, 149, 150, 5, 3, 0, 0, 150, 151, 5, 46, 0, 0, 151, 153, 6, 7, -1, 0, 152, 149, 1, 0, 0, 0, 153, 156, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 154, 155, 1, 0, 0, 0, 155, 15, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 157, 158, 5, 9, 0, 0, 158, 159, 3, 2, 1, 0, 159, 160, 6, 8, -1, 0, 160, 161, 5, 10, 0, 0, 161, 17, 1, 0, 0, 0, 162, 163, 3, 20, 10, 0, 163, 168, 6, 9, -1, 0, 164, 165, 5, 4, 0, 0, 165, 166, 3, 18, 9, 0, 166, 167, 6, 9, -1, 0, 167, 169, 1, 0, 0, 0, 168, 164, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 19, 1, 0, 0, 0, 170, 171, 3, 22, 11, 0, 171, 172, 6, 10, -1, 0, 172, 21, 1, 0, 0, 0, 173, 174, 3, 24, 12, 0, 174, 181, 6, 11, -1, 0, 175, 176, 3, 66, 33, 0, 176, 177, 3, 24, 12, 0, 177, 178, 6, 11, -1, 0, 178, 180, 1, 0, 0, 0, 179, 175, 1, 0, 0, 0, 180, 183, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 23, 1, 0, 0, 0, 183, 181, 1, 0, 0, 0, 184, 187, 6, 12, -1, 0, 185, 186, 5, 43, 0, 0, 186, 188, 6, 12, -1, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 3, 28, 14, 0, 190, 196, 6, 12, -1, 0, 191, 192, 3, 26, 13, 0, 192, 193, 6, 12, -1, 0, 193, 195, 1, 0, 0, 0, 194, 191, 1, 0, 0, 0, 195, 198, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 25, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 200, 6, 13, -1, 0, 200, 201, 5, 7, 0, 0, 201, 202, 3, 18, 9, 0, 202, 209, 6, 13, -1, 0, 203, 204, 5, 3, 0, 0, 204, 205, 3, 18, 9, 0, 205, 206, 6, 13, -1, 0, 206, 208, 1, 0, 0, 0, 207, 203, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 8, 0, 0, 213, 222, 1, 0, 0, 0, 214, 215, 5, 7, 0, 0, 215, 222, 5, 8, 0, 0, 216, 217, 5, 11, 0, 0, 217, 218, 3, 18, 9, 0, 218, 219, 6, 13, -1, 0, 219, 220, 5, 12, 0, 0, 220, 222, 1, 0, 0, 0, 221, 199, 1, 0, 0, 0, 221, 214, 1, 0, 0, 0, 221, 216, 1, 0, 0, 0, 222, 27, 1, 0, 0, 0, 223, 224, 5, 49, 0, 0, 224, 278, 6, 14, -1, 0, 225, 226, 5, 48, 0, 0, 226, 278, 6, 14, -1, 0, 227, 228, 5, 47, 0, 0, 228, 278, 6, 14, -1, 0, 229, 230, 5, 46, 0, 0, 230, 278, 6, 14, -1, 0, 231, 232, 5, 13, 0, 0, 232, 278, 6, 14, -1, 0, 233, 234, 5, 14, 0, 0, 234, 278, 6, 14, -1, 0, 235, 236, 5, 15, 0, 0, 236, 237, 3, 66, 33, 0, 237, 238, 6, 14, -1, 0, 238, 278, 1, 0, 0, 0, 239, 240, 5, 6, 0, 0, 240, 241, 5, 7, 0, 0, 241, 242, 3, 14, 7, 0, 242, 243, 5, 8, 0, 0, 243, 244, 3, 16, 8, 0, 244, 245, 6, 14, -1, 0, 245, 278, 1, 0, 0, 0, 246, 247, 5, 16, 0, 0, 247, 278, 6, 14, -1, 0, 248, 249, 5, 7, 0, 0, 249, 250, 3, 2, 1, 0, 250, 251, 5, 8, 0, 0, 251, 252, 6, 14, -1, 0, 252, 278, 1, 0, 0, 0, 253, 254, 3, 32, 16, 0, 254, 255, 6, 14, -1, 0, 255, 278, 1, 0, 0, 0, 256, 257, 3, 30, 15, 0, 257, 258, 6, 14, -1, 0, 258, 278, 1, 0, 0, 0, 259, 260, 3, 34, 17, 0, 260, 261, 6, 14, -1, 0, 261, 278, 1, 0, 0, 0, 262, 263, 3, 36, 18, 0, 263, 264, 6, 14, -1, 0, 264, 278, 1, 0, 0, 0, 265, 266, 3, 40, 20, 0, 266, 267, 6, 14, -1, 0, 267, 278, 1, 0, 0, 0, 268, 269, 3, 42, 21, 0, 269, 270, 6, 14, -1, 0, 270, 278, 1, 0, 0, 0, 271, 272, 3, 44, 22, 0, 272, 273, 6, 14, -1, 0, 273, 278, 1, 0, 0, 0, 274, 275, 3, 60, 30, 0, 275, 276, 6, 14, -1, 0, 276, 278, 1, 0, 0, 0, 277, 223, 1, 0, 0, 0, 277, 225, 1, 0, 0, 0, 277, 227, 1, 0, 0, 0, 277, 229, 1, 0, 0, 0, 277, 231, 1, 0, 0, 0, 277, 233, 1, 0, 0, 0, 277, 235, 1, 0, 0, 0, 277, 239, 1, 0, 0, 0, 277, 246, 1, 0, 0, 0, 277, 248, 1, 0, 0, 0, 277, 253, 1, 0, 0, 0, 277, 256, 1, 0, 0, 0, 277, 259, 1, 0, 0, 0, 277, 262, 1, 0, 0, 0, 277, 265, 1, 0, 0, 0, 277, 268, 1, 0, 0, 0, 277, 271, 1, 0, 0, 0, 277, 274, 1, 0, 0, 0, 278, 29, 1, 0, 0, 0, 279, 280, 6, 15, -1, 0, 280, 292, 5, 11, 0, 0, 281, 282, 3, 18, 9, 0, 282, 289, 6, 15, -1, 0, 283, 284, 5, 3, 0, 0, 284, 285, 3, 18, 9, 0, 285, 286, 6, 15, -1, 0, 286, 288, 1, 0, 0, 0, 287, 283, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 293, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 281, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 5, 12, 0, 0, 295, 296, 6, 15, -1, 0, 296, 31, 1, 0, 0, 0, 297, 298, 6, 16, -1, 0, 298, 310, 5, 9, 0, 0, 299, 300, 3, 18, 9, 0, 300, 307, 6, 16, -1, 0, 301, 302, 5, 3, 0, 0, 302, 303, 3, 18, 9, 0, 303, 304, 6, 16, -1, 0, 304, 306, 1, 0, 0, 0, 305, 301, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 299, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 5, 10, 0, 0, 313, 314, 6, 16, -1, 0, 314, 33, 1, 0, 0, 0, 315, 316, 6, 17, -1, 0, 316, 332, 5, 45, 0, 0, 317, 329, 5, 7, 0, 0, 318, 319, 3, 18, 9, 0, 319, 326, 6, 17, -1, 0, 320, 321, 5, 3, 0, 0, 321, 322, 3, 18, 9, 0, 322, 323, 6, 17, -1, 0, 323, 325, 1, 0, 0, 0, 324, 320, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 330, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 318, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 5, 8, 0, 0, 332, 317, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 6, 17, -1, 0, 335, 35, 1, 0, 0, 0, 336, 337, 6, 18, -1, 0, 337, 338, 5, 17, 0, 0, 338, 339, 3, 18, 9, 0, 339, 340, 5, 18, 0, 0, 340, 344, 3, 2, 1, 0, 341, 342, 3, 38, 19, 0, 342, 343, 6, 18, -1, 0, 343, 345, 1, 0, 0, 0, 344, 341, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 347, 5, 19, 0, 0, 347, 348, 6, 18, -1, 0, 348, 37, 1, 0, 0, 0, 349, 350, 5, 20, 0, 0, 350, 351, 6, 19, -1, 0, 351, 352, 3, 18, 9, 0, 352, 353, 5, 18, 0, 0, 353, 357, 3, 2, 1, 0, 354, 355, 3, 38, 19, 0, 355, 356, 6, 19, -1, 0, 356, 358, 1, 0, 0, 0, 357, 354, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 6, 19, -1, 0, 360, 366, 1, 0, 0, 0, 361, 362, 5, 21, 0, 0, 362, 363, 3, 2, 1, 0, 363, 364, 6, 19, -1, 0, 364, 366, 1, 0, 0, 0, 365, 349, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 22, 0, 0, 368, 369, 3, 18, 9, 0, 369, 370, 5, 23, 0, 0, 370, 371, 3, 2, 1, 0, 371, 372, 5, 24, 0, 0, 372, 373, 6, 20, -1, 0, 373, 41, 1, 0, 0, 0, 374, 375, 5, 23, 0, 0, 375, 376, 3, 2, 1, 0, 376, 377, 5, 22, 0, 0, 377, 378, 3, 18, 9, 0, 378, 379, 5, 24, 0, 0, 379, 380, 6, 21, -1, 0, 380, 43, 1, 0, 0, 0, 381, 382, 5, 25, 0, 0, 382, 383, 3, 2, 1, 0, 383, 384, 5, 3, 0, 0, 384, 385, 3, 18, 9, 0, 385, 386, 5, 3, 0, 0, 386, 387, 3, 18, 9, 0, 387, 388, 5, 23, 0, 0, 388, 389, 3, 2, 1, 0, 389, 390, 5, 24, 0, 0, 390, 391, 6, 22, -1, 0, 391, 45, 1, 0, 0, 0, 392, 393, 3, 48, 24, 0, 393, 394, 6, 23, -1, 0, 394, 399, 1, 0, 0, 0, 395, 396, 3, 50, 25, 0, 396, 397, 6, 23, -1, 0, 397, 399, 1, 0, 0, 0, 398, 392, 1, 0, 0, 0, 398, 395, 1, 0, 0, 0, 399, 47, 1, 0, 0, 0, 400, 401, 3, 50, 25, 0, 401, 402, 5, 26, 0, 0, 402, 403, 3, 46, 23, 0, 403, 404, 6, 24, -1, 0, 404, 49, 1, 0, 0, 0, 405, 406, 3, 52, 26, 0, 406, 407, 6, 25, -1, 0, 407, 465, 1, 0, 0, 0, 408, 409, 3, 54, 27, 0, 409, 410, 6, 25, -1, 0, 410, 465, 1, 0, 0, 0, 411, 412, 3, 56, 28, 0, 412, 413, 6, 25, -1, 0, 413, 465, 1, 0, 0, 0, 414, 415, 3, 58, 29, 0, 415, 416, 6, 25, -1, 0, 416, 465, 1, 0, 0, 0, 417, 418, 5, 46, 0, 0, 418, 423, 6, 25, -1, 0, 419, 420, 5, 27, 0, 0, 420, 421, 3, 46, 23, 0, 421, 422, 6, 25, -1, 0, 422, 424, 1, 0, 0, 0, 423, 419, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 465, 6, 25, -1, 0, 426, 429, 6, 25, -1, 0, 427, 428, 5, 43, 0, 0, 428, 430, 6, 25, -1, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 5, 49, 0, 0, 432, 465, 6, 25, -1, 0, 433, 434, 5, 48, 0, 0, 434, 465, 6, 25, -1, 0, 435, 436, 5, 47, 0, 0, 436, 465, 6, 25, -1, 0, 437, 438, 5, 13, 0, 0, 438, 465, 6, 25, -1, 0, 439, 440, 5, 14, 0, 0, 440, 465, 6, 25, -1, 0, 441, 442, 5, 28, 0, 0, 442, 443, 5, 29, 0, 0, 443, 465, 6, 25, -1, 0, 444, 445, 5, 28, 0, 0, 445, 446, 5, 30, 0, 0, 446, 465, 6, 25, -1, 0, 447, 448, 5, 28, 0, 0, 448, 449, 5, 31, 0, 0, 449, 465, 6, 25, -1, 0, 450, 451, 5, 28, 0, 0, 451, 452, 5, 32, 0, 0, 452, 465, 6, 25, -1, 0, 453, 454, 5, 28, 0, 0, 454, 455, 5, 33, 0, 0, 455, 465, 6, 25, -1, 0, 456, 457, 5, 28, 0, 0, 457, 458, 5, 6, 0, 0, 458, 465, 6, 25, -1, 0, 459, 460, 5, 7, 0, 0, 460, 461, 3, 46, 23, 0, 461, 462, 5, 8, 0, 0, 462, 463, 6, 25, -1, 0, 463, 465, 1, 0, 0, 0, 464, 405, 1, 0, 0, 0, 464, 408, 1, 0, 0, 0, 464, 411, 1, 0, 0, 0, 464, 414, 1, 0, 0, 0, 464, 417, 1, 0, 0, 0, 464, 426, 1, 0, 0, 0, 464, 433, 1, 0, 0, 0, 464, 435, 1, 0, 0, 0, 464, 437, 1, 0, 0, 0, 464, 439, 1, 0, 0, 0, 464, 441, 1, 0, 0, 0, 464, 444, 1, 0, 0, 0, 464, 447, 1, 0, 0, 0, 464, 450, 1, 0, 0, 0, 464, 453, 1, 0, 0, 0, 464, 456, 1, 0, 0, 0, 464, 459, 1, 0, 0, 0, 465, 51, 1, 0, 0, 0, 466, 467, 5, 34, 0, 0, 467, 468, 6, 26, -1, 0, 468, 53, 1, 0, 0, 0, 469, 470, 6, 27, -1, 0, 470, 486, 5, 45, 0, 0, 471, 483, 5, 7, 0, 0, 472, 473, 3, 46, 23, 0, 473, 480, 6, 27, -1, 0, 474, 475, 5, 3, 0, 0, 475, 476, 3, 46, 23, 0, 476, 477, 6, 27, -1, 0, 477, 479, 1, 0, 0, 0, 478, 474, 1, 0, 0, 0, 479, 482, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 484, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 483, 472, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 487, 5, 8, 0, 0, 486, 471, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 6, 27, -1, 0, 489, 55, 1, 0, 0, 0, 490, 491, 6, 28, -1, 0, 491, 503, 5, 11, 0, 0, 492, 493, 3, 46, 23, 0, 493, 500, 6, 28, -1, 0, 494, 495, 5, 3, 0, 0, 495, 496, 3, 46, 23, 0, 496, 497, 6, 28, -1, 0, 497, 499, 1, 0, 0, 0, 498, 494, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 503, 492, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 5, 12, 0, 0, 506, 507, 6, 28, -1, 0, 507, 57, 1, 0, 0, 0, 508, 520, 5, 9, 0, 0, 509, 510, 3, 46, 23, 0, 510, 517, 6, 29, -1, 0, 511, 512, 5, 3, 0, 0, 512, 513, 3, 46, 23, 0, 513, 514, 6, 29, -1, 0, 514, 516, 1, 0, 0, 0, 515, 511, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 521, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 509, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 523, 5, 10, 0, 0, 523, 59, 1, 0, 0, 0, 524, 525, 5, 35, 0, 0, 525, 526, 3, 18, 9, 0, 526, 527, 5, 36, 0, 0, 527, 528, 3, 62, 31, 0, 528, 529, 5, 37, 0, 0, 529, 530, 6, 30, -1, 0, 530, 61, 1, 0, 0, 0, 531, 532, 6, 31, -1, 0, 532, 533, 3, 64, 32, 0, 533, 540, 6, 31, -1, 0, 534, 535, 5, 38, 0, 0, 535, 536, 3, 64, 32, 0, 536, 537, 6, 31, -1, 0, 537, 539, 1, 0, 0, 0, 538, 534, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 63, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 543, 544, 3, 46, 23, 0, 544, 545, 6, 32, -1, 0, 545, 546, 5, 39, 0, 0, 546, 547, 3, 2, 1, 0, 547, 548, 6, 32, -1, 0, 548, 65, 1, 0, 0, 0, 549, 550, 5, 44, 0, 0, 550, 554, 6, 33, -1, 0, 551, 552, 5, 43, 0, 0, 552, 554, 6, 33, -1, 0, 553, 549, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 554, 67, 1, 0, 0, 0, 40, 79, 85, 90, 98, 104, 117, 129, 134, 140, 154, 168, 181, 187, 196, 209, 221, 277, 289, 292, 307, 310, 326, 329, 332, 344, 357, 365, 398, 423, 429, 464, 480, 483, 486, 500, 503, 517, 520, 540, 553]
\ No newline at end of file
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/Lama.tokens b/src/main/java/org/programsnail/truffle_lama/parser/Lama.tokens
index ae67504..479a7ae 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/Lama.tokens
+++ b/src/main/java/org/programsnail/truffle_lama/parser/Lama.tokens
@@ -37,66 +37,54 @@ T__35=36
T__36=37
T__37=38
T__38=39
-T__39=40
-T__40=41
-T__41=42
-T__42=43
-T__43=44
-T__44=45
-T__45=46
-WS=47
-COMMENT=48
-LINE_COMMENT=49
+WS=40
+COMMENT=41
+LINE_COMMENT=42
+MINUS=43
+INFIX=44
+UIDENT=45
+LIDENT=46
+CHAR_LITERAL=47
+STRING_LITERAL=48
+DECIMAL_LITERAL=49
WORD=50
-INFIX=51
-UIDENT=52
-LIDENT=53
-CHAR_LITERAL=54
-STRING_LITERAL=55
-DECIMAL_LITERAL=56
-'import'=1
-';'=2
-'var'=3
-'public'=4
-','=5
-'='=6
-'fun'=7
-'('=8
-')'=9
-'{'=10
-'}'=11
-'infix'=12
-'infixl'=13
-'infixr'=14
-'at'=15
-'before'=16
-'after'=17
-'-'=18
-'['=19
-']'=20
-'true'=21
-'false'=22
-'skip'=23
-'if'=24
-'then'=25
-'fi'=26
-'elif'=27
-'else'=28
-'while'=29
-'do'=30
-'od'=31
-'for'=32
-'|'=33
-':'=34
-'@'=35
-'#'=36
-'box'=37
-'val'=38
-'str'=39
-'array'=40
-'sexp'=41
-'_'=42
-'case'=43
-'of'=44
-'esac'=45
-'->'=46
+'var'=1
+'public'=2
+','=3
+';'=4
+'='=5
+'fun'=6
+'('=7
+')'=8
+'{'=9
+'}'=10
+'['=11
+']'=12
+'true'=13
+'false'=14
+'infix'=15
+'skip'=16
+'if'=17
+'then'=18
+'fi'=19
+'elif'=20
+'else'=21
+'while'=22
+'do'=23
+'od'=24
+'for'=25
+':'=26
+'@'=27
+'#'=28
+'box'=29
+'val'=30
+'str'=31
+'array'=32
+'sexp'=33
+'_'=34
+'case'=35
+'of'=36
+'esac'=37
+'|'=38
+'->'=39
+'-'=43
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseListener.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseListener.java
index 98d45cd..4da5690 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseListener.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseListener.java
@@ -24,18 +24,6 @@ public class LamaBaseListener implements LamaListener {
* The default implementation does nothing.
*/
@Override public void exitLama(LamaParser.LamaContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterImport_expression(LamaParser.Import_expressionContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitImport_expression(LamaParser.Import_expressionContext ctx) { }
/**
* {@inheritDoc}
*
@@ -132,54 +120,6 @@ public class LamaBaseListener implements LamaListener {
* The default implementation does nothing.
*/
@Override public void exitFunction_body(LamaParser.Function_bodyContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterInfix_definition(LamaParser.Infix_definitionContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitInfix_definition(LamaParser.Infix_definitionContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterInfix_head(LamaParser.Infix_headContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitInfix_head(LamaParser.Infix_headContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterInfixity(LamaParser.InfixityContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitInfixity(LamaParser.InfixityContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterLevel(LamaParser.LevelContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitLevel(LamaParser.LevelContext ctx) { }
/**
* {@inheritDoc}
*
@@ -468,6 +408,18 @@ public class LamaBaseListener implements LamaListener {
* The default implementation does nothing.
*/
@Override public void exitCase_branch(LamaParser.Case_branchContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterAny_infix(LamaParser.Any_infixContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitAny_infix(LamaParser.Any_infixContext ctx) { }
/**
* {@inheritDoc}
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseVisitor.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseVisitor.java
index 41d14c8..a069335 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseVisitor.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaBaseVisitor.java
@@ -19,13 +19,6 @@ public class LamaBaseVisitor extends AbstractParseTreeVisitor implements L
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitLama(LamaParser.LamaContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitImport_expression(LamaParser.Import_expressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -82,34 +75,6 @@ public class LamaBaseVisitor extends AbstractParseTreeVisitor implements L
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitFunction_body(LamaParser.Function_bodyContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitInfix_definition(LamaParser.Infix_definitionContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitInfix_head(LamaParser.Infix_headContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitInfixity(LamaParser.InfixityContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitLevel(LamaParser.LevelContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -278,4 +243,11 @@ public class LamaBaseVisitor extends AbstractParseTreeVisitor implements L
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitCase_branch(LamaParser.Case_branchContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitAny_infix(LamaParser.Any_infixContext ctx) { return visitChildren(ctx); }
}
\ No newline at end of file
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.interp b/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.interp
index 1171b41..96338cd 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.interp
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.interp
@@ -1,27 +1,20 @@
token literal names:
null
-'import'
-';'
'var'
'public'
','
+';'
'='
'fun'
'('
')'
'{'
'}'
-'infix'
-'infixl'
-'infixr'
-'at'
-'before'
-'after'
-'-'
'['
']'
'true'
'false'
+'infix'
'skip'
'if'
'then'
@@ -32,7 +25,6 @@ null
'do'
'od'
'for'
-'|'
':'
'@'
'#'
@@ -45,10 +37,12 @@ null
'case'
'of'
'esac'
+'|'
'->'
null
null
null
+'-'
null
null
null
@@ -98,23 +92,17 @@ null
null
null
null
-null
-null
-null
-null
-null
-null
-null
WS
COMMENT
LINE_COMMENT
-WORD
+MINUS
INFIX
UIDENT
LIDENT
CHAR_LITERAL
STRING_LITERAL
DECIMAL_LITERAL
+WORD
rule names:
T__0
@@ -156,26 +144,20 @@ T__35
T__36
T__37
T__38
-T__39
-T__40
-T__41
-T__42
-T__43
-T__44
-T__45
WS
COMMENT
LINE_COMMENT
NON_ZERO_DIGIT
DIGIT
STRING_CHAR
-WORD
+MINUS
INFIX
UIDENT
LIDENT
CHAR_LITERAL
STRING_LITERAL
DECIMAL_LITERAL
+WORD
channel names:
DEFAULT_TOKEN_CHANNEL
@@ -185,4 +167,4 @@ mode names:
DEFAULT_MODE
atn:
-[4, 0, 56, 387, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 4, 46, 301, 8, 46, 11, 46, 12, 46, 302, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 311, 8, 47, 10, 47, 12, 47, 314, 9, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 325, 8, 48, 10, 48, 12, 48, 328, 9, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 4, 52, 339, 8, 52, 11, 52, 12, 52, 340, 1, 53, 4, 53, 344, 8, 53, 11, 53, 12, 53, 345, 1, 54, 1, 54, 5, 54, 350, 8, 54, 10, 54, 12, 54, 353, 9, 54, 1, 55, 1, 55, 5, 55, 357, 8, 55, 10, 55, 12, 55, 360, 9, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 5, 57, 368, 8, 57, 10, 57, 12, 57, 371, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 377, 8, 58, 1, 58, 1, 58, 5, 58, 381, 8, 58, 10, 58, 12, 58, 384, 9, 58, 3, 58, 386, 8, 58, 1, 312, 0, 59, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 0, 101, 0, 103, 0, 105, 50, 107, 51, 109, 52, 111, 53, 113, 54, 115, 55, 117, 56, 1, 0, 9, 3, 0, 9, 10, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 10, 10, 13, 13, 34, 34, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 8, 0, 33, 33, 35, 38, 42, 43, 45, 47, 58, 58, 60, 64, 94, 94, 124, 124, 1, 0, 65, 90, 1, 0, 97, 122, 394, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 1, 119, 1, 0, 0, 0, 3, 126, 1, 0, 0, 0, 5, 128, 1, 0, 0, 0, 7, 132, 1, 0, 0, 0, 9, 139, 1, 0, 0, 0, 11, 141, 1, 0, 0, 0, 13, 143, 1, 0, 0, 0, 15, 147, 1, 0, 0, 0, 17, 149, 1, 0, 0, 0, 19, 151, 1, 0, 0, 0, 21, 153, 1, 0, 0, 0, 23, 155, 1, 0, 0, 0, 25, 161, 1, 0, 0, 0, 27, 168, 1, 0, 0, 0, 29, 175, 1, 0, 0, 0, 31, 178, 1, 0, 0, 0, 33, 185, 1, 0, 0, 0, 35, 191, 1, 0, 0, 0, 37, 193, 1, 0, 0, 0, 39, 195, 1, 0, 0, 0, 41, 197, 1, 0, 0, 0, 43, 202, 1, 0, 0, 0, 45, 208, 1, 0, 0, 0, 47, 213, 1, 0, 0, 0, 49, 216, 1, 0, 0, 0, 51, 221, 1, 0, 0, 0, 53, 224, 1, 0, 0, 0, 55, 229, 1, 0, 0, 0, 57, 234, 1, 0, 0, 0, 59, 240, 1, 0, 0, 0, 61, 243, 1, 0, 0, 0, 63, 246, 1, 0, 0, 0, 65, 250, 1, 0, 0, 0, 67, 252, 1, 0, 0, 0, 69, 254, 1, 0, 0, 0, 71, 256, 1, 0, 0, 0, 73, 258, 1, 0, 0, 0, 75, 262, 1, 0, 0, 0, 77, 266, 1, 0, 0, 0, 79, 270, 1, 0, 0, 0, 81, 276, 1, 0, 0, 0, 83, 281, 1, 0, 0, 0, 85, 283, 1, 0, 0, 0, 87, 288, 1, 0, 0, 0, 89, 291, 1, 0, 0, 0, 91, 296, 1, 0, 0, 0, 93, 300, 1, 0, 0, 0, 95, 306, 1, 0, 0, 0, 97, 320, 1, 0, 0, 0, 99, 331, 1, 0, 0, 0, 101, 333, 1, 0, 0, 0, 103, 335, 1, 0, 0, 0, 105, 338, 1, 0, 0, 0, 107, 343, 1, 0, 0, 0, 109, 347, 1, 0, 0, 0, 111, 354, 1, 0, 0, 0, 113, 361, 1, 0, 0, 0, 115, 365, 1, 0, 0, 0, 117, 385, 1, 0, 0, 0, 119, 120, 5, 105, 0, 0, 120, 121, 5, 109, 0, 0, 121, 122, 5, 112, 0, 0, 122, 123, 5, 111, 0, 0, 123, 124, 5, 114, 0, 0, 124, 125, 5, 116, 0, 0, 125, 2, 1, 0, 0, 0, 126, 127, 5, 59, 0, 0, 127, 4, 1, 0, 0, 0, 128, 129, 5, 118, 0, 0, 129, 130, 5, 97, 0, 0, 130, 131, 5, 114, 0, 0, 131, 6, 1, 0, 0, 0, 132, 133, 5, 112, 0, 0, 133, 134, 5, 117, 0, 0, 134, 135, 5, 98, 0, 0, 135, 136, 5, 108, 0, 0, 136, 137, 5, 105, 0, 0, 137, 138, 5, 99, 0, 0, 138, 8, 1, 0, 0, 0, 139, 140, 5, 44, 0, 0, 140, 10, 1, 0, 0, 0, 141, 142, 5, 61, 0, 0, 142, 12, 1, 0, 0, 0, 143, 144, 5, 102, 0, 0, 144, 145, 5, 117, 0, 0, 145, 146, 5, 110, 0, 0, 146, 14, 1, 0, 0, 0, 147, 148, 5, 40, 0, 0, 148, 16, 1, 0, 0, 0, 149, 150, 5, 41, 0, 0, 150, 18, 1, 0, 0, 0, 151, 152, 5, 123, 0, 0, 152, 20, 1, 0, 0, 0, 153, 154, 5, 125, 0, 0, 154, 22, 1, 0, 0, 0, 155, 156, 5, 105, 0, 0, 156, 157, 5, 110, 0, 0, 157, 158, 5, 102, 0, 0, 158, 159, 5, 105, 0, 0, 159, 160, 5, 120, 0, 0, 160, 24, 1, 0, 0, 0, 161, 162, 5, 105, 0, 0, 162, 163, 5, 110, 0, 0, 163, 164, 5, 102, 0, 0, 164, 165, 5, 105, 0, 0, 165, 166, 5, 120, 0, 0, 166, 167, 5, 108, 0, 0, 167, 26, 1, 0, 0, 0, 168, 169, 5, 105, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 102, 0, 0, 171, 172, 5, 105, 0, 0, 172, 173, 5, 120, 0, 0, 173, 174, 5, 114, 0, 0, 174, 28, 1, 0, 0, 0, 175, 176, 5, 97, 0, 0, 176, 177, 5, 116, 0, 0, 177, 30, 1, 0, 0, 0, 178, 179, 5, 98, 0, 0, 179, 180, 5, 101, 0, 0, 180, 181, 5, 102, 0, 0, 181, 182, 5, 111, 0, 0, 182, 183, 5, 114, 0, 0, 183, 184, 5, 101, 0, 0, 184, 32, 1, 0, 0, 0, 185, 186, 5, 97, 0, 0, 186, 187, 5, 102, 0, 0, 187, 188, 5, 116, 0, 0, 188, 189, 5, 101, 0, 0, 189, 190, 5, 114, 0, 0, 190, 34, 1, 0, 0, 0, 191, 192, 5, 45, 0, 0, 192, 36, 1, 0, 0, 0, 193, 194, 5, 91, 0, 0, 194, 38, 1, 0, 0, 0, 195, 196, 5, 93, 0, 0, 196, 40, 1, 0, 0, 0, 197, 198, 5, 116, 0, 0, 198, 199, 5, 114, 0, 0, 199, 200, 5, 117, 0, 0, 200, 201, 5, 101, 0, 0, 201, 42, 1, 0, 0, 0, 202, 203, 5, 102, 0, 0, 203, 204, 5, 97, 0, 0, 204, 205, 5, 108, 0, 0, 205, 206, 5, 115, 0, 0, 206, 207, 5, 101, 0, 0, 207, 44, 1, 0, 0, 0, 208, 209, 5, 115, 0, 0, 209, 210, 5, 107, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 112, 0, 0, 212, 46, 1, 0, 0, 0, 213, 214, 5, 105, 0, 0, 214, 215, 5, 102, 0, 0, 215, 48, 1, 0, 0, 0, 216, 217, 5, 116, 0, 0, 217, 218, 5, 104, 0, 0, 218, 219, 5, 101, 0, 0, 219, 220, 5, 110, 0, 0, 220, 50, 1, 0, 0, 0, 221, 222, 5, 102, 0, 0, 222, 223, 5, 105, 0, 0, 223, 52, 1, 0, 0, 0, 224, 225, 5, 101, 0, 0, 225, 226, 5, 108, 0, 0, 226, 227, 5, 105, 0, 0, 227, 228, 5, 102, 0, 0, 228, 54, 1, 0, 0, 0, 229, 230, 5, 101, 0, 0, 230, 231, 5, 108, 0, 0, 231, 232, 5, 115, 0, 0, 232, 233, 5, 101, 0, 0, 233, 56, 1, 0, 0, 0, 234, 235, 5, 119, 0, 0, 235, 236, 5, 104, 0, 0, 236, 237, 5, 105, 0, 0, 237, 238, 5, 108, 0, 0, 238, 239, 5, 101, 0, 0, 239, 58, 1, 0, 0, 0, 240, 241, 5, 100, 0, 0, 241, 242, 5, 111, 0, 0, 242, 60, 1, 0, 0, 0, 243, 244, 5, 111, 0, 0, 244, 245, 5, 100, 0, 0, 245, 62, 1, 0, 0, 0, 246, 247, 5, 102, 0, 0, 247, 248, 5, 111, 0, 0, 248, 249, 5, 114, 0, 0, 249, 64, 1, 0, 0, 0, 250, 251, 5, 124, 0, 0, 251, 66, 1, 0, 0, 0, 252, 253, 5, 58, 0, 0, 253, 68, 1, 0, 0, 0, 254, 255, 5, 64, 0, 0, 255, 70, 1, 0, 0, 0, 256, 257, 5, 35, 0, 0, 257, 72, 1, 0, 0, 0, 258, 259, 5, 98, 0, 0, 259, 260, 5, 111, 0, 0, 260, 261, 5, 120, 0, 0, 261, 74, 1, 0, 0, 0, 262, 263, 5, 118, 0, 0, 263, 264, 5, 97, 0, 0, 264, 265, 5, 108, 0, 0, 265, 76, 1, 0, 0, 0, 266, 267, 5, 115, 0, 0, 267, 268, 5, 116, 0, 0, 268, 269, 5, 114, 0, 0, 269, 78, 1, 0, 0, 0, 270, 271, 5, 97, 0, 0, 271, 272, 5, 114, 0, 0, 272, 273, 5, 114, 0, 0, 273, 274, 5, 97, 0, 0, 274, 275, 5, 121, 0, 0, 275, 80, 1, 0, 0, 0, 276, 277, 5, 115, 0, 0, 277, 278, 5, 101, 0, 0, 278, 279, 5, 120, 0, 0, 279, 280, 5, 112, 0, 0, 280, 82, 1, 0, 0, 0, 281, 282, 5, 95, 0, 0, 282, 84, 1, 0, 0, 0, 283, 284, 5, 99, 0, 0, 284, 285, 5, 97, 0, 0, 285, 286, 5, 115, 0, 0, 286, 287, 5, 101, 0, 0, 287, 86, 1, 0, 0, 0, 288, 289, 5, 111, 0, 0, 289, 290, 5, 102, 0, 0, 290, 88, 1, 0, 0, 0, 291, 292, 5, 101, 0, 0, 292, 293, 5, 115, 0, 0, 293, 294, 5, 97, 0, 0, 294, 295, 5, 99, 0, 0, 295, 90, 1, 0, 0, 0, 296, 297, 5, 45, 0, 0, 297, 298, 5, 62, 0, 0, 298, 92, 1, 0, 0, 0, 299, 301, 7, 0, 0, 0, 300, 299, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 300, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 305, 6, 46, 0, 0, 305, 94, 1, 0, 0, 0, 306, 307, 5, 47, 0, 0, 307, 308, 5, 42, 0, 0, 308, 312, 1, 0, 0, 0, 309, 311, 9, 0, 0, 0, 310, 309, 1, 0, 0, 0, 311, 314, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 313, 315, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 315, 316, 5, 42, 0, 0, 316, 317, 5, 47, 0, 0, 317, 318, 1, 0, 0, 0, 318, 319, 6, 47, 0, 0, 319, 96, 1, 0, 0, 0, 320, 321, 5, 47, 0, 0, 321, 322, 5, 47, 0, 0, 322, 326, 1, 0, 0, 0, 323, 325, 8, 1, 0, 0, 324, 323, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 329, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 330, 6, 48, 0, 0, 330, 98, 1, 0, 0, 0, 331, 332, 7, 2, 0, 0, 332, 100, 1, 0, 0, 0, 333, 334, 7, 3, 0, 0, 334, 102, 1, 0, 0, 0, 335, 336, 8, 4, 0, 0, 336, 104, 1, 0, 0, 0, 337, 339, 7, 5, 0, 0, 338, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 338, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 106, 1, 0, 0, 0, 342, 344, 7, 6, 0, 0, 343, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 108, 1, 0, 0, 0, 347, 351, 7, 7, 0, 0, 348, 350, 7, 5, 0, 0, 349, 348, 1, 0, 0, 0, 350, 353, 1, 0, 0, 0, 351, 349, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 110, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 354, 358, 7, 8, 0, 0, 355, 357, 7, 5, 0, 0, 356, 355, 1, 0, 0, 0, 357, 360, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 112, 1, 0, 0, 0, 360, 358, 1, 0, 0, 0, 361, 362, 5, 39, 0, 0, 362, 363, 3, 103, 51, 0, 363, 364, 5, 39, 0, 0, 364, 114, 1, 0, 0, 0, 365, 369, 5, 34, 0, 0, 366, 368, 3, 103, 51, 0, 367, 366, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 372, 373, 5, 34, 0, 0, 373, 116, 1, 0, 0, 0, 374, 386, 5, 48, 0, 0, 375, 377, 5, 45, 0, 0, 376, 375, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 382, 3, 99, 49, 0, 379, 381, 3, 101, 50, 0, 380, 379, 1, 0, 0, 0, 381, 384, 1, 0, 0, 0, 382, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 386, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 374, 1, 0, 0, 0, 385, 376, 1, 0, 0, 0, 386, 118, 1, 0, 0, 0, 12, 0, 302, 312, 326, 340, 345, 351, 358, 369, 376, 382, 385, 1, 6, 0, 0]
\ No newline at end of file
+[4, 0, 50, 335, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 4, 39, 250, 8, 39, 11, 39, 12, 39, 251, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 260, 8, 40, 10, 40, 12, 40, 263, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 274, 8, 41, 10, 41, 12, 41, 277, 9, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 4, 46, 290, 8, 46, 11, 46, 12, 46, 291, 1, 47, 1, 47, 5, 47, 296, 8, 47, 10, 47, 12, 47, 299, 9, 47, 1, 48, 1, 48, 5, 48, 303, 8, 48, 10, 48, 12, 48, 306, 9, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 5, 50, 314, 8, 50, 10, 50, 12, 50, 317, 9, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 5, 51, 324, 8, 51, 10, 51, 12, 51, 327, 9, 51, 3, 51, 329, 8, 51, 1, 52, 4, 52, 332, 8, 52, 11, 52, 12, 52, 333, 1, 261, 0, 53, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 0, 87, 0, 89, 0, 91, 43, 93, 44, 95, 45, 97, 46, 99, 47, 101, 48, 103, 49, 105, 50, 1, 0, 9, 3, 0, 9, 10, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 10, 10, 13, 13, 34, 34, 8, 0, 33, 33, 35, 38, 42, 43, 45, 47, 58, 58, 60, 64, 94, 94, 124, 124, 1, 0, 65, 90, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 97, 122, 341, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 1, 107, 1, 0, 0, 0, 3, 111, 1, 0, 0, 0, 5, 118, 1, 0, 0, 0, 7, 120, 1, 0, 0, 0, 9, 122, 1, 0, 0, 0, 11, 124, 1, 0, 0, 0, 13, 128, 1, 0, 0, 0, 15, 130, 1, 0, 0, 0, 17, 132, 1, 0, 0, 0, 19, 134, 1, 0, 0, 0, 21, 136, 1, 0, 0, 0, 23, 138, 1, 0, 0, 0, 25, 140, 1, 0, 0, 0, 27, 145, 1, 0, 0, 0, 29, 151, 1, 0, 0, 0, 31, 157, 1, 0, 0, 0, 33, 162, 1, 0, 0, 0, 35, 165, 1, 0, 0, 0, 37, 170, 1, 0, 0, 0, 39, 173, 1, 0, 0, 0, 41, 178, 1, 0, 0, 0, 43, 183, 1, 0, 0, 0, 45, 189, 1, 0, 0, 0, 47, 192, 1, 0, 0, 0, 49, 195, 1, 0, 0, 0, 51, 199, 1, 0, 0, 0, 53, 201, 1, 0, 0, 0, 55, 203, 1, 0, 0, 0, 57, 205, 1, 0, 0, 0, 59, 209, 1, 0, 0, 0, 61, 213, 1, 0, 0, 0, 63, 217, 1, 0, 0, 0, 65, 223, 1, 0, 0, 0, 67, 228, 1, 0, 0, 0, 69, 230, 1, 0, 0, 0, 71, 235, 1, 0, 0, 0, 73, 238, 1, 0, 0, 0, 75, 243, 1, 0, 0, 0, 77, 245, 1, 0, 0, 0, 79, 249, 1, 0, 0, 0, 81, 255, 1, 0, 0, 0, 83, 269, 1, 0, 0, 0, 85, 280, 1, 0, 0, 0, 87, 282, 1, 0, 0, 0, 89, 284, 1, 0, 0, 0, 91, 286, 1, 0, 0, 0, 93, 289, 1, 0, 0, 0, 95, 293, 1, 0, 0, 0, 97, 300, 1, 0, 0, 0, 99, 307, 1, 0, 0, 0, 101, 311, 1, 0, 0, 0, 103, 328, 1, 0, 0, 0, 105, 331, 1, 0, 0, 0, 107, 108, 5, 118, 0, 0, 108, 109, 5, 97, 0, 0, 109, 110, 5, 114, 0, 0, 110, 2, 1, 0, 0, 0, 111, 112, 5, 112, 0, 0, 112, 113, 5, 117, 0, 0, 113, 114, 5, 98, 0, 0, 114, 115, 5, 108, 0, 0, 115, 116, 5, 105, 0, 0, 116, 117, 5, 99, 0, 0, 117, 4, 1, 0, 0, 0, 118, 119, 5, 44, 0, 0, 119, 6, 1, 0, 0, 0, 120, 121, 5, 59, 0, 0, 121, 8, 1, 0, 0, 0, 122, 123, 5, 61, 0, 0, 123, 10, 1, 0, 0, 0, 124, 125, 5, 102, 0, 0, 125, 126, 5, 117, 0, 0, 126, 127, 5, 110, 0, 0, 127, 12, 1, 0, 0, 0, 128, 129, 5, 40, 0, 0, 129, 14, 1, 0, 0, 0, 130, 131, 5, 41, 0, 0, 131, 16, 1, 0, 0, 0, 132, 133, 5, 123, 0, 0, 133, 18, 1, 0, 0, 0, 134, 135, 5, 125, 0, 0, 135, 20, 1, 0, 0, 0, 136, 137, 5, 91, 0, 0, 137, 22, 1, 0, 0, 0, 138, 139, 5, 93, 0, 0, 139, 24, 1, 0, 0, 0, 140, 141, 5, 116, 0, 0, 141, 142, 5, 114, 0, 0, 142, 143, 5, 117, 0, 0, 143, 144, 5, 101, 0, 0, 144, 26, 1, 0, 0, 0, 145, 146, 5, 102, 0, 0, 146, 147, 5, 97, 0, 0, 147, 148, 5, 108, 0, 0, 148, 149, 5, 115, 0, 0, 149, 150, 5, 101, 0, 0, 150, 28, 1, 0, 0, 0, 151, 152, 5, 105, 0, 0, 152, 153, 5, 110, 0, 0, 153, 154, 5, 102, 0, 0, 154, 155, 5, 105, 0, 0, 155, 156, 5, 120, 0, 0, 156, 30, 1, 0, 0, 0, 157, 158, 5, 115, 0, 0, 158, 159, 5, 107, 0, 0, 159, 160, 5, 105, 0, 0, 160, 161, 5, 112, 0, 0, 161, 32, 1, 0, 0, 0, 162, 163, 5, 105, 0, 0, 163, 164, 5, 102, 0, 0, 164, 34, 1, 0, 0, 0, 165, 166, 5, 116, 0, 0, 166, 167, 5, 104, 0, 0, 167, 168, 5, 101, 0, 0, 168, 169, 5, 110, 0, 0, 169, 36, 1, 0, 0, 0, 170, 171, 5, 102, 0, 0, 171, 172, 5, 105, 0, 0, 172, 38, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 108, 0, 0, 175, 176, 5, 105, 0, 0, 176, 177, 5, 102, 0, 0, 177, 40, 1, 0, 0, 0, 178, 179, 5, 101, 0, 0, 179, 180, 5, 108, 0, 0, 180, 181, 5, 115, 0, 0, 181, 182, 5, 101, 0, 0, 182, 42, 1, 0, 0, 0, 183, 184, 5, 119, 0, 0, 184, 185, 5, 104, 0, 0, 185, 186, 5, 105, 0, 0, 186, 187, 5, 108, 0, 0, 187, 188, 5, 101, 0, 0, 188, 44, 1, 0, 0, 0, 189, 190, 5, 100, 0, 0, 190, 191, 5, 111, 0, 0, 191, 46, 1, 0, 0, 0, 192, 193, 5, 111, 0, 0, 193, 194, 5, 100, 0, 0, 194, 48, 1, 0, 0, 0, 195, 196, 5, 102, 0, 0, 196, 197, 5, 111, 0, 0, 197, 198, 5, 114, 0, 0, 198, 50, 1, 0, 0, 0, 199, 200, 5, 58, 0, 0, 200, 52, 1, 0, 0, 0, 201, 202, 5, 64, 0, 0, 202, 54, 1, 0, 0, 0, 203, 204, 5, 35, 0, 0, 204, 56, 1, 0, 0, 0, 205, 206, 5, 98, 0, 0, 206, 207, 5, 111, 0, 0, 207, 208, 5, 120, 0, 0, 208, 58, 1, 0, 0, 0, 209, 210, 5, 118, 0, 0, 210, 211, 5, 97, 0, 0, 211, 212, 5, 108, 0, 0, 212, 60, 1, 0, 0, 0, 213, 214, 5, 115, 0, 0, 214, 215, 5, 116, 0, 0, 215, 216, 5, 114, 0, 0, 216, 62, 1, 0, 0, 0, 217, 218, 5, 97, 0, 0, 218, 219, 5, 114, 0, 0, 219, 220, 5, 114, 0, 0, 220, 221, 5, 97, 0, 0, 221, 222, 5, 121, 0, 0, 222, 64, 1, 0, 0, 0, 223, 224, 5, 115, 0, 0, 224, 225, 5, 101, 0, 0, 225, 226, 5, 120, 0, 0, 226, 227, 5, 112, 0, 0, 227, 66, 1, 0, 0, 0, 228, 229, 5, 95, 0, 0, 229, 68, 1, 0, 0, 0, 230, 231, 5, 99, 0, 0, 231, 232, 5, 97, 0, 0, 232, 233, 5, 115, 0, 0, 233, 234, 5, 101, 0, 0, 234, 70, 1, 0, 0, 0, 235, 236, 5, 111, 0, 0, 236, 237, 5, 102, 0, 0, 237, 72, 1, 0, 0, 0, 238, 239, 5, 101, 0, 0, 239, 240, 5, 115, 0, 0, 240, 241, 5, 97, 0, 0, 241, 242, 5, 99, 0, 0, 242, 74, 1, 0, 0, 0, 243, 244, 5, 124, 0, 0, 244, 76, 1, 0, 0, 0, 245, 246, 5, 45, 0, 0, 246, 247, 5, 62, 0, 0, 247, 78, 1, 0, 0, 0, 248, 250, 7, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 6, 39, 0, 0, 254, 80, 1, 0, 0, 0, 255, 256, 5, 47, 0, 0, 256, 257, 5, 42, 0, 0, 257, 261, 1, 0, 0, 0, 258, 260, 9, 0, 0, 0, 259, 258, 1, 0, 0, 0, 260, 263, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 262, 264, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 264, 265, 5, 42, 0, 0, 265, 266, 5, 47, 0, 0, 266, 267, 1, 0, 0, 0, 267, 268, 6, 40, 0, 0, 268, 82, 1, 0, 0, 0, 269, 270, 5, 47, 0, 0, 270, 271, 5, 47, 0, 0, 271, 275, 1, 0, 0, 0, 272, 274, 8, 1, 0, 0, 273, 272, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 278, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 279, 6, 41, 0, 0, 279, 84, 1, 0, 0, 0, 280, 281, 7, 2, 0, 0, 281, 86, 1, 0, 0, 0, 282, 283, 7, 3, 0, 0, 283, 88, 1, 0, 0, 0, 284, 285, 8, 4, 0, 0, 285, 90, 1, 0, 0, 0, 286, 287, 5, 45, 0, 0, 287, 92, 1, 0, 0, 0, 288, 290, 7, 5, 0, 0, 289, 288, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 94, 1, 0, 0, 0, 293, 297, 7, 6, 0, 0, 294, 296, 7, 7, 0, 0, 295, 294, 1, 0, 0, 0, 296, 299, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 96, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 300, 304, 7, 8, 0, 0, 301, 303, 7, 7, 0, 0, 302, 301, 1, 0, 0, 0, 303, 306, 1, 0, 0, 0, 304, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 98, 1, 0, 0, 0, 306, 304, 1, 0, 0, 0, 307, 308, 5, 39, 0, 0, 308, 309, 3, 89, 44, 0, 309, 310, 5, 39, 0, 0, 310, 100, 1, 0, 0, 0, 311, 315, 5, 34, 0, 0, 312, 314, 3, 89, 44, 0, 313, 312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 318, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 319, 5, 34, 0, 0, 319, 102, 1, 0, 0, 0, 320, 329, 5, 48, 0, 0, 321, 325, 3, 85, 42, 0, 322, 324, 3, 87, 43, 0, 323, 322, 1, 0, 0, 0, 324, 327, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 328, 320, 1, 0, 0, 0, 328, 321, 1, 0, 0, 0, 329, 104, 1, 0, 0, 0, 330, 332, 7, 7, 0, 0, 331, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 331, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 106, 1, 0, 0, 0, 11, 0, 251, 261, 275, 291, 297, 304, 315, 325, 328, 333, 1, 6, 0, 0]
\ No newline at end of file
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.java
index 80bd59a..b334cb3 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.java
@@ -25,9 +25,8 @@ public class LamaLexer extends Lexer {
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
- T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
- T__45=46, WS=47, COMMENT=48, LINE_COMMENT=49, WORD=50, INFIX=51, UIDENT=52,
- LIDENT=53, CHAR_LITERAL=54, STRING_LITERAL=55, DECIMAL_LITERAL=56;
+ T__38=39, WS=40, COMMENT=41, LINE_COMMENT=42, MINUS=43, INFIX=44, UIDENT=45,
+ LIDENT=46, CHAR_LITERAL=47, STRING_LITERAL=48, DECIMAL_LITERAL=49, WORD=50;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -42,22 +41,21 @@ public class LamaLexer extends Lexer {
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
- "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
- "T__41", "T__42", "T__43", "T__44", "T__45", "WS", "COMMENT", "LINE_COMMENT",
- "NON_ZERO_DIGIT", "DIGIT", "STRING_CHAR", "WORD", "INFIX", "UIDENT",
- "LIDENT", "CHAR_LITERAL", "STRING_LITERAL", "DECIMAL_LITERAL"
+ "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "WS", "COMMENT",
+ "LINE_COMMENT", "NON_ZERO_DIGIT", "DIGIT", "STRING_CHAR", "MINUS", "INFIX",
+ "UIDENT", "LIDENT", "CHAR_LITERAL", "STRING_LITERAL", "DECIMAL_LITERAL",
+ "WORD"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
- null, "'import'", "';'", "'var'", "'public'", "','", "'='", "'fun'",
- "'('", "')'", "'{'", "'}'", "'infix'", "'infixl'", "'infixr'", "'at'",
- "'before'", "'after'", "'-'", "'['", "']'", "'true'", "'false'", "'skip'",
+ null, "'var'", "'public'", "','", "';'", "'='", "'fun'", "'('", "')'",
+ "'{'", "'}'", "'['", "']'", "'true'", "'false'", "'infix'", "'skip'",
"'if'", "'then'", "'fi'", "'elif'", "'else'", "'while'", "'do'", "'od'",
- "'for'", "'|'", "':'", "'@'", "'#'", "'box'", "'val'", "'str'", "'array'",
- "'sexp'", "'_'", "'case'", "'of'", "'esac'", "'->'"
+ "'for'", "':'", "'@'", "'#'", "'box'", "'val'", "'str'", "'array'", "'sexp'",
+ "'_'", "'case'", "'of'", "'esac'", "'|'", "'->'", null, null, null, "'-'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -66,9 +64,9 @@ public class LamaLexer extends Lexer {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, "WS",
- "COMMENT", "LINE_COMMENT", "WORD", "INFIX", "UIDENT", "LIDENT", "CHAR_LITERAL",
- "STRING_LITERAL", "DECIMAL_LITERAL"
+ null, null, null, null, "WS", "COMMENT", "LINE_COMMENT", "MINUS", "INFIX",
+ "UIDENT", "LIDENT", "CHAR_LITERAL", "STRING_LITERAL", "DECIMAL_LITERAL",
+ "WORD"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -130,7 +128,7 @@ public class LamaLexer extends Lexer {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\u0004\u00008\u0183\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
+ "\u0004\u00002\u014f\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
@@ -144,50 +142,44 @@ public class LamaLexer extends Lexer {
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
- "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
- "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+
- ":\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+
- "\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+
- "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
+ "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u0001\u0000"+
+ "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+
+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+
"\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+
- "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+
+ "\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+
"\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b"+
- "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001"+
- "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+
- "\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+
- "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+
- "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
- "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+
- "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+
- "\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+
- "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+
- "\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+
- "\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
- "\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
- "\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+
- "\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001"+
- "\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001"+
- "!\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001"+
- "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001"+
- "\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+
- ")\u0001*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001,\u0001"+
- ",\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0004.\u012d\b.\u000b"+
- ".\f.\u012e\u0001.\u0001.\u0001/\u0001/\u0001/\u0001/\u0005/\u0137\b/\n"+
- "/\f/\u013a\t/\u0001/\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010"+
- "\u00010\u00050\u0145\b0\n0\f0\u0148\t0\u00010\u00010\u00011\u00011\u0001"+
- "2\u00012\u00013\u00013\u00014\u00044\u0153\b4\u000b4\f4\u0154\u00015\u0004"+
- "5\u0158\b5\u000b5\f5\u0159\u00016\u00016\u00056\u015e\b6\n6\f6\u0161\t"+
- "6\u00017\u00017\u00057\u0165\b7\n7\f7\u0168\t7\u00018\u00018\u00018\u0001"+
- "8\u00019\u00019\u00059\u0170\b9\n9\f9\u0173\t9\u00019\u00019\u0001:\u0001"+
- ":\u0003:\u0179\b:\u0001:\u0001:\u0005:\u017d\b:\n:\f:\u0180\t:\u0003:"+
- "\u0182\b:\u0001\u0138\u0000;\u0001\u0001\u0003\u0002\u0005\u0003\u0007"+
- "\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b"+
- "\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013"+
- "\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d"+
- ";\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c\u0000e\u0000g\u0000"+
- "i2k3m4o5q6s7u8\u0001\u0000\t\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r"+
- "\u0001\u000019\u0001\u000009\u0003\u0000\n\n\r\r\"\"\u0004\u000009AZ_"+
- "_az\b\u0000!!#&*+-/::<@^^||\u0001\u0000AZ\u0001\u0000az\u018a\u0000\u0001"+
+ "\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+
+ "\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+
+ "\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001"+
+ "\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
+ "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001"+
+ "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001"+
+ "\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001"+
+ "\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001"+
+ "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001"+
+ "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+
+ "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001"+
+ "\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+
+ "\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001"+
+ "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001$\u0001$"+
+ "\u0001$\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001&\u0001\'\u0004"+
+ "\'\u00fa\b\'\u000b\'\f\'\u00fb\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001"+
+ "(\u0005(\u0104\b(\n(\f(\u0107\t(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+
+ ")\u0001)\u0001)\u0001)\u0005)\u0112\b)\n)\f)\u0115\t)\u0001)\u0001)\u0001"+
+ "*\u0001*\u0001+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001.\u0004.\u0122"+
+ "\b.\u000b.\f.\u0123\u0001/\u0001/\u0005/\u0128\b/\n/\f/\u012b\t/\u0001"+
+ "0\u00010\u00050\u012f\b0\n0\f0\u0132\t0\u00011\u00011\u00011\u00011\u0001"+
+ "2\u00012\u00052\u013a\b2\n2\f2\u013d\t2\u00012\u00012\u00013\u00013\u0001"+
+ "3\u00053\u0144\b3\n3\f3\u0147\t3\u00033\u0149\b3\u00014\u00044\u014c\b"+
+ "4\u000b4\f4\u014d\u0001\u0105\u00005\u0001\u0001\u0003\u0002\u0005\u0003"+
+ "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+
+ "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+
+ "%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+
+ "9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U\u0000W\u0000Y\u0000[+]"+
+ ",_-a.c/e0g1i2\u0001\u0000\t\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r"+
+ "\u0001\u000019\u0001\u000009\u0003\u0000\n\n\r\r\"\"\b\u0000!!#&*+-/:"+
+ ":<@^^||\u0001\u0000AZ\u0004\u000009AZ__az\u0001\u0000az\u0155\u0000\u0001"+
"\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+
"\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+
"\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+
@@ -206,164 +198,140 @@ public class LamaLexer extends Lexer {
"C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001"+
"\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000"+
"\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000"+
- "Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001"+
- "\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000"+
- "\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000"+
- "_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0000i\u0001"+
- "\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000"+
- "\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000"+
- "s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000\u0000\u0001w\u0001"+
- "\u0000\u0000\u0000\u0003~\u0001\u0000\u0000\u0000\u0005\u0080\u0001\u0000"+
- "\u0000\u0000\u0007\u0084\u0001\u0000\u0000\u0000\t\u008b\u0001\u0000\u0000"+
- "\u0000\u000b\u008d\u0001\u0000\u0000\u0000\r\u008f\u0001\u0000\u0000\u0000"+
- "\u000f\u0093\u0001\u0000\u0000\u0000\u0011\u0095\u0001\u0000\u0000\u0000"+
- "\u0013\u0097\u0001\u0000\u0000\u0000\u0015\u0099\u0001\u0000\u0000\u0000"+
- "\u0017\u009b\u0001\u0000\u0000\u0000\u0019\u00a1\u0001\u0000\u0000\u0000"+
- "\u001b\u00a8\u0001\u0000\u0000\u0000\u001d\u00af\u0001\u0000\u0000\u0000"+
- "\u001f\u00b2\u0001\u0000\u0000\u0000!\u00b9\u0001\u0000\u0000\u0000#\u00bf"+
- "\u0001\u0000\u0000\u0000%\u00c1\u0001\u0000\u0000\u0000\'\u00c3\u0001"+
- "\u0000\u0000\u0000)\u00c5\u0001\u0000\u0000\u0000+\u00ca\u0001\u0000\u0000"+
- "\u0000-\u00d0\u0001\u0000\u0000\u0000/\u00d5\u0001\u0000\u0000\u00001"+
- "\u00d8\u0001\u0000\u0000\u00003\u00dd\u0001\u0000\u0000\u00005\u00e0\u0001"+
- "\u0000\u0000\u00007\u00e5\u0001\u0000\u0000\u00009\u00ea\u0001\u0000\u0000"+
- "\u0000;\u00f0\u0001\u0000\u0000\u0000=\u00f3\u0001\u0000\u0000\u0000?"+
- "\u00f6\u0001\u0000\u0000\u0000A\u00fa\u0001\u0000\u0000\u0000C\u00fc\u0001"+
- "\u0000\u0000\u0000E\u00fe\u0001\u0000\u0000\u0000G\u0100\u0001\u0000\u0000"+
- "\u0000I\u0102\u0001\u0000\u0000\u0000K\u0106\u0001\u0000\u0000\u0000M"+
- "\u010a\u0001\u0000\u0000\u0000O\u010e\u0001\u0000\u0000\u0000Q\u0114\u0001"+
- "\u0000\u0000\u0000S\u0119\u0001\u0000\u0000\u0000U\u011b\u0001\u0000\u0000"+
- "\u0000W\u0120\u0001\u0000\u0000\u0000Y\u0123\u0001\u0000\u0000\u0000["+
- "\u0128\u0001\u0000\u0000\u0000]\u012c\u0001\u0000\u0000\u0000_\u0132\u0001"+
- "\u0000\u0000\u0000a\u0140\u0001\u0000\u0000\u0000c\u014b\u0001\u0000\u0000"+
- "\u0000e\u014d\u0001\u0000\u0000\u0000g\u014f\u0001\u0000\u0000\u0000i"+
- "\u0152\u0001\u0000\u0000\u0000k\u0157\u0001\u0000\u0000\u0000m\u015b\u0001"+
- "\u0000\u0000\u0000o\u0162\u0001\u0000\u0000\u0000q\u0169\u0001\u0000\u0000"+
- "\u0000s\u016d\u0001\u0000\u0000\u0000u\u0181\u0001\u0000\u0000\u0000w"+
- "x\u0005i\u0000\u0000xy\u0005m\u0000\u0000yz\u0005p\u0000\u0000z{\u0005"+
- "o\u0000\u0000{|\u0005r\u0000\u0000|}\u0005t\u0000\u0000}\u0002\u0001\u0000"+
- "\u0000\u0000~\u007f\u0005;\u0000\u0000\u007f\u0004\u0001\u0000\u0000\u0000"+
- "\u0080\u0081\u0005v\u0000\u0000\u0081\u0082\u0005a\u0000\u0000\u0082\u0083"+
- "\u0005r\u0000\u0000\u0083\u0006\u0001\u0000\u0000\u0000\u0084\u0085\u0005"+
- "p\u0000\u0000\u0085\u0086\u0005u\u0000\u0000\u0086\u0087\u0005b\u0000"+
- "\u0000\u0087\u0088\u0005l\u0000\u0000\u0088\u0089\u0005i\u0000\u0000\u0089"+
- "\u008a\u0005c\u0000\u0000\u008a\b\u0001\u0000\u0000\u0000\u008b\u008c"+
- "\u0005,\u0000\u0000\u008c\n\u0001\u0000\u0000\u0000\u008d\u008e\u0005"+
- "=\u0000\u0000\u008e\f\u0001\u0000\u0000\u0000\u008f\u0090\u0005f\u0000"+
- "\u0000\u0090\u0091\u0005u\u0000\u0000\u0091\u0092\u0005n\u0000\u0000\u0092"+
- "\u000e\u0001\u0000\u0000\u0000\u0093\u0094\u0005(\u0000\u0000\u0094\u0010"+
- "\u0001\u0000\u0000\u0000\u0095\u0096\u0005)\u0000\u0000\u0096\u0012\u0001"+
- "\u0000\u0000\u0000\u0097\u0098\u0005{\u0000\u0000\u0098\u0014\u0001\u0000"+
- "\u0000\u0000\u0099\u009a\u0005}\u0000\u0000\u009a\u0016\u0001\u0000\u0000"+
- "\u0000\u009b\u009c\u0005i\u0000\u0000\u009c\u009d\u0005n\u0000\u0000\u009d"+
- "\u009e\u0005f\u0000\u0000\u009e\u009f\u0005i\u0000\u0000\u009f\u00a0\u0005"+
- "x\u0000\u0000\u00a0\u0018\u0001\u0000\u0000\u0000\u00a1\u00a2\u0005i\u0000"+
- "\u0000\u00a2\u00a3\u0005n\u0000\u0000\u00a3\u00a4\u0005f\u0000\u0000\u00a4"+
- "\u00a5\u0005i\u0000\u0000\u00a5\u00a6\u0005x\u0000\u0000\u00a6\u00a7\u0005"+
- "l\u0000\u0000\u00a7\u001a\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005i\u0000"+
- "\u0000\u00a9\u00aa\u0005n\u0000\u0000\u00aa\u00ab\u0005f\u0000\u0000\u00ab"+
- "\u00ac\u0005i\u0000\u0000\u00ac\u00ad\u0005x\u0000\u0000\u00ad\u00ae\u0005"+
- "r\u0000\u0000\u00ae\u001c\u0001\u0000\u0000\u0000\u00af\u00b0\u0005a\u0000"+
- "\u0000\u00b0\u00b1\u0005t\u0000\u0000\u00b1\u001e\u0001\u0000\u0000\u0000"+
- "\u00b2\u00b3\u0005b\u0000\u0000\u00b3\u00b4\u0005e\u0000\u0000\u00b4\u00b5"+
- "\u0005f\u0000\u0000\u00b5\u00b6\u0005o\u0000\u0000\u00b6\u00b7\u0005r"+
- "\u0000\u0000\u00b7\u00b8\u0005e\u0000\u0000\u00b8 \u0001\u0000\u0000\u0000"+
- "\u00b9\u00ba\u0005a\u0000\u0000\u00ba\u00bb\u0005f\u0000\u0000\u00bb\u00bc"+
- "\u0005t\u0000\u0000\u00bc\u00bd\u0005e\u0000\u0000\u00bd\u00be\u0005r"+
- "\u0000\u0000\u00be\"\u0001\u0000\u0000\u0000\u00bf\u00c0\u0005-\u0000"+
- "\u0000\u00c0$\u0001\u0000\u0000\u0000\u00c1\u00c2\u0005[\u0000\u0000\u00c2"+
- "&\u0001\u0000\u0000\u0000\u00c3\u00c4\u0005]\u0000\u0000\u00c4(\u0001"+
- "\u0000\u0000\u0000\u00c5\u00c6\u0005t\u0000\u0000\u00c6\u00c7\u0005r\u0000"+
- "\u0000\u00c7\u00c8\u0005u\u0000\u0000\u00c8\u00c9\u0005e\u0000\u0000\u00c9"+
- "*\u0001\u0000\u0000\u0000\u00ca\u00cb\u0005f\u0000\u0000\u00cb\u00cc\u0005"+
- "a\u0000\u0000\u00cc\u00cd\u0005l\u0000\u0000\u00cd\u00ce\u0005s\u0000"+
- "\u0000\u00ce\u00cf\u0005e\u0000\u0000\u00cf,\u0001\u0000\u0000\u0000\u00d0"+
- "\u00d1\u0005s\u0000\u0000\u00d1\u00d2\u0005k\u0000\u0000\u00d2\u00d3\u0005"+
- "i\u0000\u0000\u00d3\u00d4\u0005p\u0000\u0000\u00d4.\u0001\u0000\u0000"+
- "\u0000\u00d5\u00d6\u0005i\u0000\u0000\u00d6\u00d7\u0005f\u0000\u0000\u00d7"+
- "0\u0001\u0000\u0000\u0000\u00d8\u00d9\u0005t\u0000\u0000\u00d9\u00da\u0005"+
- "h\u0000\u0000\u00da\u00db\u0005e\u0000\u0000\u00db\u00dc\u0005n\u0000"+
- "\u0000\u00dc2\u0001\u0000\u0000\u0000\u00dd\u00de\u0005f\u0000\u0000\u00de"+
- "\u00df\u0005i\u0000\u0000\u00df4\u0001\u0000\u0000\u0000\u00e0\u00e1\u0005"+
- "e\u0000\u0000\u00e1\u00e2\u0005l\u0000\u0000\u00e2\u00e3\u0005i\u0000"+
- "\u0000\u00e3\u00e4\u0005f\u0000\u0000\u00e46\u0001\u0000\u0000\u0000\u00e5"+
- "\u00e6\u0005e\u0000\u0000\u00e6\u00e7\u0005l\u0000\u0000\u00e7\u00e8\u0005"+
- "s\u0000\u0000\u00e8\u00e9\u0005e\u0000\u0000\u00e98\u0001\u0000\u0000"+
- "\u0000\u00ea\u00eb\u0005w\u0000\u0000\u00eb\u00ec\u0005h\u0000\u0000\u00ec"+
- "\u00ed\u0005i\u0000\u0000\u00ed\u00ee\u0005l\u0000\u0000\u00ee\u00ef\u0005"+
- "e\u0000\u0000\u00ef:\u0001\u0000\u0000\u0000\u00f0\u00f1\u0005d\u0000"+
- "\u0000\u00f1\u00f2\u0005o\u0000\u0000\u00f2<\u0001\u0000\u0000\u0000\u00f3"+
- "\u00f4\u0005o\u0000\u0000\u00f4\u00f5\u0005d\u0000\u0000\u00f5>\u0001"+
- "\u0000\u0000\u0000\u00f6\u00f7\u0005f\u0000\u0000\u00f7\u00f8\u0005o\u0000"+
- "\u0000\u00f8\u00f9\u0005r\u0000\u0000\u00f9@\u0001\u0000\u0000\u0000\u00fa"+
- "\u00fb\u0005|\u0000\u0000\u00fbB\u0001\u0000\u0000\u0000\u00fc\u00fd\u0005"+
- ":\u0000\u0000\u00fdD\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005@\u0000"+
- "\u0000\u00ffF\u0001\u0000\u0000\u0000\u0100\u0101\u0005#\u0000\u0000\u0101"+
- "H\u0001\u0000\u0000\u0000\u0102\u0103\u0005b\u0000\u0000\u0103\u0104\u0005"+
- "o\u0000\u0000\u0104\u0105\u0005x\u0000\u0000\u0105J\u0001\u0000\u0000"+
- "\u0000\u0106\u0107\u0005v\u0000\u0000\u0107\u0108\u0005a\u0000\u0000\u0108"+
- "\u0109\u0005l\u0000\u0000\u0109L\u0001\u0000\u0000\u0000\u010a\u010b\u0005"+
- "s\u0000\u0000\u010b\u010c\u0005t\u0000\u0000\u010c\u010d\u0005r\u0000"+
- "\u0000\u010dN\u0001\u0000\u0000\u0000\u010e\u010f\u0005a\u0000\u0000\u010f"+
- "\u0110\u0005r\u0000\u0000\u0110\u0111\u0005r\u0000\u0000\u0111\u0112\u0005"+
- "a\u0000\u0000\u0112\u0113\u0005y\u0000\u0000\u0113P\u0001\u0000\u0000"+
- "\u0000\u0114\u0115\u0005s\u0000\u0000\u0115\u0116\u0005e\u0000\u0000\u0116"+
- "\u0117\u0005x\u0000\u0000\u0117\u0118\u0005p\u0000\u0000\u0118R\u0001"+
- "\u0000\u0000\u0000\u0119\u011a\u0005_\u0000\u0000\u011aT\u0001\u0000\u0000"+
- "\u0000\u011b\u011c\u0005c\u0000\u0000\u011c\u011d\u0005a\u0000\u0000\u011d"+
- "\u011e\u0005s\u0000\u0000\u011e\u011f\u0005e\u0000\u0000\u011fV\u0001"+
- "\u0000\u0000\u0000\u0120\u0121\u0005o\u0000\u0000\u0121\u0122\u0005f\u0000"+
- "\u0000\u0122X\u0001\u0000\u0000\u0000\u0123\u0124\u0005e\u0000\u0000\u0124"+
- "\u0125\u0005s\u0000\u0000\u0125\u0126\u0005a\u0000\u0000\u0126\u0127\u0005"+
- "c\u0000\u0000\u0127Z\u0001\u0000\u0000\u0000\u0128\u0129\u0005-\u0000"+
- "\u0000\u0129\u012a\u0005>\u0000\u0000\u012a\\\u0001\u0000\u0000\u0000"+
- "\u012b\u012d\u0007\u0000\u0000\u0000\u012c\u012b\u0001\u0000\u0000\u0000"+
- "\u012d\u012e\u0001\u0000\u0000\u0000\u012e\u012c\u0001\u0000\u0000\u0000"+
- "\u012e\u012f\u0001\u0000\u0000\u0000\u012f\u0130\u0001\u0000\u0000\u0000"+
- "\u0130\u0131\u0006.\u0000\u0000\u0131^\u0001\u0000\u0000\u0000\u0132\u0133"+
- "\u0005/\u0000\u0000\u0133\u0134\u0005*\u0000\u0000\u0134\u0138\u0001\u0000"+
- "\u0000\u0000\u0135\u0137\t\u0000\u0000\u0000\u0136\u0135\u0001\u0000\u0000"+
- "\u0000\u0137\u013a\u0001\u0000\u0000\u0000\u0138\u0139\u0001\u0000\u0000"+
- "\u0000\u0138\u0136\u0001\u0000\u0000\u0000\u0139\u013b\u0001\u0000\u0000"+
- "\u0000\u013a\u0138\u0001\u0000\u0000\u0000\u013b\u013c\u0005*\u0000\u0000"+
- "\u013c\u013d\u0005/\u0000\u0000\u013d\u013e\u0001\u0000\u0000\u0000\u013e"+
- "\u013f\u0006/\u0000\u0000\u013f`\u0001\u0000\u0000\u0000\u0140\u0141\u0005"+
- "/\u0000\u0000\u0141\u0142\u0005/\u0000\u0000\u0142\u0146\u0001\u0000\u0000"+
- "\u0000\u0143\u0145\b\u0001\u0000\u0000\u0144\u0143\u0001\u0000\u0000\u0000"+
- "\u0145\u0148\u0001\u0000\u0000\u0000\u0146\u0144\u0001\u0000\u0000\u0000"+
- "\u0146\u0147\u0001\u0000\u0000\u0000\u0147\u0149\u0001\u0000\u0000\u0000"+
- "\u0148\u0146\u0001\u0000\u0000\u0000\u0149\u014a\u00060\u0000\u0000\u014a"+
- "b\u0001\u0000\u0000\u0000\u014b\u014c\u0007\u0002\u0000\u0000\u014cd\u0001"+
- "\u0000\u0000\u0000\u014d\u014e\u0007\u0003\u0000\u0000\u014ef\u0001\u0000"+
- "\u0000\u0000\u014f\u0150\b\u0004\u0000\u0000\u0150h\u0001\u0000\u0000"+
- "\u0000\u0151\u0153\u0007\u0005\u0000\u0000\u0152\u0151\u0001\u0000\u0000"+
- "\u0000\u0153\u0154\u0001\u0000\u0000\u0000\u0154\u0152\u0001\u0000\u0000"+
- "\u0000\u0154\u0155\u0001\u0000\u0000\u0000\u0155j\u0001\u0000\u0000\u0000"+
- "\u0156\u0158\u0007\u0006\u0000\u0000\u0157\u0156\u0001\u0000\u0000\u0000"+
- "\u0158\u0159\u0001\u0000\u0000\u0000\u0159\u0157\u0001\u0000\u0000\u0000"+
- "\u0159\u015a\u0001\u0000\u0000\u0000\u015al\u0001\u0000\u0000\u0000\u015b"+
- "\u015f\u0007\u0007\u0000\u0000\u015c\u015e\u0007\u0005\u0000\u0000\u015d"+
- "\u015c\u0001\u0000\u0000\u0000\u015e\u0161\u0001\u0000\u0000\u0000\u015f"+
- "\u015d\u0001\u0000\u0000\u0000\u015f\u0160\u0001\u0000\u0000\u0000\u0160"+
- "n\u0001\u0000\u0000\u0000\u0161\u015f\u0001\u0000\u0000\u0000\u0162\u0166"+
- "\u0007\b\u0000\u0000\u0163\u0165\u0007\u0005\u0000\u0000\u0164\u0163\u0001"+
- "\u0000\u0000\u0000\u0165\u0168\u0001\u0000\u0000\u0000\u0166\u0164\u0001"+
- "\u0000\u0000\u0000\u0166\u0167\u0001\u0000\u0000\u0000\u0167p\u0001\u0000"+
- "\u0000\u0000\u0168\u0166\u0001\u0000\u0000\u0000\u0169\u016a\u0005\'\u0000"+
- "\u0000\u016a\u016b\u0003g3\u0000\u016b\u016c\u0005\'\u0000\u0000\u016c"+
- "r\u0001\u0000\u0000\u0000\u016d\u0171\u0005\"\u0000\u0000\u016e\u0170"+
- "\u0003g3\u0000\u016f\u016e\u0001\u0000\u0000\u0000\u0170\u0173\u0001\u0000"+
- "\u0000\u0000\u0171\u016f\u0001\u0000\u0000\u0000\u0171\u0172\u0001\u0000"+
- "\u0000\u0000\u0172\u0174\u0001\u0000\u0000\u0000\u0173\u0171\u0001\u0000"+
- "\u0000\u0000\u0174\u0175\u0005\"\u0000\u0000\u0175t\u0001\u0000\u0000"+
- "\u0000\u0176\u0182\u00050\u0000\u0000\u0177\u0179\u0005-\u0000\u0000\u0178"+
- "\u0177\u0001\u0000\u0000\u0000\u0178\u0179\u0001\u0000\u0000\u0000\u0179"+
- "\u017a\u0001\u0000\u0000\u0000\u017a\u017e\u0003c1\u0000\u017b\u017d\u0003"+
- "e2\u0000\u017c\u017b\u0001\u0000\u0000\u0000\u017d\u0180\u0001\u0000\u0000"+
- "\u0000\u017e\u017c\u0001\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000"+
- "\u0000\u017f\u0182\u0001\u0000\u0000\u0000\u0180\u017e\u0001\u0000\u0000"+
- "\u0000\u0181\u0176\u0001\u0000\u0000\u0000\u0181\u0178\u0001\u0000\u0000"+
- "\u0000\u0182v\u0001\u0000\u0000\u0000\f\u0000\u012e\u0138\u0146\u0154"+
- "\u0159\u015f\u0166\u0171\u0178\u017e\u0181\u0001\u0006\u0000\u0000";
+ "Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000[\u0001"+
+ "\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000"+
+ "\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000"+
+ "e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001"+
+ "\u0000\u0000\u0000\u0001k\u0001\u0000\u0000\u0000\u0003o\u0001\u0000\u0000"+
+ "\u0000\u0005v\u0001\u0000\u0000\u0000\u0007x\u0001\u0000\u0000\u0000\t"+
+ "z\u0001\u0000\u0000\u0000\u000b|\u0001\u0000\u0000\u0000\r\u0080\u0001"+
+ "\u0000\u0000\u0000\u000f\u0082\u0001\u0000\u0000\u0000\u0011\u0084\u0001"+
+ "\u0000\u0000\u0000\u0013\u0086\u0001\u0000\u0000\u0000\u0015\u0088\u0001"+
+ "\u0000\u0000\u0000\u0017\u008a\u0001\u0000\u0000\u0000\u0019\u008c\u0001"+
+ "\u0000\u0000\u0000\u001b\u0091\u0001\u0000\u0000\u0000\u001d\u0097\u0001"+
+ "\u0000\u0000\u0000\u001f\u009d\u0001\u0000\u0000\u0000!\u00a2\u0001\u0000"+
+ "\u0000\u0000#\u00a5\u0001\u0000\u0000\u0000%\u00aa\u0001\u0000\u0000\u0000"+
+ "\'\u00ad\u0001\u0000\u0000\u0000)\u00b2\u0001\u0000\u0000\u0000+\u00b7"+
+ "\u0001\u0000\u0000\u0000-\u00bd\u0001\u0000\u0000\u0000/\u00c0\u0001\u0000"+
+ "\u0000\u00001\u00c3\u0001\u0000\u0000\u00003\u00c7\u0001\u0000\u0000\u0000"+
+ "5\u00c9\u0001\u0000\u0000\u00007\u00cb\u0001\u0000\u0000\u00009\u00cd"+
+ "\u0001\u0000\u0000\u0000;\u00d1\u0001\u0000\u0000\u0000=\u00d5\u0001\u0000"+
+ "\u0000\u0000?\u00d9\u0001\u0000\u0000\u0000A\u00df\u0001\u0000\u0000\u0000"+
+ "C\u00e4\u0001\u0000\u0000\u0000E\u00e6\u0001\u0000\u0000\u0000G\u00eb"+
+ "\u0001\u0000\u0000\u0000I\u00ee\u0001\u0000\u0000\u0000K\u00f3\u0001\u0000"+
+ "\u0000\u0000M\u00f5\u0001\u0000\u0000\u0000O\u00f9\u0001\u0000\u0000\u0000"+
+ "Q\u00ff\u0001\u0000\u0000\u0000S\u010d\u0001\u0000\u0000\u0000U\u0118"+
+ "\u0001\u0000\u0000\u0000W\u011a\u0001\u0000\u0000\u0000Y\u011c\u0001\u0000"+
+ "\u0000\u0000[\u011e\u0001\u0000\u0000\u0000]\u0121\u0001\u0000\u0000\u0000"+
+ "_\u0125\u0001\u0000\u0000\u0000a\u012c\u0001\u0000\u0000\u0000c\u0133"+
+ "\u0001\u0000\u0000\u0000e\u0137\u0001\u0000\u0000\u0000g\u0148\u0001\u0000"+
+ "\u0000\u0000i\u014b\u0001\u0000\u0000\u0000kl\u0005v\u0000\u0000lm\u0005"+
+ "a\u0000\u0000mn\u0005r\u0000\u0000n\u0002\u0001\u0000\u0000\u0000op\u0005"+
+ "p\u0000\u0000pq\u0005u\u0000\u0000qr\u0005b\u0000\u0000rs\u0005l\u0000"+
+ "\u0000st\u0005i\u0000\u0000tu\u0005c\u0000\u0000u\u0004\u0001\u0000\u0000"+
+ "\u0000vw\u0005,\u0000\u0000w\u0006\u0001\u0000\u0000\u0000xy\u0005;\u0000"+
+ "\u0000y\b\u0001\u0000\u0000\u0000z{\u0005=\u0000\u0000{\n\u0001\u0000"+
+ "\u0000\u0000|}\u0005f\u0000\u0000}~\u0005u\u0000\u0000~\u007f\u0005n\u0000"+
+ "\u0000\u007f\f\u0001\u0000\u0000\u0000\u0080\u0081\u0005(\u0000\u0000"+
+ "\u0081\u000e\u0001\u0000\u0000\u0000\u0082\u0083\u0005)\u0000\u0000\u0083"+
+ "\u0010\u0001\u0000\u0000\u0000\u0084\u0085\u0005{\u0000\u0000\u0085\u0012"+
+ "\u0001\u0000\u0000\u0000\u0086\u0087\u0005}\u0000\u0000\u0087\u0014\u0001"+
+ "\u0000\u0000\u0000\u0088\u0089\u0005[\u0000\u0000\u0089\u0016\u0001\u0000"+
+ "\u0000\u0000\u008a\u008b\u0005]\u0000\u0000\u008b\u0018\u0001\u0000\u0000"+
+ "\u0000\u008c\u008d\u0005t\u0000\u0000\u008d\u008e\u0005r\u0000\u0000\u008e"+
+ "\u008f\u0005u\u0000\u0000\u008f\u0090\u0005e\u0000\u0000\u0090\u001a\u0001"+
+ "\u0000\u0000\u0000\u0091\u0092\u0005f\u0000\u0000\u0092\u0093\u0005a\u0000"+
+ "\u0000\u0093\u0094\u0005l\u0000\u0000\u0094\u0095\u0005s\u0000\u0000\u0095"+
+ "\u0096\u0005e\u0000\u0000\u0096\u001c\u0001\u0000\u0000\u0000\u0097\u0098"+
+ "\u0005i\u0000\u0000\u0098\u0099\u0005n\u0000\u0000\u0099\u009a\u0005f"+
+ "\u0000\u0000\u009a\u009b\u0005i\u0000\u0000\u009b\u009c\u0005x\u0000\u0000"+
+ "\u009c\u001e\u0001\u0000\u0000\u0000\u009d\u009e\u0005s\u0000\u0000\u009e"+
+ "\u009f\u0005k\u0000\u0000\u009f\u00a0\u0005i\u0000\u0000\u00a0\u00a1\u0005"+
+ "p\u0000\u0000\u00a1 \u0001\u0000\u0000\u0000\u00a2\u00a3\u0005i\u0000"+
+ "\u0000\u00a3\u00a4\u0005f\u0000\u0000\u00a4\"\u0001\u0000\u0000\u0000"+
+ "\u00a5\u00a6\u0005t\u0000\u0000\u00a6\u00a7\u0005h\u0000\u0000\u00a7\u00a8"+
+ "\u0005e\u0000\u0000\u00a8\u00a9\u0005n\u0000\u0000\u00a9$\u0001\u0000"+
+ "\u0000\u0000\u00aa\u00ab\u0005f\u0000\u0000\u00ab\u00ac\u0005i\u0000\u0000"+
+ "\u00ac&\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005e\u0000\u0000\u00ae\u00af"+
+ "\u0005l\u0000\u0000\u00af\u00b0\u0005i\u0000\u0000\u00b0\u00b1\u0005f"+
+ "\u0000\u0000\u00b1(\u0001\u0000\u0000\u0000\u00b2\u00b3\u0005e\u0000\u0000"+
+ "\u00b3\u00b4\u0005l\u0000\u0000\u00b4\u00b5\u0005s\u0000\u0000\u00b5\u00b6"+
+ "\u0005e\u0000\u0000\u00b6*\u0001\u0000\u0000\u0000\u00b7\u00b8\u0005w"+
+ "\u0000\u0000\u00b8\u00b9\u0005h\u0000\u0000\u00b9\u00ba\u0005i\u0000\u0000"+
+ "\u00ba\u00bb\u0005l\u0000\u0000\u00bb\u00bc\u0005e\u0000\u0000\u00bc,"+
+ "\u0001\u0000\u0000\u0000\u00bd\u00be\u0005d\u0000\u0000\u00be\u00bf\u0005"+
+ "o\u0000\u0000\u00bf.\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005o\u0000"+
+ "\u0000\u00c1\u00c2\u0005d\u0000\u0000\u00c20\u0001\u0000\u0000\u0000\u00c3"+
+ "\u00c4\u0005f\u0000\u0000\u00c4\u00c5\u0005o\u0000\u0000\u00c5\u00c6\u0005"+
+ "r\u0000\u0000\u00c62\u0001\u0000\u0000\u0000\u00c7\u00c8\u0005:\u0000"+
+ "\u0000\u00c84\u0001\u0000\u0000\u0000\u00c9\u00ca\u0005@\u0000\u0000\u00ca"+
+ "6\u0001\u0000\u0000\u0000\u00cb\u00cc\u0005#\u0000\u0000\u00cc8\u0001"+
+ "\u0000\u0000\u0000\u00cd\u00ce\u0005b\u0000\u0000\u00ce\u00cf\u0005o\u0000"+
+ "\u0000\u00cf\u00d0\u0005x\u0000\u0000\u00d0:\u0001\u0000\u0000\u0000\u00d1"+
+ "\u00d2\u0005v\u0000\u0000\u00d2\u00d3\u0005a\u0000\u0000\u00d3\u00d4\u0005"+
+ "l\u0000\u0000\u00d4<\u0001\u0000\u0000\u0000\u00d5\u00d6\u0005s\u0000"+
+ "\u0000\u00d6\u00d7\u0005t\u0000\u0000\u00d7\u00d8\u0005r\u0000\u0000\u00d8"+
+ ">\u0001\u0000\u0000\u0000\u00d9\u00da\u0005a\u0000\u0000\u00da\u00db\u0005"+
+ "r\u0000\u0000\u00db\u00dc\u0005r\u0000\u0000\u00dc\u00dd\u0005a\u0000"+
+ "\u0000\u00dd\u00de\u0005y\u0000\u0000\u00de@\u0001\u0000\u0000\u0000\u00df"+
+ "\u00e0\u0005s\u0000\u0000\u00e0\u00e1\u0005e\u0000\u0000\u00e1\u00e2\u0005"+
+ "x\u0000\u0000\u00e2\u00e3\u0005p\u0000\u0000\u00e3B\u0001\u0000\u0000"+
+ "\u0000\u00e4\u00e5\u0005_\u0000\u0000\u00e5D\u0001\u0000\u0000\u0000\u00e6"+
+ "\u00e7\u0005c\u0000\u0000\u00e7\u00e8\u0005a\u0000\u0000\u00e8\u00e9\u0005"+
+ "s\u0000\u0000\u00e9\u00ea\u0005e\u0000\u0000\u00eaF\u0001\u0000\u0000"+
+ "\u0000\u00eb\u00ec\u0005o\u0000\u0000\u00ec\u00ed\u0005f\u0000\u0000\u00ed"+
+ "H\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005e\u0000\u0000\u00ef\u00f0\u0005"+
+ "s\u0000\u0000\u00f0\u00f1\u0005a\u0000\u0000\u00f1\u00f2\u0005c\u0000"+
+ "\u0000\u00f2J\u0001\u0000\u0000\u0000\u00f3\u00f4\u0005|\u0000\u0000\u00f4"+
+ "L\u0001\u0000\u0000\u0000\u00f5\u00f6\u0005-\u0000\u0000\u00f6\u00f7\u0005"+
+ ">\u0000\u0000\u00f7N\u0001\u0000\u0000\u0000\u00f8\u00fa\u0007\u0000\u0000"+
+ "\u0000\u00f9\u00f8\u0001\u0000\u0000\u0000\u00fa\u00fb\u0001\u0000\u0000"+
+ "\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fb\u00fc\u0001\u0000\u0000"+
+ "\u0000\u00fc\u00fd\u0001\u0000\u0000\u0000\u00fd\u00fe\u0006\'\u0000\u0000"+
+ "\u00feP\u0001\u0000\u0000\u0000\u00ff\u0100\u0005/\u0000\u0000\u0100\u0101"+
+ "\u0005*\u0000\u0000\u0101\u0105\u0001\u0000\u0000\u0000\u0102\u0104\t"+
+ "\u0000\u0000\u0000\u0103\u0102\u0001\u0000\u0000\u0000\u0104\u0107\u0001"+
+ "\u0000\u0000\u0000\u0105\u0106\u0001\u0000\u0000\u0000\u0105\u0103\u0001"+
+ "\u0000\u0000\u0000\u0106\u0108\u0001\u0000\u0000\u0000\u0107\u0105\u0001"+
+ "\u0000\u0000\u0000\u0108\u0109\u0005*\u0000\u0000\u0109\u010a\u0005/\u0000"+
+ "\u0000\u010a\u010b\u0001\u0000\u0000\u0000\u010b\u010c\u0006(\u0000\u0000"+
+ "\u010cR\u0001\u0000\u0000\u0000\u010d\u010e\u0005/\u0000\u0000\u010e\u010f"+
+ "\u0005/\u0000\u0000\u010f\u0113\u0001\u0000\u0000\u0000\u0110\u0112\b"+
+ "\u0001\u0000\u0000\u0111\u0110\u0001\u0000\u0000\u0000\u0112\u0115\u0001"+
+ "\u0000\u0000\u0000\u0113\u0111\u0001\u0000\u0000\u0000\u0113\u0114\u0001"+
+ "\u0000\u0000\u0000\u0114\u0116\u0001\u0000\u0000\u0000\u0115\u0113\u0001"+
+ "\u0000\u0000\u0000\u0116\u0117\u0006)\u0000\u0000\u0117T\u0001\u0000\u0000"+
+ "\u0000\u0118\u0119\u0007\u0002\u0000\u0000\u0119V\u0001\u0000\u0000\u0000"+
+ "\u011a\u011b\u0007\u0003\u0000\u0000\u011bX\u0001\u0000\u0000\u0000\u011c"+
+ "\u011d\b\u0004\u0000\u0000\u011dZ\u0001\u0000\u0000\u0000\u011e\u011f"+
+ "\u0005-\u0000\u0000\u011f\\\u0001\u0000\u0000\u0000\u0120\u0122\u0007"+
+ "\u0005\u0000\u0000\u0121\u0120\u0001\u0000\u0000\u0000\u0122\u0123\u0001"+
+ "\u0000\u0000\u0000\u0123\u0121\u0001\u0000\u0000\u0000\u0123\u0124\u0001"+
+ "\u0000\u0000\u0000\u0124^\u0001\u0000\u0000\u0000\u0125\u0129\u0007\u0006"+
+ "\u0000\u0000\u0126\u0128\u0007\u0007\u0000\u0000\u0127\u0126\u0001\u0000"+
+ "\u0000\u0000\u0128\u012b\u0001\u0000\u0000\u0000\u0129\u0127\u0001\u0000"+
+ "\u0000\u0000\u0129\u012a\u0001\u0000\u0000\u0000\u012a`\u0001\u0000\u0000"+
+ "\u0000\u012b\u0129\u0001\u0000\u0000\u0000\u012c\u0130\u0007\b\u0000\u0000"+
+ "\u012d\u012f\u0007\u0007\u0000\u0000\u012e\u012d\u0001\u0000\u0000\u0000"+
+ "\u012f\u0132\u0001\u0000\u0000\u0000\u0130\u012e\u0001\u0000\u0000\u0000"+
+ "\u0130\u0131\u0001\u0000\u0000\u0000\u0131b\u0001\u0000\u0000\u0000\u0132"+
+ "\u0130\u0001\u0000\u0000\u0000\u0133\u0134\u0005\'\u0000\u0000\u0134\u0135"+
+ "\u0003Y,\u0000\u0135\u0136\u0005\'\u0000\u0000\u0136d\u0001\u0000\u0000"+
+ "\u0000\u0137\u013b\u0005\"\u0000\u0000\u0138\u013a\u0003Y,\u0000\u0139"+
+ "\u0138\u0001\u0000\u0000\u0000\u013a\u013d\u0001\u0000\u0000\u0000\u013b"+
+ "\u0139\u0001\u0000\u0000\u0000\u013b\u013c\u0001\u0000\u0000\u0000\u013c"+
+ "\u013e\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000\u013e"+
+ "\u013f\u0005\"\u0000\u0000\u013ff\u0001\u0000\u0000\u0000\u0140\u0149"+
+ "\u00050\u0000\u0000\u0141\u0145\u0003U*\u0000\u0142\u0144\u0003W+\u0000"+
+ "\u0143\u0142\u0001\u0000\u0000\u0000\u0144\u0147\u0001\u0000\u0000\u0000"+
+ "\u0145\u0143\u0001\u0000\u0000\u0000\u0145\u0146\u0001\u0000\u0000\u0000"+
+ "\u0146\u0149\u0001\u0000\u0000\u0000\u0147\u0145\u0001\u0000\u0000\u0000"+
+ "\u0148\u0140\u0001\u0000\u0000\u0000\u0148\u0141\u0001\u0000\u0000\u0000"+
+ "\u0149h\u0001\u0000\u0000\u0000\u014a\u014c\u0007\u0007\u0000\u0000\u014b"+
+ "\u014a\u0001\u0000\u0000\u0000\u014c\u014d\u0001\u0000\u0000\u0000\u014d"+
+ "\u014b\u0001\u0000\u0000\u0000\u014d\u014e\u0001\u0000\u0000\u0000\u014e"+
+ "j\u0001\u0000\u0000\u0000\u000b\u0000\u00fb\u0105\u0113\u0123\u0129\u0130"+
+ "\u013b\u0145\u0148\u014d\u0001\u0006\u0000\u0000";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.tokens b/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.tokens
index ae67504..479a7ae 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.tokens
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaLexer.tokens
@@ -37,66 +37,54 @@ T__35=36
T__36=37
T__37=38
T__38=39
-T__39=40
-T__40=41
-T__41=42
-T__42=43
-T__43=44
-T__44=45
-T__45=46
-WS=47
-COMMENT=48
-LINE_COMMENT=49
+WS=40
+COMMENT=41
+LINE_COMMENT=42
+MINUS=43
+INFIX=44
+UIDENT=45
+LIDENT=46
+CHAR_LITERAL=47
+STRING_LITERAL=48
+DECIMAL_LITERAL=49
WORD=50
-INFIX=51
-UIDENT=52
-LIDENT=53
-CHAR_LITERAL=54
-STRING_LITERAL=55
-DECIMAL_LITERAL=56
-'import'=1
-';'=2
-'var'=3
-'public'=4
-','=5
-'='=6
-'fun'=7
-'('=8
-')'=9
-'{'=10
-'}'=11
-'infix'=12
-'infixl'=13
-'infixr'=14
-'at'=15
-'before'=16
-'after'=17
-'-'=18
-'['=19
-']'=20
-'true'=21
-'false'=22
-'skip'=23
-'if'=24
-'then'=25
-'fi'=26
-'elif'=27
-'else'=28
-'while'=29
-'do'=30
-'od'=31
-'for'=32
-'|'=33
-':'=34
-'@'=35
-'#'=36
-'box'=37
-'val'=38
-'str'=39
-'array'=40
-'sexp'=41
-'_'=42
-'case'=43
-'of'=44
-'esac'=45
-'->'=46
+'var'=1
+'public'=2
+','=3
+';'=4
+'='=5
+'fun'=6
+'('=7
+')'=8
+'{'=9
+'}'=10
+'['=11
+']'=12
+'true'=13
+'false'=14
+'infix'=15
+'skip'=16
+'if'=17
+'then'=18
+'fi'=19
+'elif'=20
+'else'=21
+'while'=22
+'do'=23
+'od'=24
+'for'=25
+':'=26
+'@'=27
+'#'=28
+'box'=29
+'val'=30
+'str'=31
+'array'=32
+'sexp'=33
+'_'=34
+'case'=35
+'of'=36
+'esac'=37
+'|'=38
+'->'=39
+'-'=43
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaListener.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaListener.java
index e326e5e..c584a01 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaListener.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaListener.java
@@ -17,16 +17,6 @@ public interface LamaListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitLama(LamaParser.LamaContext ctx);
- /**
- * Enter a parse tree produced by {@link LamaParser#import_expression}.
- * @param ctx the parse tree
- */
- void enterImport_expression(LamaParser.Import_expressionContext ctx);
- /**
- * Exit a parse tree produced by {@link LamaParser#import_expression}.
- * @param ctx the parse tree
- */
- void exitImport_expression(LamaParser.Import_expressionContext ctx);
/**
* Enter a parse tree produced by {@link LamaParser#scope_expression}.
* @param ctx the parse tree
@@ -107,46 +97,6 @@ public interface LamaListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitFunction_body(LamaParser.Function_bodyContext ctx);
- /**
- * Enter a parse tree produced by {@link LamaParser#infix_definition}.
- * @param ctx the parse tree
- */
- void enterInfix_definition(LamaParser.Infix_definitionContext ctx);
- /**
- * Exit a parse tree produced by {@link LamaParser#infix_definition}.
- * @param ctx the parse tree
- */
- void exitInfix_definition(LamaParser.Infix_definitionContext ctx);
- /**
- * Enter a parse tree produced by {@link LamaParser#infix_head}.
- * @param ctx the parse tree
- */
- void enterInfix_head(LamaParser.Infix_headContext ctx);
- /**
- * Exit a parse tree produced by {@link LamaParser#infix_head}.
- * @param ctx the parse tree
- */
- void exitInfix_head(LamaParser.Infix_headContext ctx);
- /**
- * Enter a parse tree produced by {@link LamaParser#infixity}.
- * @param ctx the parse tree
- */
- void enterInfixity(LamaParser.InfixityContext ctx);
- /**
- * Exit a parse tree produced by {@link LamaParser#infixity}.
- * @param ctx the parse tree
- */
- void exitInfixity(LamaParser.InfixityContext ctx);
- /**
- * Enter a parse tree produced by {@link LamaParser#level}.
- * @param ctx the parse tree
- */
- void enterLevel(LamaParser.LevelContext ctx);
- /**
- * Exit a parse tree produced by {@link LamaParser#level}.
- * @param ctx the parse tree
- */
- void exitLevel(LamaParser.LevelContext ctx);
/**
* Enter a parse tree produced by {@link LamaParser#expression}.
* @param ctx the parse tree
@@ -387,4 +337,14 @@ public interface LamaListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitCase_branch(LamaParser.Case_branchContext ctx);
+ /**
+ * Enter a parse tree produced by {@link LamaParser#any_infix}.
+ * @param ctx the parse tree
+ */
+ void enterAny_infix(LamaParser.Any_infixContext ctx);
+ /**
+ * Exit a parse tree produced by {@link LamaParser#any_infix}.
+ * @param ctx the parse tree
+ */
+ void exitAny_infix(LamaParser.Any_infixContext ctx);
}
\ No newline at end of file
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java
index 8a834a9..a5159cb 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java
@@ -58,6 +58,28 @@ public class LamaNodeFactory {
// this.allFunctions = new HashMap<>();
}
+ // ---
+
+ public void enterScope() {
+ // TODO
+ }
+
+ public void exitScope() {
+ // TODO
+ }
+
+ // ---
+
+ public LamaExpressionNode createStringNode(String value) {
+
+ }
+
+ public LamaExpressionNode createConstNode(long value) {
+
+ }
+
+ // ---
+
public LamaExpressionNode getRootExpr() {
// TODO
return null;
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaParser.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaParser.java
index a97dffc..31a2b88 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaParser.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaParser.java
@@ -3,6 +3,7 @@ package org.programsnail.truffle_lama.parser;
// DO NOT MODIFY - generated from Lama.g4
+import java.util.Optional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -35,45 +36,41 @@ public class LamaParser extends Parser {
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
- T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
- T__45=46, WS=47, COMMENT=48, LINE_COMMENT=49, WORD=50, INFIX=51, UIDENT=52,
- LIDENT=53, CHAR_LITERAL=54, STRING_LITERAL=55, DECIMAL_LITERAL=56;
+ T__38=39, WS=40, COMMENT=41, LINE_COMMENT=42, MINUS=43, INFIX=44, UIDENT=45,
+ LIDENT=46, CHAR_LITERAL=47, STRING_LITERAL=48, DECIMAL_LITERAL=49, WORD=50;
public static final int
- RULE_lama = 0, RULE_import_expression = 1, RULE_scope_expression = 2,
- RULE_definition = 3, RULE_variable_definition = 4, RULE_variable_definition_sequence = 5,
- RULE_variable_definition_item = 6, RULE_function_definition = 7, RULE_function_arguments = 8,
- RULE_function_body = 9, RULE_infix_definition = 10, RULE_infix_head = 11,
- RULE_infixity = 12, RULE_level = 13, RULE_expression = 14, RULE_basic_expression = 15,
- RULE_binary_expression = 16, RULE_postfix_expression = 17, RULE_postfix = 18,
- RULE_primary = 19, RULE_array_expression = 20, RULE_list_expression = 21,
- RULE_s_expression = 22, RULE_if_expression = 23, RULE_else_part = 24,
- RULE_while_do_expression = 25, RULE_do_while_expression = 26, RULE_for_expression = 27,
- RULE_pattern = 28, RULE_cons_pattern = 29, RULE_simple_pattern = 30, RULE_wildcard_pattern = 31,
- RULE_s_expr_pattern = 32, RULE_array_pattern = 33, RULE_list_pattern = 34,
- RULE_case_expression = 35, RULE_case_branches = 36, RULE_case_branch = 37;
+ RULE_lama = 0, RULE_scope_expression = 1, RULE_definition = 2, RULE_variable_definition = 3,
+ RULE_variable_definition_sequence = 4, RULE_variable_definition_item = 5,
+ RULE_function_definition = 6, RULE_function_arguments = 7, RULE_function_body = 8,
+ RULE_expression = 9, RULE_basic_expression = 10, RULE_binary_expression = 11,
+ RULE_postfix_expression = 12, RULE_postfix = 13, RULE_primary = 14, RULE_array_expression = 15,
+ RULE_list_expression = 16, RULE_s_expression = 17, RULE_if_expression = 18,
+ RULE_else_part = 19, RULE_while_do_expression = 20, RULE_do_while_expression = 21,
+ RULE_for_expression = 22, RULE_pattern = 23, RULE_cons_pattern = 24, RULE_simple_pattern = 25,
+ RULE_wildcard_pattern = 26, RULE_s_expr_pattern = 27, RULE_array_pattern = 28,
+ RULE_list_pattern = 29, RULE_case_expression = 30, RULE_case_branches = 31,
+ RULE_case_branch = 32, RULE_any_infix = 33;
private static String[] makeRuleNames() {
return new String[] {
- "lama", "import_expression", "scope_expression", "definition", "variable_definition",
- "variable_definition_sequence", "variable_definition_item", "function_definition",
- "function_arguments", "function_body", "infix_definition", "infix_head",
- "infixity", "level", "expression", "basic_expression", "binary_expression",
+ "lama", "scope_expression", "definition", "variable_definition", "variable_definition_sequence",
+ "variable_definition_item", "function_definition", "function_arguments",
+ "function_body", "expression", "basic_expression", "binary_expression",
"postfix_expression", "postfix", "primary", "array_expression", "list_expression",
"s_expression", "if_expression", "else_part", "while_do_expression",
"do_while_expression", "for_expression", "pattern", "cons_pattern", "simple_pattern",
"wildcard_pattern", "s_expr_pattern", "array_pattern", "list_pattern",
- "case_expression", "case_branches", "case_branch"
+ "case_expression", "case_branches", "case_branch", "any_infix"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
- null, "'import'", "';'", "'var'", "'public'", "','", "'='", "'fun'",
- "'('", "')'", "'{'", "'}'", "'infix'", "'infixl'", "'infixr'", "'at'",
- "'before'", "'after'", "'-'", "'['", "']'", "'true'", "'false'", "'skip'",
+ null, "'var'", "'public'", "','", "';'", "'='", "'fun'", "'('", "')'",
+ "'{'", "'}'", "'['", "']'", "'true'", "'false'", "'infix'", "'skip'",
"'if'", "'then'", "'fi'", "'elif'", "'else'", "'while'", "'do'", "'od'",
- "'for'", "'|'", "':'", "'@'", "'#'", "'box'", "'val'", "'str'", "'array'",
- "'sexp'", "'_'", "'case'", "'of'", "'esac'", "'->'"
+ "'for'", "':'", "'@'", "'#'", "'box'", "'val'", "'str'", "'array'", "'sexp'",
+ "'_'", "'case'", "'of'", "'esac'", "'|'", "'->'", null, null, null, "'-'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -82,9 +79,9 @@ public class LamaParser extends Parser {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, "WS",
- "COMMENT", "LINE_COMMENT", "WORD", "INFIX", "UIDENT", "LIDENT", "CHAR_LITERAL",
- "STRING_LITERAL", "DECIMAL_LITERAL"
+ null, null, null, null, "WS", "COMMENT", "LINE_COMMENT", "MINUS", "INFIX",
+ "UIDENT", "LIDENT", "CHAR_LITERAL", "STRING_LITERAL", "DECIMAL_LITERAL",
+ "WORD"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -181,16 +178,12 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class LamaContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Scope_expressionContext scope_expression;
public Scope_expressionContext scope_expression() {
return getRuleContext(Scope_expressionContext.class,0);
}
public TerminalNode EOF() { return getToken(LamaParser.EOF, 0); }
- public List import_expression() {
- return getRuleContexts(Import_expressionContext.class);
- }
- public Import_expressionContext import_expression(int i) {
- return getRuleContext(Import_expressionContext.class,i);
- }
public LamaContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -213,27 +206,13 @@ public class LamaParser extends Parser {
public final LamaContext lama() throws RecognitionException {
LamaContext _localctx = new LamaContext(_ctx, getState());
enterRule(_localctx, 0, RULE_lama);
- int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(79);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==T__0) {
- {
- {
- setState(76);
- import_expression();
- }
- }
- setState(81);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- setState(82);
- scope_expression();
- setState(83);
+ setState(68);
+ ((LamaContext)_localctx).scope_expression = scope_expression();
+ ((LamaContext)_localctx).result = ((LamaContext)_localctx).scope_expression.result;
+ setState(70);
match(EOF);
}
}
@@ -248,55 +227,10 @@ public class LamaParser extends Parser {
return _localctx;
}
- @SuppressWarnings("CheckReturnValue")
- public static class Import_expressionContext extends ParserRuleContext {
- public TerminalNode UIDENT() { return getToken(LamaParser.UIDENT, 0); }
- public Import_expressionContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_import_expression; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).enterImport_expression(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).exitImport_expression(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof LamaVisitor ) return ((LamaVisitor extends T>)visitor).visitImport_expression(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Import_expressionContext import_expression() throws RecognitionException {
- Import_expressionContext _localctx = new Import_expressionContext(_ctx, getState());
- enterRule(_localctx, 2, RULE_import_expression);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(85);
- match(T__0);
- setState(86);
- match(UIDENT);
- setState(87);
- match(T__1);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
@SuppressWarnings("CheckReturnValue")
public static class Scope_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
public List definition() {
return getRuleContexts(DefinitionContext.class);
}
@@ -327,42 +261,43 @@ public class LamaParser extends Parser {
public final Scope_expressionContext scope_expression() throws RecognitionException {
Scope_expressionContext _localctx = new Scope_expressionContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_scope_expression);
+ enterRule(_localctx, 2, RULE_scope_expression);
try {
int _alt;
- setState(98);
+ setState(90);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(90);
+ setState(72);
+ definition();
+ ((Scope_expressionContext)_localctx).result = ((Scope_expressionContext)_localctx).expression.result;
+ setState(79);
_errHandler.sync(this);
- _alt = 1;
- do {
- switch (_alt) {
- case 1:
+ _alt = getInterpreter().adaptivePredict(_input,0,_ctx);
+ while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
{
{
- setState(89);
+ setState(74);
definition();
+ ((Scope_expressionContext)_localctx).result = factory.createSeqNode(_localctx.result, ((Scope_expressionContext)_localctx).expression.result);
}
- }
- break;
- default:
- throw new NoViableAltException(this);
+ }
}
- setState(92);
+ setState(81);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,1,_ctx);
- } while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER );
- setState(95);
+ _alt = getInterpreter().adaptivePredict(_input,0,_ctx);
+ }
+ setState(85);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
case 1:
{
- setState(94);
- expression();
+ setState(82);
+ ((Scope_expressionContext)_localctx).expression = expression();
+ ((Scope_expressionContext)_localctx).result = factory.createSeqNode(_localctx.result, ((Scope_expressionContext)_localctx).expression.result);
}
break;
}
@@ -371,8 +306,9 @@ public class LamaParser extends Parser {
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(97);
- expression();
+ setState(87);
+ ((Scope_expressionContext)_localctx).expression = expression();
+ ((Scope_expressionContext)_localctx).result = ((Scope_expressionContext)_localctx).expression.result;
}
break;
}
@@ -390,15 +326,15 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class DefinitionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Variable_definitionContext variable_definition;
+ public Function_definitionContext function_definition;
public Variable_definitionContext variable_definition() {
return getRuleContext(Variable_definitionContext.class,0);
}
public Function_definitionContext function_definition() {
return getRuleContext(Function_definitionContext.class,0);
}
- public Infix_definitionContext infix_definition() {
- return getRuleContext(Infix_definitionContext.class,0);
- }
public DefinitionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -420,30 +356,25 @@ public class LamaParser extends Parser {
public final DefinitionContext definition() throws RecognitionException {
DefinitionContext _localctx = new DefinitionContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_definition);
+ enterRule(_localctx, 4, RULE_definition);
try {
- setState(103);
+ setState(98);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(100);
- variable_definition();
+ setState(92);
+ ((DefinitionContext)_localctx).variable_definition = variable_definition();
+ ((DefinitionContext)_localctx).result = ((DefinitionContext)_localctx).variable_definition.result;
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(101);
- function_definition();
- }
- break;
- case 3:
- enterOuterAlt(_localctx, 3);
- {
- setState(102);
- infix_definition();
+ setState(95);
+ ((DefinitionContext)_localctx).function_definition = function_definition();
+ ((DefinitionContext)_localctx).result = ((DefinitionContext)_localctx).function_definition.result;
}
break;
}
@@ -461,6 +392,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Variable_definitionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Variable_definition_sequenceContext variable_definition_sequence;
public Variable_definition_sequenceContext variable_definition_sequence() {
return getRuleContext(Variable_definition_sequenceContext.class,0);
}
@@ -485,23 +418,33 @@ public class LamaParser extends Parser {
public final Variable_definitionContext variable_definition() throws RecognitionException {
Variable_definitionContext _localctx = new Variable_definitionContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_variable_definition);
- int _la;
+ enterRule(_localctx, 6, RULE_variable_definition);
try {
enterOuterAlt(_localctx, 1);
{
- setState(105);
- _la = _input.LA(1);
- if ( !(_la==T__2 || _la==T__3) ) {
- _errHandler.recoverInline(this);
- }
- else {
- if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
- _errHandler.reportMatch(this);
- consume();
+ boolean is_public = false;
+ setState(104);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case T__0:
+ {
+ setState(101);
+ match(T__0);
+ }
+ break;
+ case T__1:
+ {
+ setState(102);
+ match(T__1);
+ is_public = true;
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
}
setState(106);
- variable_definition_sequence();
+ ((Variable_definitionContext)_localctx).variable_definition_sequence = variable_definition_sequence(is_public);
+ ((Variable_definitionContext)_localctx).result = ((Variable_definitionContext)_localctx).variable_definition_sequence.result;
}
}
catch (RecognitionException re) {
@@ -517,14 +460,19 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Variable_definition_sequenceContext extends ParserRuleContext {
+ public boolean is_public;
+ public LamaExpressionNode result;
+ public Variable_definition_itemContext variable_definition_item;
public List variable_definition_item() {
return getRuleContexts(Variable_definition_itemContext.class);
}
public Variable_definition_itemContext variable_definition_item(int i) {
return getRuleContext(Variable_definition_itemContext.class,i);
}
- public Variable_definition_sequenceContext(ParserRuleContext parent, int invokingState) {
+ public Variable_definition_sequenceContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); }
+ public Variable_definition_sequenceContext(ParserRuleContext parent, int invokingState, boolean is_public) {
super(parent, invokingState);
+ this.is_public = is_public;
}
@Override public int getRuleIndex() { return RULE_variable_definition_sequence; }
@Override
@@ -542,33 +490,35 @@ public class LamaParser extends Parser {
}
}
- public final Variable_definition_sequenceContext variable_definition_sequence() throws RecognitionException {
- Variable_definition_sequenceContext _localctx = new Variable_definition_sequenceContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_variable_definition_sequence);
+ public final Variable_definition_sequenceContext variable_definition_sequence(boolean is_public) throws RecognitionException {
+ Variable_definition_sequenceContext _localctx = new Variable_definition_sequenceContext(_ctx, getState(), is_public);
+ enterRule(_localctx, 8, RULE_variable_definition_sequence);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(108);
- variable_definition_item();
- setState(113);
+ setState(109);
+ ((Variable_definition_sequenceContext)_localctx).variable_definition_item = variable_definition_item();
+ ((Variable_definition_sequenceContext)_localctx).result = factory.addVarNode(((Variable_definition_sequenceContext)_localctx).variable_definition_item.name, ((Variable_definition_sequenceContext)_localctx).variable_definition_item.expr);
+ setState(117);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(109);
- match(T__4);
- setState(110);
- variable_definition_item();
+ setState(111);
+ match(T__2);
+ setState(112);
+ ((Variable_definition_sequenceContext)_localctx).variable_definition_item = variable_definition_item();
+ ((Variable_definition_sequenceContext)_localctx).result = factory.addSeqNode(_localctx.result, factory.addVarNode(((Variable_definition_sequenceContext)_localctx).variable_definition_item.name, ((Variable_definition_sequenceContext)_localctx).variable_definition_item.expr));
}
}
- setState(115);
+ setState(119);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(116);
- match(T__1);
+ setState(120);
+ match(T__3);
}
}
catch (RecognitionException re) {
@@ -584,6 +534,10 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Variable_definition_itemContext extends ParserRuleContext {
+ public TruffleString name;
+ public Optional expr;
+ public Token LIDENT;
+ public Basic_expressionContext basic_expression;
public TerminalNode LIDENT() { return getToken(LamaParser.LIDENT, 0); }
public Basic_expressionContext basic_expression() {
return getRuleContext(Basic_expressionContext.class,0);
@@ -609,22 +563,25 @@ public class LamaParser extends Parser {
public final Variable_definition_itemContext variable_definition_item() throws RecognitionException {
Variable_definition_itemContext _localctx = new Variable_definition_itemContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_variable_definition_item);
+ enterRule(_localctx, 10, RULE_variable_definition_item);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(118);
- match(LIDENT);
- setState(121);
+ ((Variable_definition_itemContext)_localctx).expr = Optional.empty();
+ setState(123);
+ ((Variable_definition_itemContext)_localctx).LIDENT = match(LIDENT);
+ ((Variable_definition_itemContext)_localctx).name = ((Variable_definition_itemContext)_localctx).LIDENT;
+ setState(129);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__5) {
+ if (_la==T__4) {
{
- setState(119);
- match(T__5);
- setState(120);
- basic_expression();
+ setState(125);
+ match(T__4);
+ setState(126);
+ ((Variable_definition_itemContext)_localctx).basic_expression = basic_expression();
+ ((Variable_definition_itemContext)_localctx).expr = Optional.of(((Variable_definition_itemContext)_localctx).basic_expression.result);
}
}
@@ -643,6 +600,10 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Function_definitionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Token LIDENT;
+ public Function_argumentsContext function_arguments;
+ public Function_bodyContext function_body;
public TerminalNode LIDENT() { return getToken(LamaParser.LIDENT, 0); }
public Function_bodyContext function_body() {
return getRuleContext(Function_bodyContext.class,0);
@@ -671,41 +632,44 @@ public class LamaParser extends Parser {
public final Function_definitionContext function_definition() throws RecognitionException {
Function_definitionContext _localctx = new Function_definitionContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_function_definition);
+ enterRule(_localctx, 12, RULE_function_definition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(124);
+ boolean is_public = false;
+ setState(134);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__3) {
+ if (_la==T__1) {
{
- setState(123);
- match(T__3);
+ setState(132);
+ match(T__1);
+ is_public = true;
}
}
- setState(126);
+ setState(136);
+ match(T__5);
+ setState(137);
+ ((Function_definitionContext)_localctx).LIDENT = match(LIDENT);
+ setState(138);
match(T__6);
- setState(127);
- match(LIDENT);
- setState(128);
- match(T__7);
- setState(130);
+ setState(140);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==LIDENT) {
{
- setState(129);
- function_arguments();
+ setState(139);
+ ((Function_definitionContext)_localctx).function_arguments = function_arguments();
}
}
- setState(132);
- match(T__8);
- setState(133);
- function_body();
+ setState(142);
+ match(T__7);
+ setState(143);
+ ((Function_definitionContext)_localctx).function_body = function_body();
+ ((Function_definitionContext)_localctx).result = factory.addFunctionDefinition(((Function_definitionContext)_localctx).LIDENT, ((Function_definitionContext)_localctx).function_arguments.args, ((Function_definitionContext)_localctx).function_body.result);
}
}
catch (RecognitionException re) {
@@ -721,6 +685,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Function_argumentsContext extends ParserRuleContext {
+ public List args;
+ public Token LIDENT;
public List LIDENT() { return getTokens(LamaParser.LIDENT); }
public TerminalNode LIDENT(int i) {
return getToken(LamaParser.LIDENT, i);
@@ -746,26 +712,29 @@ public class LamaParser extends Parser {
public final Function_argumentsContext function_arguments() throws RecognitionException {
Function_argumentsContext _localctx = new Function_argumentsContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_function_arguments);
+ enterRule(_localctx, 14, RULE_function_arguments);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(135);
- match(LIDENT);
- setState(140);
+ ((Function_argumentsContext)_localctx).args = new ArrayList();
+ setState(147);
+ ((Function_argumentsContext)_localctx).LIDENT = match(LIDENT);
+ _localctx.args.addLast(((Function_argumentsContext)_localctx).LIDENT);
+ setState(154);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(136);
- match(T__4);
- setState(137);
- match(LIDENT);
+ setState(149);
+ match(T__2);
+ setState(150);
+ ((Function_argumentsContext)_localctx).LIDENT = match(LIDENT);
+ _localctx.args.addLast(((Function_argumentsContext)_localctx).LIDENT);
}
}
- setState(142);
+ setState(156);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -784,6 +753,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Function_bodyContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Scope_expressionContext scope_expression;
public Scope_expressionContext scope_expression() {
return getRuleContext(Scope_expressionContext.class,0);
}
@@ -808,244 +779,17 @@ public class LamaParser extends Parser {
public final Function_bodyContext function_body() throws RecognitionException {
Function_bodyContext _localctx = new Function_bodyContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_function_body);
+ enterRule(_localctx, 16, RULE_function_body);
try {
enterOuterAlt(_localctx, 1);
{
- setState(143);
- match(T__9);
- setState(144);
- scope_expression();
- setState(145);
- match(T__10);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- @SuppressWarnings("CheckReturnValue")
- public static class Infix_definitionContext extends ParserRuleContext {
- public Infix_headContext infix_head() {
- return getRuleContext(Infix_headContext.class,0);
- }
- public Function_argumentsContext function_arguments() {
- return getRuleContext(Function_argumentsContext.class,0);
- }
- public Function_bodyContext function_body() {
- return getRuleContext(Function_bodyContext.class,0);
- }
- public Infix_definitionContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_infix_definition; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).enterInfix_definition(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).exitInfix_definition(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof LamaVisitor ) return ((LamaVisitor extends T>)visitor).visitInfix_definition(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Infix_definitionContext infix_definition() throws RecognitionException {
- Infix_definitionContext _localctx = new Infix_definitionContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_infix_definition);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(147);
- infix_head();
- setState(148);
- match(T__7);
- setState(149);
- function_arguments();
- setState(150);
- match(T__8);
- setState(151);
- function_body();
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- @SuppressWarnings("CheckReturnValue")
- public static class Infix_headContext extends ParserRuleContext {
- public InfixityContext infixity() {
- return getRuleContext(InfixityContext.class,0);
- }
- public TerminalNode INFIX() { return getToken(LamaParser.INFIX, 0); }
- public LevelContext level() {
- return getRuleContext(LevelContext.class,0);
- }
- public Infix_headContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_infix_head; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).enterInfix_head(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).exitInfix_head(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof LamaVisitor ) return ((LamaVisitor extends T>)visitor).visitInfix_head(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Infix_headContext infix_head() throws RecognitionException {
- Infix_headContext _localctx = new Infix_headContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_infix_head);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(154);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==T__3) {
- {
- setState(153);
- match(T__3);
- }
- }
-
- setState(156);
- infixity();
setState(157);
- match(INFIX);
+ match(T__8);
setState(158);
- level();
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- @SuppressWarnings("CheckReturnValue")
- public static class InfixityContext extends ParserRuleContext {
- public InfixityContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_infixity; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).enterInfixity(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).exitInfixity(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof LamaVisitor ) return ((LamaVisitor extends T>)visitor).visitInfixity(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final InfixityContext infixity() throws RecognitionException {
- InfixityContext _localctx = new InfixityContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_infixity);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
+ ((Function_bodyContext)_localctx).scope_expression = scope_expression();
+ ((Function_bodyContext)_localctx).result = ((Function_bodyContext)_localctx).scope_expression.result;
setState(160);
- _la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 28672L) != 0)) ) {
- _errHandler.recoverInline(this);
- }
- else {
- if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
- _errHandler.reportMatch(this);
- consume();
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- @SuppressWarnings("CheckReturnValue")
- public static class LevelContext extends ParserRuleContext {
- public TerminalNode INFIX() { return getToken(LamaParser.INFIX, 0); }
- public LevelContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_level; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).enterLevel(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof LamaListener ) ((LamaListener)listener).exitLevel(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof LamaVisitor ) return ((LamaVisitor extends T>)visitor).visitLevel(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final LevelContext level() throws RecognitionException {
- LevelContext _localctx = new LevelContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_level);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(162);
- _la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 229376L) != 0)) ) {
- _errHandler.recoverInline(this);
- }
- else {
- if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
- _errHandler.reportMatch(this);
- consume();
- }
- setState(163);
- match(INFIX);
+ match(T__9);
}
}
catch (RecognitionException re) {
@@ -1062,6 +806,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class ExpressionContext extends ParserRuleContext {
public LamaExpressionNode result;
+ public Basic_expressionContext basic_expression;
+ public ExpressionContext expression;
public Basic_expressionContext basic_expression() {
return getRuleContext(Basic_expressionContext.class,0);
}
@@ -1089,22 +835,24 @@ public class LamaParser extends Parser {
public final ExpressionContext expression() throws RecognitionException {
ExpressionContext _localctx = new ExpressionContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_expression);
+ enterRule(_localctx, 18, RULE_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(165);
- basic_expression();
+ setState(162);
+ ((ExpressionContext)_localctx).basic_expression = basic_expression();
+ ((ExpressionContext)_localctx).result = ((ExpressionContext)_localctx).basic_expression.result;
setState(168);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__1) {
+ if (_la==T__3) {
{
- setState(166);
- match(T__1);
- setState(167);
- expression();
+ setState(164);
+ match(T__3);
+ setState(165);
+ ((ExpressionContext)_localctx).expression = expression();
+ ((ExpressionContext)_localctx).result = factory.createSeqNode(_localctx.result, ((ExpressionContext)_localctx).expression.result);
}
}
@@ -1124,6 +872,7 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Basic_expressionContext extends ParserRuleContext {
public LamaExpressionNode result;
+ public Binary_expressionContext binary_expression;
public Binary_expressionContext binary_expression() {
return getRuleContext(Binary_expressionContext.class,0);
}
@@ -1148,12 +897,13 @@ public class LamaParser extends Parser {
public final Basic_expressionContext basic_expression() throws RecognitionException {
Basic_expressionContext _localctx = new Basic_expressionContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_basic_expression);
+ enterRule(_localctx, 20, RULE_basic_expression);
try {
enterOuterAlt(_localctx, 1);
{
setState(170);
- binary_expression();
+ ((Basic_expressionContext)_localctx).binary_expression = binary_expression();
+ ((Basic_expressionContext)_localctx).result = ((Basic_expressionContext)_localctx).binary_expression.result;
}
}
catch (RecognitionException re) {
@@ -1170,15 +920,19 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Binary_expressionContext extends ParserRuleContext {
public LamaExpressionNode result;
+ public Postfix_expressionContext postfix_expression;
+ public Any_infixContext any_infix;
public List postfix_expression() {
return getRuleContexts(Postfix_expressionContext.class);
}
public Postfix_expressionContext postfix_expression(int i) {
return getRuleContext(Postfix_expressionContext.class,i);
}
- public List INFIX() { return getTokens(LamaParser.INFIX); }
- public TerminalNode INFIX(int i) {
- return getToken(LamaParser.INFIX, i);
+ public List any_infix() {
+ return getRuleContexts(Any_infixContext.class);
+ }
+ public Any_infixContext any_infix(int i) {
+ return getRuleContext(Any_infixContext.class,i);
}
public Binary_expressionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -1201,26 +955,28 @@ public class LamaParser extends Parser {
public final Binary_expressionContext binary_expression() throws RecognitionException {
Binary_expressionContext _localctx = new Binary_expressionContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_binary_expression);
+ enterRule(_localctx, 22, RULE_binary_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(172);
- postfix_expression();
- setState(177);
+ setState(173);
+ ((Binary_expressionContext)_localctx).postfix_expression = postfix_expression();
+ ((Binary_expressionContext)_localctx).result = ((Binary_expressionContext)_localctx).postfix_expression.result;
+ setState(181);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==INFIX) {
+ while (_la==MINUS || _la==INFIX) {
{
{
- setState(173);
- match(INFIX);
- setState(174);
- postfix_expression();
+ setState(175);
+ ((Binary_expressionContext)_localctx).any_infix = any_infix();
+ setState(176);
+ ((Binary_expressionContext)_localctx).postfix_expression = postfix_expression();
+ ((Binary_expressionContext)_localctx).result = factory.createBinopNode(((Binary_expressionContext)_localctx).any_infix.result, _localctx.result, ((Binary_expressionContext)_localctx).postfix_expression.result);
}
}
- setState(179);
+ setState(183);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1240,9 +996,12 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Postfix_expressionContext extends ParserRuleContext {
public LamaExpressionNode result;
+ public PrimaryContext primary;
+ public PostfixContext postfix;
public PrimaryContext primary() {
return getRuleContext(PrimaryContext.class,0);
}
+ public TerminalNode MINUS() { return getToken(LamaParser.MINUS, 0); }
public List postfix() {
return getRuleContexts(PostfixContext.class);
}
@@ -1270,34 +1029,44 @@ public class LamaParser extends Parser {
public final Postfix_expressionContext postfix_expression() throws RecognitionException {
Postfix_expressionContext _localctx = new Postfix_expressionContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_postfix_expression);
+ enterRule(_localctx, 24, RULE_postfix_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(181);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==T__17) {
- {
- setState(180);
- match(T__17);
- }
- }
-
- setState(183);
- primary();
+ boolean with_minus = false;
setState(187);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__7 || _la==T__18) {
+ if (_la==MINUS) {
+ {
+ setState(185);
+ match(MINUS);
+ with_minus = true;
+ }
+ }
+
+ setState(189);
+ ((Postfix_expressionContext)_localctx).primary = primary();
+ ((Postfix_expressionContext)_localctx).result = ((Postfix_expressionContext)_localctx).primary.result;
+ setState(196);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__6 || _la==T__10) {
{
{
- setState(184);
- postfix();
+ setState(191);
+ ((Postfix_expressionContext)_localctx).postfix = postfix();
+
+ if (((Postfix_expressionContext)_localctx).postfix.access_index.isPresent()) {
+ ((Postfix_expressionContext)_localctx).result = factory.createElemNode(_localctx.result, (((Postfix_expressionContext)_localctx).postfix.access_index.get())); // TODO: or RefElem node
+ } else {
+ ((Postfix_expressionContext)_localctx).result = factory.createCallNode(_localctx.result, ((Postfix_expressionContext)_localctx).postfix.args);
+ }
+
}
}
- setState(189);
+ setState(198);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1316,6 +1085,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class PostfixContext extends ParserRuleContext {
+ public List args;
+ public Optional access_index;
+ public ExpressionContext expression;
public List expression() {
return getRuleContexts(ExpressionContext.class);
}
@@ -1343,52 +1115,63 @@ public class LamaParser extends Parser {
public final PostfixContext postfix() throws RecognitionException {
PostfixContext _localctx = new PostfixContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_postfix);
+ enterRule(_localctx, 26, RULE_postfix);
int _la;
try {
- setState(205);
+ setState(221);
_errHandler.sync(this);
- switch (_input.LA(1)) {
- case T__7:
+ switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
+ case 1:
enterOuterAlt(_localctx, 1);
{
- setState(190);
- match(T__7);
- setState(191);
- expression();
- setState(196);
+ ((PostfixContext)_localctx).args = new ArrayList(); ((PostfixContext)_localctx).access_index = Option.empty();
+ setState(200);
+ match(T__6);
+ setState(201);
+ ((PostfixContext)_localctx).expression = expression();
+ _localctx.args.addLast(((PostfixContext)_localctx).expression.result);
+ setState(209);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(192);
- match(T__4);
- setState(193);
- expression();
+ setState(203);
+ match(T__2);
+ setState(204);
+ ((PostfixContext)_localctx).expression = expression();
+ _localctx.args.addLast(((PostfixContext)_localctx).expression.result);
}
}
- setState(198);
+ setState(211);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(199);
- match(T__8);
+ setState(212);
+ match(T__7);
}
break;
- case T__18:
+ case 2:
enterOuterAlt(_localctx, 2);
{
- setState(201);
- match(T__18);
- setState(202);
- expression();
- setState(203);
- match(T__19);
+ setState(214);
+ match(T__6);
+ setState(215);
+ match(T__7);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(216);
+ match(T__10);
+ setState(217);
+ ((PostfixContext)_localctx).expression = expression();
+ ((PostfixContext)_localctx).access_index = Option.of(((PostfixContext)_localctx).expression.result);
+ setState(219);
+ match(T__11);
}
break;
- default:
- throw new NoViableAltException(this);
}
}
catch (RecognitionException re) {
@@ -1405,11 +1188,29 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class PrimaryContext extends ParserRuleContext {
public LamaExpressionNode result;
+ public Token DECIMAL_LITERAL;
+ public Token STRING_LITERAL;
+ public Token CHAR_LITERAL;
+ public Token LIDENT;
+ public Any_infixContext any_infix;
+ public Function_argumentsContext function_arguments;
+ public Function_bodyContext function_body;
+ public Scope_expressionContext scope_expression;
+ public List_expressionContext list_expression;
+ public Array_expressionContext array_expression;
+ public S_expressionContext s_expression;
+ public If_expressionContext if_expression;
+ public While_do_expressionContext while_do_expression;
+ public Do_while_expressionContext do_while_expression;
+ public For_expressionContext for_expression;
+ public Case_expressionContext case_expression;
public TerminalNode DECIMAL_LITERAL() { return getToken(LamaParser.DECIMAL_LITERAL, 0); }
public TerminalNode STRING_LITERAL() { return getToken(LamaParser.STRING_LITERAL, 0); }
public TerminalNode CHAR_LITERAL() { return getToken(LamaParser.CHAR_LITERAL, 0); }
public TerminalNode LIDENT() { return getToken(LamaParser.LIDENT, 0); }
- public TerminalNode INFIX() { return getToken(LamaParser.INFIX, 0); }
+ public Any_infixContext any_infix() {
+ return getRuleContext(Any_infixContext.class,0);
+ }
public Function_argumentsContext function_arguments() {
return getRuleContext(Function_argumentsContext.class,0);
}
@@ -1464,149 +1265,167 @@ public class LamaParser extends Parser {
public final PrimaryContext primary() throws RecognitionException {
PrimaryContext _localctx = new PrimaryContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_primary);
+ enterRule(_localctx, 28, RULE_primary);
try {
- setState(234);
+ setState(277);
_errHandler.sync(this);
switch (_input.LA(1)) {
case DECIMAL_LITERAL:
enterOuterAlt(_localctx, 1);
{
- setState(207);
- match(DECIMAL_LITERAL);
+ setState(223);
+ ((PrimaryContext)_localctx).DECIMAL_LITERAL = match(DECIMAL_LITERAL);
+ ((PrimaryContext)_localctx).result = factory.createConstNode(((PrimaryContext)_localctx).DECIMAL_LITERAL);
}
break;
case STRING_LITERAL:
enterOuterAlt(_localctx, 2);
{
- setState(208);
- match(STRING_LITERAL);
+ setState(225);
+ ((PrimaryContext)_localctx).STRING_LITERAL = match(STRING_LITERAL);
+ ((PrimaryContext)_localctx).result = factory.createStringNode(LamaStrings.convertStringLiteral(((PrimaryContext)_localctx).STRING_LITERAL));
}
break;
case CHAR_LITERAL:
enterOuterAlt(_localctx, 3);
{
- setState(209);
- match(CHAR_LITERAL);
+ setState(227);
+ ((PrimaryContext)_localctx).CHAR_LITERAL = match(CHAR_LITERAL);
+ ((PrimaryContext)_localctx).result = factory.createConstNode(LamaStrings.convertCharLiteral(((PrimaryContext)_localctx).CHAR_LITERAL));
}
break;
case LIDENT:
enterOuterAlt(_localctx, 4);
{
- setState(210);
- match(LIDENT);
+ setState(229);
+ ((PrimaryContext)_localctx).LIDENT = match(LIDENT);
+ ((PrimaryContext)_localctx).result = factory.createRefNode(((PrimaryContext)_localctx).LIDENT);
}
break;
- case T__20:
+ case T__12:
enterOuterAlt(_localctx, 5);
{
- setState(211);
- match(T__20);
+ setState(231);
+ match(T__12);
+ ((PrimaryContext)_localctx).result = factory.createConstNode(1);
}
break;
- case T__21:
+ case T__13:
enterOuterAlt(_localctx, 6);
{
- setState(212);
- match(T__21);
+ setState(233);
+ match(T__13);
+ ((PrimaryContext)_localctx).result = factory.createConstNode(0);
}
break;
- case T__11:
+ case T__14:
enterOuterAlt(_localctx, 7);
{
- setState(213);
- match(T__11);
- setState(214);
- match(INFIX);
+ setState(235);
+ match(T__14);
+ setState(236);
+ ((PrimaryContext)_localctx).any_infix = any_infix();
+ ((PrimaryContext)_localctx).result = factory.createRefNode(((PrimaryContext)_localctx).any_infix.result);
+ }
+ break;
+ case T__5:
+ enterOuterAlt(_localctx, 8);
+ {
+ setState(239);
+ match(T__5);
+ setState(240);
+ match(T__6);
+ setState(241);
+ ((PrimaryContext)_localctx).function_arguments = function_arguments();
+ setState(242);
+ match(T__7);
+ setState(243);
+ ((PrimaryContext)_localctx).function_body = function_body();
+ ((PrimaryContext)_localctx).result = factory.addClosureDefinition(((PrimaryContext)_localctx).function_arguments.args, ((PrimaryContext)_localctx).function_body.result);
+ }
+ break;
+ case T__15:
+ enterOuterAlt(_localctx, 9);
+ {
+ setState(246);
+ match(T__15);
+ ((PrimaryContext)_localctx).result = factory.createSkipNode();
}
break;
case T__6:
- enterOuterAlt(_localctx, 8);
- {
- setState(215);
- match(T__6);
- setState(216);
- match(T__7);
- setState(217);
- function_arguments();
- setState(218);
- match(T__8);
- setState(219);
- function_body();
- }
- break;
- case T__22:
- enterOuterAlt(_localctx, 9);
- {
- setState(221);
- match(T__22);
- }
- break;
- case T__7:
enterOuterAlt(_localctx, 10);
{
- setState(222);
+ setState(248);
+ match(T__6);
+ setState(249);
+ ((PrimaryContext)_localctx).scope_expression = scope_expression();
+ setState(250);
match(T__7);
- setState(223);
- scope_expression();
- setState(224);
- match(T__8);
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).scope_expression.result;
}
break;
- case T__9:
+ case T__8:
enterOuterAlt(_localctx, 11);
{
- setState(226);
- list_expression();
+ setState(253);
+ ((PrimaryContext)_localctx).list_expression = list_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).list_expression.result;
}
break;
- case T__18:
+ case T__10:
enterOuterAlt(_localctx, 12);
{
- setState(227);
- array_expression();
+ setState(256);
+ ((PrimaryContext)_localctx).array_expression = array_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).array_expression.result;
}
break;
case UIDENT:
enterOuterAlt(_localctx, 13);
{
- setState(228);
- s_expression();
+ setState(259);
+ ((PrimaryContext)_localctx).s_expression = s_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).s_expression.result;
}
break;
- case T__23:
+ case T__16:
enterOuterAlt(_localctx, 14);
{
- setState(229);
- if_expression();
+ setState(262);
+ ((PrimaryContext)_localctx).if_expression = if_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).if_expression.result;
}
break;
- case T__28:
+ case T__21:
enterOuterAlt(_localctx, 15);
{
- setState(230);
- while_do_expression();
+ setState(265);
+ ((PrimaryContext)_localctx).while_do_expression = while_do_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).while_do_expression.result;
}
break;
- case T__29:
+ case T__22:
enterOuterAlt(_localctx, 16);
{
- setState(231);
- do_while_expression();
+ setState(268);
+ ((PrimaryContext)_localctx).do_while_expression = do_while_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).do_while_expression.result;
}
break;
- case T__31:
+ case T__24:
enterOuterAlt(_localctx, 17);
{
- setState(232);
- for_expression();
+ setState(271);
+ ((PrimaryContext)_localctx).for_expression = for_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).for_expression.result;
}
break;
- case T__42:
+ case T__34:
enterOuterAlt(_localctx, 18);
{
- setState(233);
- case_expression();
+ setState(274);
+ ((PrimaryContext)_localctx).case_expression = case_expression();
+ ((PrimaryContext)_localctx).result = ((PrimaryContext)_localctx).case_expression.result;
}
break;
default:
@@ -1626,6 +1445,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Array_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
public List expression() {
return getRuleContexts(ExpressionContext.class);
}
@@ -1653,41 +1474,45 @@ public class LamaParser extends Parser {
public final Array_expressionContext array_expression() throws RecognitionException {
Array_expressionContext _localctx = new Array_expressionContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_array_expression);
+ enterRule(_localctx, 30, RULE_array_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(236);
- match(T__18);
- setState(245);
+ List elems = new ArrayList();
+ setState(280);
+ match(T__10);
+ setState(292);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 139620390479336832L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1099546033908416L) != 0)) {
{
- setState(237);
- expression();
- setState(242);
+ setState(281);
+ ((Array_expressionContext)_localctx).expression = expression();
+ elems.addLast(((Array_expressionContext)_localctx).expression.result);
+ setState(289);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(238);
- match(T__4);
- setState(239);
- expression();
+ setState(283);
+ match(T__2);
+ setState(284);
+ ((Array_expressionContext)_localctx).expression = expression();
+ elems.addLast(((Array_expressionContext)_localctx).expression.result);
}
}
- setState(244);
+ setState(291);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(247);
- match(T__19);
+ setState(294);
+ match(T__11);
+ ((Array_expressionContext)_localctx).result = factory.createArrayNode(elems);
}
}
catch (RecognitionException re) {
@@ -1703,6 +1528,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class List_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
public List expression() {
return getRuleContexts(ExpressionContext.class);
}
@@ -1730,41 +1557,45 @@ public class LamaParser extends Parser {
public final List_expressionContext list_expression() throws RecognitionException {
List_expressionContext _localctx = new List_expressionContext(_ctx, getState());
- enterRule(_localctx, 42, RULE_list_expression);
+ enterRule(_localctx, 32, RULE_list_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(249);
- match(T__9);
- setState(258);
+ List elems = new ArrayList();
+ setState(298);
+ match(T__8);
+ setState(310);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 139620390479336832L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1099546033908416L) != 0)) {
{
- setState(250);
- expression();
- setState(255);
+ setState(299);
+ ((List_expressionContext)_localctx).expression = expression();
+ elems.addLast(((List_expressionContext)_localctx).expression.result);
+ setState(307);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(251);
- match(T__4);
- setState(252);
- expression();
+ setState(301);
+ match(T__2);
+ setState(302);
+ ((List_expressionContext)_localctx).expression = expression();
+ elems.addLast(((List_expressionContext)_localctx).expression.result);
}
}
- setState(257);
+ setState(309);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(260);
- match(T__10);
+ setState(312);
+ match(T__9);
+ ((List_expressionContext)_localctx).result = factory.createListSexpNode(elems);
}
}
catch (RecognitionException re) {
@@ -1780,6 +1611,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class S_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Token UIDENT;
+ public ExpressionContext expression;
public TerminalNode UIDENT() { return getToken(LamaParser.UIDENT, 0); }
public List expression() {
return getRuleContexts(ExpressionContext.class);
@@ -1808,51 +1642,55 @@ public class LamaParser extends Parser {
public final S_expressionContext s_expression() throws RecognitionException {
S_expressionContext _localctx = new S_expressionContext(_ctx, getState());
- enterRule(_localctx, 44, RULE_s_expression);
+ enterRule(_localctx, 34, RULE_s_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(262);
- match(UIDENT);
- setState(275);
+ List elems = new ArrayList();
+ setState(316);
+ ((S_expressionContext)_localctx).UIDENT = match(UIDENT);
+ setState(332);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
case 1:
{
- setState(263);
- match(T__7);
- setState(272);
+ setState(317);
+ match(T__6);
+ setState(329);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 139620390479336832L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1099546033908416L) != 0)) {
{
- setState(264);
- expression();
- setState(269);
+ setState(318);
+ ((S_expressionContext)_localctx).expression = expression();
+ elems.addLast(((S_expressionContext)_localctx).expression.result);
+ setState(326);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(265);
- match(T__4);
- setState(266);
- expression();
+ setState(320);
+ match(T__2);
+ setState(321);
+ ((S_expressionContext)_localctx).expression = expression();
+ elems.addLast(((S_expressionContext)_localctx).expression.result);
}
}
- setState(271);
+ setState(328);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(274);
- match(T__8);
+ setState(331);
+ match(T__7);
}
break;
}
+ ((S_expressionContext)_localctx).result = factory.createSexpNode(((S_expressionContext)_localctx).UIDENT, elems);
}
}
catch (RecognitionException re) {
@@ -1868,6 +1706,10 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class If_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
+ public Scope_expressionContext scope_expression;
+ public Else_partContext else_part;
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
@@ -1898,31 +1740,34 @@ public class LamaParser extends Parser {
public final If_expressionContext if_expression() throws RecognitionException {
If_expressionContext _localctx = new If_expressionContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_if_expression);
+ enterRule(_localctx, 36, RULE_if_expression);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(277);
- match(T__23);
- setState(278);
- expression();
- setState(279);
- match(T__24);
- setState(280);
- scope_expression();
- setState(282);
+ LamaExpressionNode do_else = null;
+ setState(337);
+ match(T__16);
+ setState(338);
+ ((If_expressionContext)_localctx).expression = expression();
+ setState(339);
+ match(T__17);
+ setState(340);
+ ((If_expressionContext)_localctx).scope_expression = scope_expression();
+ setState(344);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__26 || _la==T__27) {
+ if (_la==T__19 || _la==T__20) {
{
- setState(281);
- else_part();
+ setState(341);
+ ((If_expressionContext)_localctx).else_part = else_part();
+ do_else = ((If_expressionContext)_localctx).else_part.result;
}
}
- setState(284);
- match(T__25);
+ setState(346);
+ match(T__18);
+ ((If_expressionContext)_localctx).result = factory.createIfNode(((If_expressionContext)_localctx).expression.result, ((If_expressionContext)_localctx).scope_expression.result, do_else);
}
}
catch (RecognitionException re) {
@@ -1938,6 +1783,10 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Else_partContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
+ public Scope_expressionContext scope_expression;
+ public Else_partContext else_part;
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
@@ -1968,42 +1817,46 @@ public class LamaParser extends Parser {
public final Else_partContext else_part() throws RecognitionException {
Else_partContext _localctx = new Else_partContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_else_part);
+ enterRule(_localctx, 38, RULE_else_part);
int _la;
try {
- setState(295);
+ setState(365);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__26:
+ case T__19:
enterOuterAlt(_localctx, 1);
{
- setState(286);
- match(T__26);
- setState(287);
- expression();
- setState(288);
- match(T__24);
- setState(289);
- scope_expression();
- setState(291);
+ setState(349);
+ match(T__19);
+ LamaExpressionNode do_else = null;
+ setState(351);
+ ((Else_partContext)_localctx).expression = expression();
+ setState(352);
+ match(T__17);
+ setState(353);
+ ((Else_partContext)_localctx).scope_expression = scope_expression();
+ setState(357);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__26 || _la==T__27) {
+ if (_la==T__19 || _la==T__20) {
{
- setState(290);
- else_part();
+ setState(354);
+ ((Else_partContext)_localctx).else_part = else_part();
+ do_else = ((Else_partContext)_localctx).else_part.result;
}
}
+ ((Else_partContext)_localctx).result = factory.createIfNode(((Else_partContext)_localctx).expression.result, ((Else_partContext)_localctx).scope_expression.result, do_else);
}
break;
- case T__27:
+ case T__20:
enterOuterAlt(_localctx, 2);
{
- setState(293);
- match(T__27);
- setState(294);
- scope_expression();
+ setState(361);
+ match(T__20);
+ setState(362);
+ ((Else_partContext)_localctx).scope_expression = scope_expression();
+ ((Else_partContext)_localctx).result = ((Else_partContext)_localctx).scope_expression.result;
}
break;
default:
@@ -2023,6 +1876,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class While_do_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
+ public Scope_expressionContext scope_expression;
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
@@ -2050,20 +1906,21 @@ public class LamaParser extends Parser {
public final While_do_expressionContext while_do_expression() throws RecognitionException {
While_do_expressionContext _localctx = new While_do_expressionContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_while_do_expression);
+ enterRule(_localctx, 40, RULE_while_do_expression);
try {
enterOuterAlt(_localctx, 1);
{
- setState(297);
- match(T__28);
- setState(298);
- expression();
- setState(299);
- match(T__29);
- setState(300);
- scope_expression();
- setState(301);
- match(T__30);
+ setState(367);
+ match(T__21);
+ setState(368);
+ ((While_do_expressionContext)_localctx).expression = expression();
+ setState(369);
+ match(T__22);
+ setState(370);
+ ((While_do_expressionContext)_localctx).scope_expression = scope_expression();
+ setState(371);
+ match(T__23);
+ ((While_do_expressionContext)_localctx).result = factory.createWhileNode(((While_do_expressionContext)_localctx).expression.result, ((While_do_expressionContext)_localctx).scope_expression.result);
}
}
catch (RecognitionException re) {
@@ -2079,6 +1936,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Do_while_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Scope_expressionContext scope_expression;
+ public ExpressionContext expression;
public Scope_expressionContext scope_expression() {
return getRuleContext(Scope_expressionContext.class,0);
}
@@ -2106,20 +1966,21 @@ public class LamaParser extends Parser {
public final Do_while_expressionContext do_while_expression() throws RecognitionException {
Do_while_expressionContext _localctx = new Do_while_expressionContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_do_while_expression);
+ enterRule(_localctx, 42, RULE_do_while_expression);
try {
enterOuterAlt(_localctx, 1);
{
- setState(303);
- match(T__29);
- setState(304);
- scope_expression();
- setState(305);
- match(T__28);
- setState(306);
- expression();
- setState(307);
- match(T__30);
+ setState(374);
+ match(T__22);
+ setState(375);
+ ((Do_while_expressionContext)_localctx).scope_expression = scope_expression();
+ setState(376);
+ match(T__21);
+ setState(377);
+ ((Do_while_expressionContext)_localctx).expression = expression();
+ setState(378);
+ match(T__23);
+ ((Do_while_expressionContext)_localctx).result = factory.createDoWhileNode(((Do_while_expressionContext)_localctx).expression.result, ((Do_while_expressionContext)_localctx).scope_expression.result);
}
}
catch (RecognitionException re) {
@@ -2135,6 +1996,11 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class For_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public Scope_expressionContext init;
+ public ExpressionContext cond;
+ public ExpressionContext inc;
+ public Scope_expressionContext expr;
public List scope_expression() {
return getRuleContexts(Scope_expressionContext.class);
}
@@ -2168,28 +2034,29 @@ public class LamaParser extends Parser {
public final For_expressionContext for_expression() throws RecognitionException {
For_expressionContext _localctx = new For_expressionContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_for_expression);
+ enterRule(_localctx, 44, RULE_for_expression);
try {
enterOuterAlt(_localctx, 1);
{
- setState(309);
- match(T__31);
- setState(310);
- scope_expression();
- setState(311);
- match(T__4);
- setState(312);
- expression();
- setState(313);
- match(T__4);
- setState(314);
- expression();
- setState(315);
- match(T__29);
- setState(316);
- scope_expression();
- setState(317);
- match(T__30);
+ setState(381);
+ match(T__24);
+ setState(382);
+ ((For_expressionContext)_localctx).init = scope_expression();
+ setState(383);
+ match(T__2);
+ setState(384);
+ ((For_expressionContext)_localctx).cond = expression();
+ setState(385);
+ match(T__2);
+ setState(386);
+ ((For_expressionContext)_localctx).inc = expression();
+ setState(387);
+ match(T__22);
+ setState(388);
+ ((For_expressionContext)_localctx).expr = scope_expression();
+ setState(389);
+ match(T__23);
+ ((For_expressionContext)_localctx).result = factory.createSeqNode(((For_expressionContext)_localctx).init.result, factory.createWhileNode(((For_expressionContext)_localctx).cond.result, factory.createSeqNode(((For_expressionContext)_localctx).expr.result, ((For_expressionContext)_localctx).inc.result)));
}
}
catch (RecognitionException re) {
@@ -2205,6 +2072,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class PatternContext extends ParserRuleContext {
+ public LamaPattern result;
+ public Cons_patternContext cons_pattern;
+ public Simple_patternContext simple_pattern;
public Cons_patternContext cons_pattern() {
return getRuleContext(Cons_patternContext.class,0);
}
@@ -2232,16 +2102,27 @@ public class LamaParser extends Parser {
public final PatternContext pattern() throws RecognitionException {
PatternContext _localctx = new PatternContext(_ctx, getState());
- enterRule(_localctx, 56, RULE_pattern);
+ enterRule(_localctx, 46, RULE_pattern);
try {
- enterOuterAlt(_localctx, 1);
- {
- setState(319);
- cons_pattern();
- setState(320);
- match(T__32);
- setState(321);
- simple_pattern();
+ setState(398);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(392);
+ ((PatternContext)_localctx).cons_pattern = cons_pattern();
+ ((PatternContext)_localctx).result = ((PatternContext)_localctx).cons_pattern.result;
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(395);
+ ((PatternContext)_localctx).simple_pattern = simple_pattern();
+ ((PatternContext)_localctx).result = ((PatternContext)_localctx).simple_pattern.result;
+ }
+ break;
}
}
catch (RecognitionException re) {
@@ -2257,6 +2138,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Cons_patternContext extends ParserRuleContext {
+ public LamaPattern result;
+ public Simple_patternContext simple_pattern;
+ public PatternContext pattern;
public Simple_patternContext simple_pattern() {
return getRuleContext(Simple_patternContext.class,0);
}
@@ -2284,16 +2168,17 @@ public class LamaParser extends Parser {
public final Cons_patternContext cons_pattern() throws RecognitionException {
Cons_patternContext _localctx = new Cons_patternContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_cons_pattern);
+ enterRule(_localctx, 48, RULE_cons_pattern);
try {
enterOuterAlt(_localctx, 1);
{
- setState(323);
- simple_pattern();
- setState(324);
- match(T__33);
- setState(325);
- pattern();
+ setState(400);
+ ((Cons_patternContext)_localctx).simple_pattern = simple_pattern();
+ setState(401);
+ match(T__25);
+ setState(402);
+ ((Cons_patternContext)_localctx).pattern = pattern();
+ ((Cons_patternContext)_localctx).result = factory.createSexpPattern("cons", {((Cons_patternContext)_localctx).simple_pattern.result, ((Cons_patternContext)_localctx).pattern.result});
}
}
catch (RecognitionException re) {
@@ -2309,6 +2194,16 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Simple_patternContext extends ParserRuleContext {
+ public LamaPattern result;
+ public Wildcard_patternContext wildcard_pattern;
+ public S_expr_patternContext s_expr_pattern;
+ public Array_patternContext array_pattern;
+ public List_patternContext list_pattern;
+ public Token LIDENT;
+ public PatternContext pattern;
+ public Token DECIMAL_LITERAL;
+ public Token STRING_LITERAL;
+ public Token CHAR_LITERAL;
public Wildcard_patternContext wildcard_pattern() {
return getRuleContext(Wildcard_patternContext.class,0);
}
@@ -2326,6 +2221,7 @@ public class LamaParser extends Parser {
return getRuleContext(PatternContext.class,0);
}
public TerminalNode DECIMAL_LITERAL() { return getToken(LamaParser.DECIMAL_LITERAL, 0); }
+ public TerminalNode MINUS() { return getToken(LamaParser.MINUS, 0); }
public TerminalNode STRING_LITERAL() { return getToken(LamaParser.STRING_LITERAL, 0); }
public TerminalNode CHAR_LITERAL() { return getToken(LamaParser.CHAR_LITERAL, 0); }
public Simple_patternContext(ParserRuleContext parent, int invokingState) {
@@ -2349,167 +2245,188 @@ public class LamaParser extends Parser {
public final Simple_patternContext simple_pattern() throws RecognitionException {
Simple_patternContext _localctx = new Simple_patternContext(_ctx, getState());
- enterRule(_localctx, 60, RULE_simple_pattern);
+ enterRule(_localctx, 50, RULE_simple_pattern);
int _la;
try {
- setState(360);
+ setState(464);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(327);
- wildcard_pattern();
+ setState(405);
+ ((Simple_patternContext)_localctx).wildcard_pattern = wildcard_pattern();
+ ((Simple_patternContext)_localctx).result = ((Simple_patternContext)_localctx).wildcard_pattern.result;
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(328);
- s_expr_pattern();
+ setState(408);
+ ((Simple_patternContext)_localctx).s_expr_pattern = s_expr_pattern();
+ ((Simple_patternContext)_localctx).result = ((Simple_patternContext)_localctx).s_expr_pattern.result;
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(329);
- array_pattern();
+ setState(411);
+ ((Simple_patternContext)_localctx).array_pattern = array_pattern();
+ ((Simple_patternContext)_localctx).result = ((Simple_patternContext)_localctx).array_pattern.result;
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(330);
- list_pattern();
+ setState(414);
+ ((Simple_patternContext)_localctx).list_pattern = list_pattern();
+ ((Simple_patternContext)_localctx).result = ((Simple_patternContext)_localctx).list_pattern.result;
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(331);
- match(LIDENT);
- setState(334);
+ setState(417);
+ ((Simple_patternContext)_localctx).LIDENT = match(LIDENT);
+ LamaPattern pat = null;
+ setState(423);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__34) {
+ if (_la==T__26) {
{
- setState(332);
- match(T__34);
- setState(333);
- pattern();
+ setState(419);
+ match(T__26);
+ setState(420);
+ ((Simple_patternContext)_localctx).pattern = pattern();
+ pat = ((Simple_patternContext)_localctx).pattern.result;
}
}
+ ((Simple_patternContext)_localctx).result = factory.createNamedPattern(((Simple_patternContext)_localctx).LIDENT, Objects.requireNonNullElse(pat, factory.createWildcardPattern());
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(337);
+ boolean is_negative = false;
+ setState(429);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__17) {
+ if (_la==MINUS) {
{
- setState(336);
- match(T__17);
+ setState(427);
+ match(MINUS);
+ is_negative = true;
}
}
- setState(339);
- match(DECIMAL_LITERAL);
+ setState(431);
+ ((Simple_patternContext)_localctx).DECIMAL_LITERAL = match(DECIMAL_LITERAL);
+ ((Simple_patternContext)_localctx).result = is_negative ? factory.createNegativeConstPattern(((Simple_patternContext)_localctx).DECIMAL_LITERAL) : factory.createConstPattern(((Simple_patternContext)_localctx).DECIMAL_LITERAL);
}
break;
case 7:
enterOuterAlt(_localctx, 7);
{
- setState(340);
- match(STRING_LITERAL);
+ setState(433);
+ ((Simple_patternContext)_localctx).STRING_LITERAL = match(STRING_LITERAL);
+ ((Simple_patternContext)_localctx).result = factory.createStringPattern(LamaStrings.convertStringLiteral(((Simple_patternContext)_localctx).STRING_LITERAL));
}
break;
case 8:
enterOuterAlt(_localctx, 8);
{
- setState(341);
- match(CHAR_LITERAL);
+ setState(435);
+ ((Simple_patternContext)_localctx).CHAR_LITERAL = match(CHAR_LITERAL);
+ ((Simple_patternContext)_localctx).result = factory.createConstPattern(LamaStrings.convertCharLiteral(((Simple_patternContext)_localctx).CHAR_LITERAL));
}
break;
case 9:
enterOuterAlt(_localctx, 9);
{
- setState(342);
- match(T__20);
+ setState(437);
+ match(T__12);
+ ((Simple_patternContext)_localctx).result = factory.createConstPattern(1);
}
break;
case 10:
enterOuterAlt(_localctx, 10);
{
- setState(343);
- match(T__21);
+ setState(439);
+ match(T__13);
+ ((Simple_patternContext)_localctx).result = factory.createConstPattern(0);
}
break;
case 11:
enterOuterAlt(_localctx, 11);
{
- setState(344);
- match(T__35);
- setState(345);
- match(T__36);
+ setState(441);
+ match(T__27);
+ setState(442);
+ match(T__28);
+ ((Simple_patternContext)_localctx).result = factory.createBoxedPattern();
}
break;
case 12:
enterOuterAlt(_localctx, 12);
{
- setState(346);
- match(T__35);
- setState(347);
- match(T__37);
+ setState(444);
+ match(T__27);
+ setState(445);
+ match(T__29);
+ ((Simple_patternContext)_localctx).result = factory.createUnBoxedPattern();
}
break;
case 13:
enterOuterAlt(_localctx, 13);
{
- setState(348);
- match(T__35);
- setState(349);
- match(T__38);
+ setState(447);
+ match(T__27);
+ setState(448);
+ match(T__30);
+ ((Simple_patternContext)_localctx).result = factory.createStringTagPattern();
}
break;
case 14:
enterOuterAlt(_localctx, 14);
{
- setState(350);
- match(T__35);
- setState(351);
- match(T__39);
+ setState(450);
+ match(T__27);
+ setState(451);
+ match(T__31);
+ ((Simple_patternContext)_localctx).result = factory.createArrayTagPattern();
}
break;
case 15:
enterOuterAlt(_localctx, 15);
{
- setState(352);
- match(T__35);
- setState(353);
- match(T__40);
+ setState(453);
+ match(T__27);
+ setState(454);
+ match(T__32);
+ ((Simple_patternContext)_localctx).result = factory.createSexpTagPattern();
}
break;
case 16:
enterOuterAlt(_localctx, 16);
{
- setState(354);
- match(T__35);
- setState(355);
- match(T__6);
+ setState(456);
+ match(T__27);
+ setState(457);
+ match(T__5);
+ ((Simple_patternContext)_localctx).result = factory.createClosureTagPattern();
}
break;
case 17:
enterOuterAlt(_localctx, 17);
{
- setState(356);
+ setState(459);
+ match(T__6);
+ setState(460);
+ ((Simple_patternContext)_localctx).pattern = pattern();
+ setState(461);
match(T__7);
- setState(357);
- pattern();
- setState(358);
- match(T__8);
+ ((Simple_patternContext)_localctx).result = ((Simple_patternContext)_localctx).pattern.result;
}
break;
}
@@ -2527,6 +2444,7 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Wildcard_patternContext extends ParserRuleContext {
+ public LamaPattern result;
public Wildcard_patternContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -2548,12 +2466,13 @@ public class LamaParser extends Parser {
public final Wildcard_patternContext wildcard_pattern() throws RecognitionException {
Wildcard_patternContext _localctx = new Wildcard_patternContext(_ctx, getState());
- enterRule(_localctx, 62, RULE_wildcard_pattern);
+ enterRule(_localctx, 52, RULE_wildcard_pattern);
try {
enterOuterAlt(_localctx, 1);
{
- setState(362);
- match(T__41);
+ setState(466);
+ match(T__33);
+ ((Wildcard_patternContext)_localctx).result = factory.createWildcardPattern();
}
}
catch (RecognitionException re) {
@@ -2569,6 +2488,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class S_expr_patternContext extends ParserRuleContext {
+ public LamaPattern result;
+ public Token UIDENT;
+ public PatternContext pattern;
public TerminalNode UIDENT() { return getToken(LamaParser.UIDENT, 0); }
public List pattern() {
return getRuleContexts(PatternContext.class);
@@ -2597,51 +2519,55 @@ public class LamaParser extends Parser {
public final S_expr_patternContext s_expr_pattern() throws RecognitionException {
S_expr_patternContext _localctx = new S_expr_patternContext(_ctx, getState());
- enterRule(_localctx, 64, RULE_s_expr_pattern);
+ enterRule(_localctx, 54, RULE_s_expr_pattern);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(364);
- match(UIDENT);
- setState(377);
+ List elems = new ArrayList();
+ setState(470);
+ ((S_expr_patternContext)_localctx).UIDENT = match(UIDENT);
+ setState(486);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__7) {
+ if (_la==T__6) {
{
- setState(365);
- match(T__7);
- setState(374);
+ setState(471);
+ match(T__6);
+ setState(483);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 139616055221552384L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1099529076107904L) != 0)) {
{
- setState(366);
- pattern();
- setState(371);
+ setState(472);
+ ((S_expr_patternContext)_localctx).pattern = pattern();
+ elems.addLast(((S_expr_patternContext)_localctx).pattern.result);
+ setState(480);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(367);
- match(T__4);
- setState(368);
- pattern();
+ setState(474);
+ match(T__2);
+ setState(475);
+ ((S_expr_patternContext)_localctx).pattern = pattern();
+ elems.addLast(((S_expr_patternContext)_localctx).pattern.result);
}
}
- setState(373);
+ setState(482);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(376);
- match(T__8);
+ setState(485);
+ match(T__7);
}
}
+ ((S_expr_patternContext)_localctx).result = factory.createSexpPattern(((S_expr_patternContext)_localctx).UIDENT, elems);
}
}
catch (RecognitionException re) {
@@ -2657,6 +2583,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Array_patternContext extends ParserRuleContext {
+ public LamaPattern result;
+ public PatternContext pattern;
public List pattern() {
return getRuleContexts(PatternContext.class);
}
@@ -2684,41 +2612,45 @@ public class LamaParser extends Parser {
public final Array_patternContext array_pattern() throws RecognitionException {
Array_patternContext _localctx = new Array_patternContext(_ctx, getState());
- enterRule(_localctx, 66, RULE_array_pattern);
+ enterRule(_localctx, 56, RULE_array_pattern);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(379);
- match(T__18);
- setState(388);
+ List elems = new ArrayList();
+ setState(491);
+ match(T__10);
+ setState(503);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 139616055221552384L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1099529076107904L) != 0)) {
{
- setState(380);
- pattern();
- setState(385);
+ setState(492);
+ ((Array_patternContext)_localctx).pattern = pattern();
+ elems.addLast(((Array_patternContext)_localctx).pattern.result);
+ setState(500);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(381);
- match(T__4);
- setState(382);
- pattern();
+ setState(494);
+ match(T__2);
+ setState(495);
+ ((Array_patternContext)_localctx).pattern = pattern();
+ elems.addLast(((Array_patternContext)_localctx).pattern.result);
}
}
- setState(387);
+ setState(502);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(390);
- match(T__19);
+ setState(505);
+ match(T__11);
+ ((Array_patternContext)_localctx).result = factory.createArrayPattern(elems);
}
}
catch (RecognitionException re) {
@@ -2734,6 +2666,8 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class List_patternContext extends ParserRuleContext {
+ public LamaPattern result;
+ public PatternContext pattern;
public List pattern() {
return getRuleContexts(PatternContext.class);
}
@@ -2761,41 +2695,43 @@ public class LamaParser extends Parser {
public final List_patternContext list_pattern() throws RecognitionException {
List_patternContext _localctx = new List_patternContext(_ctx, getState());
- enterRule(_localctx, 68, RULE_list_pattern);
+ enterRule(_localctx, 58, RULE_list_pattern);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(392);
- match(T__9);
- setState(401);
+ setState(508);
+ match(T__8);
+ setState(520);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 139616055221552384L) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1099529076107904L) != 0)) {
{
- setState(393);
- pattern();
- setState(398);
+ setState(509);
+ ((List_patternContext)_localctx).pattern = pattern();
+ ((List_patternContext)_localctx).result = ((List_patternContext)_localctx).pattern.result;
+ setState(517);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__4) {
+ while (_la==T__2) {
{
{
- setState(394);
- match(T__4);
- setState(395);
- pattern();
+ setState(511);
+ match(T__2);
+ setState(512);
+ ((List_patternContext)_localctx).pattern = pattern();
+ ((List_patternContext)_localctx).result = factory.createSexpPattern("cons", {_localctx.result, ((List_patternContext)_localctx).pattern.result});
}
}
- setState(400);
+ setState(519);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(403);
- match(T__10);
+ setState(522);
+ match(T__9);
}
}
catch (RecognitionException re) {
@@ -2811,6 +2747,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Case_expressionContext extends ParserRuleContext {
+ public LamaExpressionNode result;
+ public ExpressionContext expression;
+ public Case_branchesContext case_branches;
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
@@ -2838,20 +2777,21 @@ public class LamaParser extends Parser {
public final Case_expressionContext case_expression() throws RecognitionException {
Case_expressionContext _localctx = new Case_expressionContext(_ctx, getState());
- enterRule(_localctx, 70, RULE_case_expression);
+ enterRule(_localctx, 60, RULE_case_expression);
try {
enterOuterAlt(_localctx, 1);
{
- setState(405);
- match(T__42);
- setState(406);
- expression();
- setState(407);
- match(T__43);
- setState(408);
- case_branches();
- setState(409);
- match(T__44);
+ setState(524);
+ match(T__34);
+ setState(525);
+ ((Case_expressionContext)_localctx).expression = expression();
+ setState(526);
+ match(T__35);
+ setState(527);
+ ((Case_expressionContext)_localctx).case_branches = case_branches();
+ setState(528);
+ match(T__36);
+ ((Case_expressionContext)_localctx).result = factory.createCaseNode(((Case_expressionContext)_localctx).expression.result, ((Case_expressionContext)_localctx).case_branches.pats, ((Case_expressionContext)_localctx).case_branches.exprs);
}
}
catch (RecognitionException re) {
@@ -2867,6 +2807,9 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Case_branchesContext extends ParserRuleContext {
+ public List pats;
+ public List exprs;
+ public Case_branchContext case_branch;
public List case_branch() {
return getRuleContexts(Case_branchContext.class);
}
@@ -2894,26 +2837,29 @@ public class LamaParser extends Parser {
public final Case_branchesContext case_branches() throws RecognitionException {
Case_branchesContext _localctx = new Case_branchesContext(_ctx, getState());
- enterRule(_localctx, 72, RULE_case_branches);
+ enterRule(_localctx, 62, RULE_case_branches);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(411);
- case_branch();
- setState(416);
+ ((Case_branchesContext)_localctx).pats = new ArrayList(); ((Case_branchesContext)_localctx).exprs = new ArrayList exprs;
+ setState(532);
+ ((Case_branchesContext)_localctx).case_branch = case_branch();
+ _localctx.pats.addLast(((Case_branchesContext)_localctx).case_branch.pat); _localctx.exprs.addLast(((Case_branchesContext)_localctx).case_branch.expr);
+ setState(540);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__32) {
+ while (_la==T__37) {
{
{
- setState(412);
- match(T__32);
- setState(413);
- case_branch();
+ setState(534);
+ match(T__37);
+ setState(535);
+ ((Case_branchesContext)_localctx).case_branch = case_branch();
+ _localctx.pats.addLast(((Case_branchesContext)_localctx).case_branch.pat); _localctx.exprs.addLast(((Case_branchesContext)_localctx).case_branch.expr);
}
}
- setState(418);
+ setState(542);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2932,6 +2878,10 @@ public class LamaParser extends Parser {
@SuppressWarnings("CheckReturnValue")
public static class Case_branchContext extends ParserRuleContext {
+ public LamaPattern pat;
+ public LamaExpressionNode expr;
+ public PatternContext pattern;
+ public Scope_expressionContext scope_expression;
public PatternContext pattern() {
return getRuleContext(PatternContext.class,0);
}
@@ -2959,16 +2909,82 @@ public class LamaParser extends Parser {
public final Case_branchContext case_branch() throws RecognitionException {
Case_branchContext _localctx = new Case_branchContext(_ctx, getState());
- enterRule(_localctx, 74, RULE_case_branch);
+ enterRule(_localctx, 64, RULE_case_branch);
try {
enterOuterAlt(_localctx, 1);
{
- setState(419);
- pattern();
- setState(420);
- match(T__45);
- setState(421);
- scope_expression();
+ setState(543);
+ ((Case_branchContext)_localctx).pattern = pattern();
+ ((Case_branchContext)_localctx).pat = ((Case_branchContext)_localctx).pattern.result;
+ setState(545);
+ match(T__38);
+ setState(546);
+ ((Case_branchContext)_localctx).scope_expression = scope_expression();
+ ((Case_branchContext)_localctx).expr = ((Case_branchContext)_localctx).scope_expression.result;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ @SuppressWarnings("CheckReturnValue")
+ public static class Any_infixContext extends ParserRuleContext {
+ public String result;
+ public Token INFIX;
+ public Token MINUS;
+ public TerminalNode INFIX() { return getToken(LamaParser.INFIX, 0); }
+ public TerminalNode MINUS() { return getToken(LamaParser.MINUS, 0); }
+ public Any_infixContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_any_infix; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof LamaListener ) ((LamaListener)listener).enterAny_infix(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof LamaListener ) ((LamaListener)listener).exitAny_infix(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof LamaVisitor ) return ((LamaVisitor extends T>)visitor).visitAny_infix(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final Any_infixContext any_infix() throws RecognitionException {
+ Any_infixContext _localctx = new Any_infixContext(_ctx, getState());
+ enterRule(_localctx, 66, RULE_any_infix);
+ try {
+ setState(553);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case INFIX:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(549);
+ ((Any_infixContext)_localctx).INFIX = match(INFIX);
+ ((Any_infixContext)_localctx).result = ((Any_infixContext)_localctx).INFIX;
+ }
+ break;
+ case MINUS:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(551);
+ ((Any_infixContext)_localctx).MINUS = match(MINUS);
+ ((Any_infixContext)_localctx).result = ((Any_infixContext)_localctx).MINUS;
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
}
}
catch (RecognitionException re) {
@@ -2983,7 +2999,7 @@ public class LamaParser extends Parser {
}
public static final String _serializedATN =
- "\u0004\u00018\u01a8\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
+ "\u0004\u00012\u022c\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
@@ -2993,274 +3009,374 @@ public class LamaParser extends Parser {
"\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+
"\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+
"\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+
- "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+
- "#\u0007#\u0002$\u0007$\u0002%\u0007%\u0001\u0000\u0005\u0000N\b\u0000"+
- "\n\u0000\f\u0000Q\t\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+
- "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0004\u0002[\b\u0002"+
- "\u000b\u0002\f\u0002\\\u0001\u0002\u0003\u0002`\b\u0002\u0001\u0002\u0003"+
- "\u0002c\b\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003h\b\u0003"+
- "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005"+
- "\u0005\u0005p\b\u0005\n\u0005\f\u0005s\t\u0005\u0001\u0005\u0001\u0005"+
- "\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006z\b\u0006\u0001\u0007"+
- "\u0003\u0007}\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+
- "\u0003\u0007\u0083\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b"+
- "\u0001\b\u0001\b\u0005\b\u008b\b\b\n\b\f\b\u008e\t\b\u0001\t\u0001\t\u0001"+
- "\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+
- "\u0003\u000b\u009b\b\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
- "\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+
- "\u000e\u0003\u000e\u00a9\b\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001"+
- "\u0010\u0001\u0010\u0005\u0010\u00b0\b\u0010\n\u0010\f\u0010\u00b3\t\u0010"+
- "\u0001\u0011\u0003\u0011\u00b6\b\u0011\u0001\u0011\u0001\u0011\u0005\u0011"+
- "\u00ba\b\u0011\n\u0011\f\u0011\u00bd\t\u0011\u0001\u0012\u0001\u0012\u0001"+
- "\u0012\u0001\u0012\u0005\u0012\u00c3\b\u0012\n\u0012\f\u0012\u00c6\t\u0012"+
- "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
- "\u0003\u0012\u00ce\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
- "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
- "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
- "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
- "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013"+
- "\u00eb\b\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0005\u0014"+
- "\u00f1\b\u0014\n\u0014\f\u0014\u00f4\t\u0014\u0003\u0014\u00f6\b\u0014"+
- "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+
- "\u0005\u0015\u00fe\b\u0015\n\u0015\f\u0015\u0101\t\u0015\u0003\u0015\u0103"+
- "\b\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+
- "\u0016\u0001\u0016\u0005\u0016\u010c\b\u0016\n\u0016\f\u0016\u010f\t\u0016"+
- "\u0003\u0016\u0111\b\u0016\u0001\u0016\u0003\u0016\u0114\b\u0016\u0001"+
- "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u011b"+
- "\b\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+
- "\u0018\u0001\u0018\u0003\u0018\u0124\b\u0018\u0001\u0018\u0001\u0018\u0003"+
- "\u0018\u0128\b\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
- "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
- "\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
- "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
+ "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0001\u0000\u0001"+
+ "\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
+ "\u0001\u0001\u0001\u0005\u0001N\b\u0001\n\u0001\f\u0001Q\t\u0001\u0001"+
+ "\u0001\u0001\u0001\u0001\u0001\u0003\u0001V\b\u0001\u0001\u0001\u0001"+
+ "\u0001\u0001\u0001\u0003\u0001[\b\u0001\u0001\u0002\u0001\u0002\u0001"+
+ "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002c\b\u0002\u0001"+
+ "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003i\b\u0003\u0001"+
+ "\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+
+ "\u0004\u0001\u0004\u0001\u0004\u0005\u0004t\b\u0004\n\u0004\f\u0004w\t"+
+ "\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005\u0082\b\u0005\u0001"+
+ "\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u0087\b\u0006\u0001\u0006\u0001"+
+ "\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u008d\b\u0006\u0001\u0006\u0001"+
+ "\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
+ "\u0007\u0001\u0007\u0001\u0007\u0005\u0007\u0099\b\u0007\n\u0007\f\u0007"+
+ "\u009c\t\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t"+
+ "\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u00a9\b\t\u0001\n\u0001\n\u0001"+
+ "\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
+ "\u0005\u000b\u00b4\b\u000b\n\u000b\f\u000b\u00b7\t\u000b\u0001\f\u0001"+
+ "\f\u0001\f\u0003\f\u00bc\b\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0005"+
+ "\f\u00c3\b\f\n\f\f\f\u00c6\t\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r"+
+ "\u0001\r\u0001\r\u0001\r\u0005\r\u00d0\b\r\n\r\f\r\u00d3\t\r\u0001\r\u0001"+
+ "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u00de"+
+ "\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
+ "\u000e\u0003\u000e\u0116\b\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+
+ "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005\u000f\u0120"+
+ "\b\u000f\n\u000f\f\u000f\u0123\t\u000f\u0003\u000f\u0125\b\u000f\u0001"+
+ "\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005\u0010\u0132"+
+ "\b\u0010\n\u0010\f\u0010\u0135\t\u0010\u0003\u0010\u0137\b\u0010\u0001"+
+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
+ "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0005"+
+ "\u0011\u0145\b\u0011\n\u0011\f\u0011\u0148\t\u0011\u0003\u0011\u014a\b"+
+ "\u0011\u0001\u0011\u0003\u0011\u014d\b\u0011\u0001\u0011\u0001\u0011\u0001"+
+ "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
+ "\u0012\u0001\u0012\u0003\u0012\u0159\b\u0012\u0001\u0012\u0001\u0012\u0001"+
+ "\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+
+ "\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u0166\b\u0013\u0001\u0013\u0001"+
+ "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u016e"+
+ "\b\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+
+ "\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+
+ "\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+
+ "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+
+ "\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
+ "\u0017\u0001\u0017\u0003\u0017\u018f\b\u0017\u0001\u0018\u0001\u0018\u0001"+
+ "\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01a8\b\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01ae\b\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+ "\u0019\u0001\u0019\u0003\u0019\u01d1\b\u0019\u0001\u001a\u0001\u001a\u0001"+
+ "\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
+ "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u01df\b\u001b\n"+
+ "\u001b\f\u001b\u01e2\t\u001b\u0003\u001b\u01e4\b\u001b\u0001\u001b\u0003"+
+ "\u001b\u01e7\b\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001"+
+ "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005"+
+ "\u001c\u01f3\b\u001c\n\u001c\f\u001c\u01f6\t\u001c\u0003\u001c\u01f8\b"+
"\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+
+ "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0204"+
+ "\b\u001d\n\u001d\f\u001d\u0207\t\u001d\u0003\u001d\u0209\b\u001d\u0001"+
"\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+
- "\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u014f\b\u001e\u0001\u001e\u0003"+
- "\u001e\u0152\b\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+
- "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+
- "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+
- "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003\u001e\u0169"+
- "\b\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0005"+
- " \u0172\b \n \f \u0175\t \u0003 \u0177\b \u0001 \u0003 \u017a\b \u0001"+
- "!\u0001!\u0001!\u0001!\u0005!\u0180\b!\n!\f!\u0183\t!\u0003!\u0185\b!"+
- "\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0005\"\u018d\b\"\n\"\f"+
- "\"\u0190\t\"\u0003\"\u0192\b\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001"+
- "#\u0001#\u0001#\u0001$\u0001$\u0001$\u0005$\u019f\b$\n$\f$\u01a2\t$\u0001"+
- "%\u0001%\u0001%\u0001%\u0001%\u0000\u0000&\u0000\u0002\u0004\u0006\b\n"+
- "\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.0246"+
- "8:<>@BDFHJ\u0000\u0003\u0001\u0000\u0003\u0004\u0001\u0000\f\u000e\u0001"+
- "\u0000\u000f\u0011\u01c8\u0000O\u0001\u0000\u0000\u0000\u0002U\u0001\u0000"+
- "\u0000\u0000\u0004b\u0001\u0000\u0000\u0000\u0006g\u0001\u0000\u0000\u0000"+
- "\bi\u0001\u0000\u0000\u0000\nl\u0001\u0000\u0000\u0000\fv\u0001\u0000"+
- "\u0000\u0000\u000e|\u0001\u0000\u0000\u0000\u0010\u0087\u0001\u0000\u0000"+
- "\u0000\u0012\u008f\u0001\u0000\u0000\u0000\u0014\u0093\u0001\u0000\u0000"+
- "\u0000\u0016\u009a\u0001\u0000\u0000\u0000\u0018\u00a0\u0001\u0000\u0000"+
- "\u0000\u001a\u00a2\u0001\u0000\u0000\u0000\u001c\u00a5\u0001\u0000\u0000"+
- "\u0000\u001e\u00aa\u0001\u0000\u0000\u0000 \u00ac\u0001\u0000\u0000\u0000"+
- "\"\u00b5\u0001\u0000\u0000\u0000$\u00cd\u0001\u0000\u0000\u0000&\u00ea"+
- "\u0001\u0000\u0000\u0000(\u00ec\u0001\u0000\u0000\u0000*\u00f9\u0001\u0000"+
- "\u0000\u0000,\u0106\u0001\u0000\u0000\u0000.\u0115\u0001\u0000\u0000\u0000"+
- "0\u0127\u0001\u0000\u0000\u00002\u0129\u0001\u0000\u0000\u00004\u012f"+
- "\u0001\u0000\u0000\u00006\u0135\u0001\u0000\u0000\u00008\u013f\u0001\u0000"+
- "\u0000\u0000:\u0143\u0001\u0000\u0000\u0000<\u0168\u0001\u0000\u0000\u0000"+
- ">\u016a\u0001\u0000\u0000\u0000@\u016c\u0001\u0000\u0000\u0000B\u017b"+
- "\u0001\u0000\u0000\u0000D\u0188\u0001\u0000\u0000\u0000F\u0195\u0001\u0000"+
- "\u0000\u0000H\u019b\u0001\u0000\u0000\u0000J\u01a3\u0001\u0000\u0000\u0000"+
- "LN\u0003\u0002\u0001\u0000ML\u0001\u0000\u0000\u0000NQ\u0001\u0000\u0000"+
- "\u0000OM\u0001\u0000\u0000\u0000OP\u0001\u0000\u0000\u0000PR\u0001\u0000"+
- "\u0000\u0000QO\u0001\u0000\u0000\u0000RS\u0003\u0004\u0002\u0000ST\u0005"+
- "\u0000\u0000\u0001T\u0001\u0001\u0000\u0000\u0000UV\u0005\u0001\u0000"+
- "\u0000VW\u00054\u0000\u0000WX\u0005\u0002\u0000\u0000X\u0003\u0001\u0000"+
- "\u0000\u0000Y[\u0003\u0006\u0003\u0000ZY\u0001\u0000\u0000\u0000[\\\u0001"+
- "\u0000\u0000\u0000\\Z\u0001\u0000\u0000\u0000\\]\u0001\u0000\u0000\u0000"+
- "]_\u0001\u0000\u0000\u0000^`\u0003\u001c\u000e\u0000_^\u0001\u0000\u0000"+
- "\u0000_`\u0001\u0000\u0000\u0000`c\u0001\u0000\u0000\u0000ac\u0003\u001c"+
- "\u000e\u0000bZ\u0001\u0000\u0000\u0000ba\u0001\u0000\u0000\u0000c\u0005"+
- "\u0001\u0000\u0000\u0000dh\u0003\b\u0004\u0000eh\u0003\u000e\u0007\u0000"+
- "fh\u0003\u0014\n\u0000gd\u0001\u0000\u0000\u0000ge\u0001\u0000\u0000\u0000"+
- "gf\u0001\u0000\u0000\u0000h\u0007\u0001\u0000\u0000\u0000ij\u0007\u0000"+
- "\u0000\u0000jk\u0003\n\u0005\u0000k\t\u0001\u0000\u0000\u0000lq\u0003"+
- "\f\u0006\u0000mn\u0005\u0005\u0000\u0000np\u0003\f\u0006\u0000om\u0001"+
- "\u0000\u0000\u0000ps\u0001\u0000\u0000\u0000qo\u0001\u0000\u0000\u0000"+
- "qr\u0001\u0000\u0000\u0000rt\u0001\u0000\u0000\u0000sq\u0001\u0000\u0000"+
- "\u0000tu\u0005\u0002\u0000\u0000u\u000b\u0001\u0000\u0000\u0000vy\u0005"+
- "5\u0000\u0000wx\u0005\u0006\u0000\u0000xz\u0003\u001e\u000f\u0000yw\u0001"+
- "\u0000\u0000\u0000yz\u0001\u0000\u0000\u0000z\r\u0001\u0000\u0000\u0000"+
- "{}\u0005\u0004\u0000\u0000|{\u0001\u0000\u0000\u0000|}\u0001\u0000\u0000"+
- "\u0000}~\u0001\u0000\u0000\u0000~\u007f\u0005\u0007\u0000\u0000\u007f"+
- "\u0080\u00055\u0000\u0000\u0080\u0082\u0005\b\u0000\u0000\u0081\u0083"+
- "\u0003\u0010\b\u0000\u0082\u0081\u0001\u0000\u0000\u0000\u0082\u0083\u0001"+
- "\u0000\u0000\u0000\u0083\u0084\u0001\u0000\u0000\u0000\u0084\u0085\u0005"+
- "\t\u0000\u0000\u0085\u0086\u0003\u0012\t\u0000\u0086\u000f\u0001\u0000"+
- "\u0000\u0000\u0087\u008c\u00055\u0000\u0000\u0088\u0089\u0005\u0005\u0000"+
- "\u0000\u0089\u008b\u00055\u0000\u0000\u008a\u0088\u0001\u0000\u0000\u0000"+
- "\u008b\u008e\u0001\u0000\u0000\u0000\u008c\u008a\u0001\u0000\u0000\u0000"+
- "\u008c\u008d\u0001\u0000\u0000\u0000\u008d\u0011\u0001\u0000\u0000\u0000"+
- "\u008e\u008c\u0001\u0000\u0000\u0000\u008f\u0090\u0005\n\u0000\u0000\u0090"+
- "\u0091\u0003\u0004\u0002\u0000\u0091\u0092\u0005\u000b\u0000\u0000\u0092"+
- "\u0013\u0001\u0000\u0000\u0000\u0093\u0094\u0003\u0016\u000b\u0000\u0094"+
- "\u0095\u0005\b\u0000\u0000\u0095\u0096\u0003\u0010\b\u0000\u0096\u0097"+
- "\u0005\t\u0000\u0000\u0097\u0098\u0003\u0012\t\u0000\u0098\u0015\u0001"+
- "\u0000\u0000\u0000\u0099\u009b\u0005\u0004\u0000\u0000\u009a\u0099\u0001"+
- "\u0000\u0000\u0000\u009a\u009b\u0001\u0000\u0000\u0000\u009b\u009c\u0001"+
- "\u0000\u0000\u0000\u009c\u009d\u0003\u0018\f\u0000\u009d\u009e\u00053"+
- "\u0000\u0000\u009e\u009f\u0003\u001a\r\u0000\u009f\u0017\u0001\u0000\u0000"+
- "\u0000\u00a0\u00a1\u0007\u0001\u0000\u0000\u00a1\u0019\u0001\u0000\u0000"+
- "\u0000\u00a2\u00a3\u0007\u0002\u0000\u0000\u00a3\u00a4\u00053\u0000\u0000"+
- "\u00a4\u001b\u0001\u0000\u0000\u0000\u00a5\u00a8\u0003\u001e\u000f\u0000"+
- "\u00a6\u00a7\u0005\u0002\u0000\u0000\u00a7\u00a9\u0003\u001c\u000e\u0000"+
- "\u00a8\u00a6\u0001\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000"+
- "\u00a9\u001d\u0001\u0000\u0000\u0000\u00aa\u00ab\u0003 \u0010\u0000\u00ab"+
- "\u001f\u0001\u0000\u0000\u0000\u00ac\u00b1\u0003\"\u0011\u0000\u00ad\u00ae"+
- "\u00053\u0000\u0000\u00ae\u00b0\u0003\"\u0011\u0000\u00af\u00ad\u0001"+
- "\u0000\u0000\u0000\u00b0\u00b3\u0001\u0000\u0000\u0000\u00b1\u00af\u0001"+
- "\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2!\u0001\u0000"+
- "\u0000\u0000\u00b3\u00b1\u0001\u0000\u0000\u0000\u00b4\u00b6\u0005\u0012"+
- "\u0000\u0000\u00b5\u00b4\u0001\u0000\u0000\u0000\u00b5\u00b6\u0001\u0000"+
- "\u0000\u0000\u00b6\u00b7\u0001\u0000\u0000\u0000\u00b7\u00bb\u0003&\u0013"+
- "\u0000\u00b8\u00ba\u0003$\u0012\u0000\u00b9\u00b8\u0001\u0000\u0000\u0000"+
- "\u00ba\u00bd\u0001\u0000\u0000\u0000\u00bb\u00b9\u0001\u0000\u0000\u0000"+
- "\u00bb\u00bc\u0001\u0000\u0000\u0000\u00bc#\u0001\u0000\u0000\u0000\u00bd"+
- "\u00bb\u0001\u0000\u0000\u0000\u00be\u00bf\u0005\b\u0000\u0000\u00bf\u00c4"+
- "\u0003\u001c\u000e\u0000\u00c0\u00c1\u0005\u0005\u0000\u0000\u00c1\u00c3"+
- "\u0003\u001c\u000e\u0000\u00c2\u00c0\u0001\u0000\u0000\u0000\u00c3\u00c6"+
- "\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000\u00c4\u00c5"+
- "\u0001\u0000\u0000\u0000\u00c5\u00c7\u0001\u0000\u0000\u0000\u00c6\u00c4"+
- "\u0001\u0000\u0000\u0000\u00c7\u00c8\u0005\t\u0000\u0000\u00c8\u00ce\u0001"+
- "\u0000\u0000\u0000\u00c9\u00ca\u0005\u0013\u0000\u0000\u00ca\u00cb\u0003"+
- "\u001c\u000e\u0000\u00cb\u00cc\u0005\u0014\u0000\u0000\u00cc\u00ce\u0001"+
- "\u0000\u0000\u0000\u00cd\u00be\u0001\u0000\u0000\u0000\u00cd\u00c9\u0001"+
- "\u0000\u0000\u0000\u00ce%\u0001\u0000\u0000\u0000\u00cf\u00eb\u00058\u0000"+
- "\u0000\u00d0\u00eb\u00057\u0000\u0000\u00d1\u00eb\u00056\u0000\u0000\u00d2"+
- "\u00eb\u00055\u0000\u0000\u00d3\u00eb\u0005\u0015\u0000\u0000\u00d4\u00eb"+
- "\u0005\u0016\u0000\u0000\u00d5\u00d6\u0005\f\u0000\u0000\u00d6\u00eb\u0005"+
- "3\u0000\u0000\u00d7\u00d8\u0005\u0007\u0000\u0000\u00d8\u00d9\u0005\b"+
- "\u0000\u0000\u00d9\u00da\u0003\u0010\b\u0000\u00da\u00db\u0005\t\u0000"+
- "\u0000\u00db\u00dc\u0003\u0012\t\u0000\u00dc\u00eb\u0001\u0000\u0000\u0000"+
- "\u00dd\u00eb\u0005\u0017\u0000\u0000\u00de\u00df\u0005\b\u0000\u0000\u00df"+
- "\u00e0\u0003\u0004\u0002\u0000\u00e0\u00e1\u0005\t\u0000\u0000\u00e1\u00eb"+
- "\u0001\u0000\u0000\u0000\u00e2\u00eb\u0003*\u0015\u0000\u00e3\u00eb\u0003"+
- "(\u0014\u0000\u00e4\u00eb\u0003,\u0016\u0000\u00e5\u00eb\u0003.\u0017"+
- "\u0000\u00e6\u00eb\u00032\u0019\u0000\u00e7\u00eb\u00034\u001a\u0000\u00e8"+
- "\u00eb\u00036\u001b\u0000\u00e9\u00eb\u0003F#\u0000\u00ea\u00cf\u0001"+
- "\u0000\u0000\u0000\u00ea\u00d0\u0001\u0000\u0000\u0000\u00ea\u00d1\u0001"+
- "\u0000\u0000\u0000\u00ea\u00d2\u0001\u0000\u0000\u0000\u00ea\u00d3\u0001"+
- "\u0000\u0000\u0000\u00ea\u00d4\u0001\u0000\u0000\u0000\u00ea\u00d5\u0001"+
- "\u0000\u0000\u0000\u00ea\u00d7\u0001\u0000\u0000\u0000\u00ea\u00dd\u0001"+
- "\u0000\u0000\u0000\u00ea\u00de\u0001\u0000\u0000\u0000\u00ea\u00e2\u0001"+
- "\u0000\u0000\u0000\u00ea\u00e3\u0001\u0000\u0000\u0000\u00ea\u00e4\u0001"+
- "\u0000\u0000\u0000\u00ea\u00e5\u0001\u0000\u0000\u0000\u00ea\u00e6\u0001"+
- "\u0000\u0000\u0000\u00ea\u00e7\u0001\u0000\u0000\u0000\u00ea\u00e8\u0001"+
- "\u0000\u0000\u0000\u00ea\u00e9\u0001\u0000\u0000\u0000\u00eb\'\u0001\u0000"+
- "\u0000\u0000\u00ec\u00f5\u0005\u0013\u0000\u0000\u00ed\u00f2\u0003\u001c"+
- "\u000e\u0000\u00ee\u00ef\u0005\u0005\u0000\u0000\u00ef\u00f1\u0003\u001c"+
- "\u000e\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f1\u00f4\u0001\u0000"+
- "\u0000\u0000\u00f2\u00f0\u0001\u0000\u0000\u0000\u00f2\u00f3\u0001\u0000"+
- "\u0000\u0000\u00f3\u00f6\u0001\u0000\u0000\u0000\u00f4\u00f2\u0001\u0000"+
- "\u0000\u0000\u00f5\u00ed\u0001\u0000\u0000\u0000\u00f5\u00f6\u0001\u0000"+
- "\u0000\u0000\u00f6\u00f7\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005\u0014"+
- "\u0000\u0000\u00f8)\u0001\u0000\u0000\u0000\u00f9\u0102\u0005\n\u0000"+
- "\u0000\u00fa\u00ff\u0003\u001c\u000e\u0000\u00fb\u00fc\u0005\u0005\u0000"+
- "\u0000\u00fc\u00fe\u0003\u001c\u000e\u0000\u00fd\u00fb\u0001\u0000\u0000"+
- "\u0000\u00fe\u0101\u0001\u0000\u0000\u0000\u00ff\u00fd\u0001\u0000\u0000"+
- "\u0000\u00ff\u0100\u0001\u0000\u0000\u0000\u0100\u0103\u0001\u0000\u0000"+
- "\u0000\u0101\u00ff\u0001\u0000\u0000\u0000\u0102\u00fa\u0001\u0000\u0000"+
- "\u0000\u0102\u0103\u0001\u0000\u0000\u0000\u0103\u0104\u0001\u0000\u0000"+
- "\u0000\u0104\u0105\u0005\u000b\u0000\u0000\u0105+\u0001\u0000\u0000\u0000"+
- "\u0106\u0113\u00054\u0000\u0000\u0107\u0110\u0005\b\u0000\u0000\u0108"+
- "\u010d\u0003\u001c\u000e\u0000\u0109\u010a\u0005\u0005\u0000\u0000\u010a"+
- "\u010c\u0003\u001c\u000e\u0000\u010b\u0109\u0001\u0000\u0000\u0000\u010c"+
- "\u010f\u0001\u0000\u0000\u0000\u010d\u010b\u0001\u0000\u0000\u0000\u010d"+
- "\u010e\u0001\u0000\u0000\u0000\u010e\u0111\u0001\u0000\u0000\u0000\u010f"+
- "\u010d\u0001\u0000\u0000\u0000\u0110\u0108\u0001\u0000\u0000\u0000\u0110"+
- "\u0111\u0001\u0000\u0000\u0000\u0111\u0112\u0001\u0000\u0000\u0000\u0112"+
- "\u0114\u0005\t\u0000\u0000\u0113\u0107\u0001\u0000\u0000\u0000\u0113\u0114"+
- "\u0001\u0000\u0000\u0000\u0114-\u0001\u0000\u0000\u0000\u0115\u0116\u0005"+
- "\u0018\u0000\u0000\u0116\u0117\u0003\u001c\u000e\u0000\u0117\u0118\u0005"+
- "\u0019\u0000\u0000\u0118\u011a\u0003\u0004\u0002\u0000\u0119\u011b\u0003"+
- "0\u0018\u0000\u011a\u0119\u0001\u0000\u0000\u0000\u011a\u011b\u0001\u0000"+
- "\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0005\u001a"+
- "\u0000\u0000\u011d/\u0001\u0000\u0000\u0000\u011e\u011f\u0005\u001b\u0000"+
- "\u0000\u011f\u0120\u0003\u001c\u000e\u0000\u0120\u0121\u0005\u0019\u0000"+
- "\u0000\u0121\u0123\u0003\u0004\u0002\u0000\u0122\u0124\u00030\u0018\u0000"+
- "\u0123\u0122\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000"+
- "\u0124\u0128\u0001\u0000\u0000\u0000\u0125\u0126\u0005\u001c\u0000\u0000"+
- "\u0126\u0128\u0003\u0004\u0002\u0000\u0127\u011e\u0001\u0000\u0000\u0000"+
- "\u0127\u0125\u0001\u0000\u0000\u0000\u01281\u0001\u0000\u0000\u0000\u0129"+
- "\u012a\u0005\u001d\u0000\u0000\u012a\u012b\u0003\u001c\u000e\u0000\u012b"+
- "\u012c\u0005\u001e\u0000\u0000\u012c\u012d\u0003\u0004\u0002\u0000\u012d"+
- "\u012e\u0005\u001f\u0000\u0000\u012e3\u0001\u0000\u0000\u0000\u012f\u0130"+
- "\u0005\u001e\u0000\u0000\u0130\u0131\u0003\u0004\u0002\u0000\u0131\u0132"+
- "\u0005\u001d\u0000\u0000\u0132\u0133\u0003\u001c\u000e\u0000\u0133\u0134"+
- "\u0005\u001f\u0000\u0000\u01345\u0001\u0000\u0000\u0000\u0135\u0136\u0005"+
- " \u0000\u0000\u0136\u0137\u0003\u0004\u0002\u0000\u0137\u0138\u0005\u0005"+
- "\u0000\u0000\u0138\u0139\u0003\u001c\u000e\u0000\u0139\u013a\u0005\u0005"+
- "\u0000\u0000\u013a\u013b\u0003\u001c\u000e\u0000\u013b\u013c\u0005\u001e"+
- "\u0000\u0000\u013c\u013d\u0003\u0004\u0002\u0000\u013d\u013e\u0005\u001f"+
- "\u0000\u0000\u013e7\u0001\u0000\u0000\u0000\u013f\u0140\u0003:\u001d\u0000"+
- "\u0140\u0141\u0005!\u0000\u0000\u0141\u0142\u0003<\u001e\u0000\u01429"+
- "\u0001\u0000\u0000\u0000\u0143\u0144\u0003<\u001e\u0000\u0144\u0145\u0005"+
- "\"\u0000\u0000\u0145\u0146\u00038\u001c\u0000\u0146;\u0001\u0000\u0000"+
- "\u0000\u0147\u0169\u0003>\u001f\u0000\u0148\u0169\u0003@ \u0000\u0149"+
- "\u0169\u0003B!\u0000\u014a\u0169\u0003D\"\u0000\u014b\u014e\u00055\u0000"+
- "\u0000\u014c\u014d\u0005#\u0000\u0000\u014d\u014f\u00038\u001c\u0000\u014e"+
- "\u014c\u0001\u0000\u0000\u0000\u014e\u014f\u0001\u0000\u0000\u0000\u014f"+
- "\u0169\u0001\u0000\u0000\u0000\u0150\u0152\u0005\u0012\u0000\u0000\u0151"+
- "\u0150\u0001\u0000\u0000\u0000\u0151\u0152\u0001\u0000\u0000\u0000\u0152"+
- "\u0153\u0001\u0000\u0000\u0000\u0153\u0169\u00058\u0000\u0000\u0154\u0169"+
- "\u00057\u0000\u0000\u0155\u0169\u00056\u0000\u0000\u0156\u0169\u0005\u0015"+
- "\u0000\u0000\u0157\u0169\u0005\u0016\u0000\u0000\u0158\u0159\u0005$\u0000"+
- "\u0000\u0159\u0169\u0005%\u0000\u0000\u015a\u015b\u0005$\u0000\u0000\u015b"+
- "\u0169\u0005&\u0000\u0000\u015c\u015d\u0005$\u0000\u0000\u015d\u0169\u0005"+
- "\'\u0000\u0000\u015e\u015f\u0005$\u0000\u0000\u015f\u0169\u0005(\u0000"+
- "\u0000\u0160\u0161\u0005$\u0000\u0000\u0161\u0169\u0005)\u0000\u0000\u0162"+
- "\u0163\u0005$\u0000\u0000\u0163\u0169\u0005\u0007\u0000\u0000\u0164\u0165"+
- "\u0005\b\u0000\u0000\u0165\u0166\u00038\u001c\u0000\u0166\u0167\u0005"+
- "\t\u0000\u0000\u0167\u0169\u0001\u0000\u0000\u0000\u0168\u0147\u0001\u0000"+
- "\u0000\u0000\u0168\u0148\u0001\u0000\u0000\u0000\u0168\u0149\u0001\u0000"+
- "\u0000\u0000\u0168\u014a\u0001\u0000\u0000\u0000\u0168\u014b\u0001\u0000"+
- "\u0000\u0000\u0168\u0151\u0001\u0000\u0000\u0000\u0168\u0154\u0001\u0000"+
- "\u0000\u0000\u0168\u0155\u0001\u0000\u0000\u0000\u0168\u0156\u0001\u0000"+
- "\u0000\u0000\u0168\u0157\u0001\u0000\u0000\u0000\u0168\u0158\u0001\u0000"+
- "\u0000\u0000\u0168\u015a\u0001\u0000\u0000\u0000\u0168\u015c\u0001\u0000"+
- "\u0000\u0000\u0168\u015e\u0001\u0000\u0000\u0000\u0168\u0160\u0001\u0000"+
- "\u0000\u0000\u0168\u0162\u0001\u0000\u0000\u0000\u0168\u0164\u0001\u0000"+
- "\u0000\u0000\u0169=\u0001\u0000\u0000\u0000\u016a\u016b\u0005*\u0000\u0000"+
- "\u016b?\u0001\u0000\u0000\u0000\u016c\u0179\u00054\u0000\u0000\u016d\u0176"+
- "\u0005\b\u0000\u0000\u016e\u0173\u00038\u001c\u0000\u016f\u0170\u0005"+
- "\u0005\u0000\u0000\u0170\u0172\u00038\u001c\u0000\u0171\u016f\u0001\u0000"+
- "\u0000\u0000\u0172\u0175\u0001\u0000\u0000\u0000\u0173\u0171\u0001\u0000"+
- "\u0000\u0000\u0173\u0174\u0001\u0000\u0000\u0000\u0174\u0177\u0001\u0000"+
- "\u0000\u0000\u0175\u0173\u0001\u0000\u0000\u0000\u0176\u016e\u0001\u0000"+
- "\u0000\u0000\u0176\u0177\u0001\u0000\u0000\u0000\u0177\u0178\u0001\u0000"+
- "\u0000\u0000\u0178\u017a\u0005\t\u0000\u0000\u0179\u016d\u0001\u0000\u0000"+
- "\u0000\u0179\u017a\u0001\u0000\u0000\u0000\u017aA\u0001\u0000\u0000\u0000"+
- "\u017b\u0184\u0005\u0013\u0000\u0000\u017c\u0181\u00038\u001c\u0000\u017d"+
- "\u017e\u0005\u0005\u0000\u0000\u017e\u0180\u00038\u001c\u0000\u017f\u017d"+
- "\u0001\u0000\u0000\u0000\u0180\u0183\u0001\u0000\u0000\u0000\u0181\u017f"+
- "\u0001\u0000\u0000\u0000\u0181\u0182\u0001\u0000\u0000\u0000\u0182\u0185"+
- "\u0001\u0000\u0000\u0000\u0183\u0181\u0001\u0000\u0000\u0000\u0184\u017c"+
- "\u0001\u0000\u0000\u0000\u0184\u0185\u0001\u0000\u0000\u0000\u0185\u0186"+
- "\u0001\u0000\u0000\u0000\u0186\u0187\u0005\u0014\u0000\u0000\u0187C\u0001"+
- "\u0000\u0000\u0000\u0188\u0191\u0005\n\u0000\u0000\u0189\u018e\u00038"+
- "\u001c\u0000\u018a\u018b\u0005\u0005\u0000\u0000\u018b\u018d\u00038\u001c"+
- "\u0000\u018c\u018a\u0001\u0000\u0000\u0000\u018d\u0190\u0001\u0000\u0000"+
- "\u0000\u018e\u018c\u0001\u0000\u0000\u0000\u018e\u018f\u0001\u0000\u0000"+
- "\u0000\u018f\u0192\u0001\u0000\u0000\u0000\u0190\u018e\u0001\u0000\u0000"+
- "\u0000\u0191\u0189\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000"+
- "\u0000\u0192\u0193\u0001\u0000\u0000\u0000\u0193\u0194\u0005\u000b\u0000"+
- "\u0000\u0194E\u0001\u0000\u0000\u0000\u0195\u0196\u0005+\u0000\u0000\u0196"+
- "\u0197\u0003\u001c\u000e\u0000\u0197\u0198\u0005,\u0000\u0000\u0198\u0199"+
- "\u0003H$\u0000\u0199\u019a\u0005-\u0000\u0000\u019aG\u0001\u0000\u0000"+
- "\u0000\u019b\u01a0\u0003J%\u0000\u019c\u019d\u0005!\u0000\u0000\u019d"+
- "\u019f\u0003J%\u0000\u019e\u019c\u0001\u0000\u0000\u0000\u019f\u01a2\u0001"+
- "\u0000\u0000\u0000\u01a0\u019e\u0001\u0000\u0000\u0000\u01a0\u01a1\u0001"+
- "\u0000\u0000\u0000\u01a1I\u0001\u0000\u0000\u0000\u01a2\u01a0\u0001\u0000"+
- "\u0000\u0000\u01a3\u01a4\u00038\u001c\u0000\u01a4\u01a5\u0005.\u0000\u0000"+
- "\u01a5\u01a6\u0003\u0004\u0002\u0000\u01a6K\u0001\u0000\u0000\u0000\'"+
- "O\\_bgqy|\u0082\u008c\u009a\u00a8\u00b1\u00b5\u00bb\u00c4\u00cd\u00ea"+
- "\u00f2\u00f5\u00ff\u0102\u010d\u0110\u0113\u011a\u0123\u0127\u014e\u0151"+
- "\u0168\u0173\u0176\u0179\u0181\u0184\u018e\u0191\u01a0";
+ "\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+
+ "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0005\u001f\u021b\b\u001f\n"+
+ "\u001f\f\u001f\u021e\t\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+
+ " \u0001!\u0001!\u0001!\u0001!\u0003!\u022a\b!\u0001!\u0000\u0000\"\u0000"+
+ "\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c"+
+ "\u001e \"$&(*,.02468:<>@B\u0000\u0000\u0251\u0000D\u0001\u0000\u0000\u0000"+
+ "\u0002Z\u0001\u0000\u0000\u0000\u0004b\u0001\u0000\u0000\u0000\u0006d"+
+ "\u0001\u0000\u0000\u0000\bm\u0001\u0000\u0000\u0000\nz\u0001\u0000\u0000"+
+ "\u0000\f\u0083\u0001\u0000\u0000\u0000\u000e\u0092\u0001\u0000\u0000\u0000"+
+ "\u0010\u009d\u0001\u0000\u0000\u0000\u0012\u00a2\u0001\u0000\u0000\u0000"+
+ "\u0014\u00aa\u0001\u0000\u0000\u0000\u0016\u00ad\u0001\u0000\u0000\u0000"+
+ "\u0018\u00b8\u0001\u0000\u0000\u0000\u001a\u00dd\u0001\u0000\u0000\u0000"+
+ "\u001c\u0115\u0001\u0000\u0000\u0000\u001e\u0117\u0001\u0000\u0000\u0000"+
+ " \u0129\u0001\u0000\u0000\u0000\"\u013b\u0001\u0000\u0000\u0000$\u0150"+
+ "\u0001\u0000\u0000\u0000&\u016d\u0001\u0000\u0000\u0000(\u016f\u0001\u0000"+
+ "\u0000\u0000*\u0176\u0001\u0000\u0000\u0000,\u017d\u0001\u0000\u0000\u0000"+
+ ".\u018e\u0001\u0000\u0000\u00000\u0190\u0001\u0000\u0000\u00002\u01d0"+
+ "\u0001\u0000\u0000\u00004\u01d2\u0001\u0000\u0000\u00006\u01d5\u0001\u0000"+
+ "\u0000\u00008\u01ea\u0001\u0000\u0000\u0000:\u01fc\u0001\u0000\u0000\u0000"+
+ "<\u020c\u0001\u0000\u0000\u0000>\u0213\u0001\u0000\u0000\u0000@\u021f"+
+ "\u0001\u0000\u0000\u0000B\u0229\u0001\u0000\u0000\u0000DE\u0003\u0002"+
+ "\u0001\u0000EF\u0006\u0000\uffff\uffff\u0000FG\u0005\u0000\u0000\u0001"+
+ "G\u0001\u0001\u0000\u0000\u0000HI\u0003\u0004\u0002\u0000IO\u0006\u0001"+
+ "\uffff\uffff\u0000JK\u0003\u0004\u0002\u0000KL\u0006\u0001\uffff\uffff"+
+ "\u0000LN\u0001\u0000\u0000\u0000MJ\u0001\u0000\u0000\u0000NQ\u0001\u0000"+
+ "\u0000\u0000OM\u0001\u0000\u0000\u0000OP\u0001\u0000\u0000\u0000PU\u0001"+
+ "\u0000\u0000\u0000QO\u0001\u0000\u0000\u0000RS\u0003\u0012\t\u0000ST\u0006"+
+ "\u0001\uffff\uffff\u0000TV\u0001\u0000\u0000\u0000UR\u0001\u0000\u0000"+
+ "\u0000UV\u0001\u0000\u0000\u0000V[\u0001\u0000\u0000\u0000WX\u0003\u0012"+
+ "\t\u0000XY\u0006\u0001\uffff\uffff\u0000Y[\u0001\u0000\u0000\u0000ZH\u0001"+
+ "\u0000\u0000\u0000ZW\u0001\u0000\u0000\u0000[\u0003\u0001\u0000\u0000"+
+ "\u0000\\]\u0003\u0006\u0003\u0000]^\u0006\u0002\uffff\uffff\u0000^c\u0001"+
+ "\u0000\u0000\u0000_`\u0003\f\u0006\u0000`a\u0006\u0002\uffff\uffff\u0000"+
+ "ac\u0001\u0000\u0000\u0000b\\\u0001\u0000\u0000\u0000b_\u0001\u0000\u0000"+
+ "\u0000c\u0005\u0001\u0000\u0000\u0000dh\u0006\u0003\uffff\uffff\u0000"+
+ "ei\u0005\u0001\u0000\u0000fg\u0005\u0002\u0000\u0000gi\u0006\u0003\uffff"+
+ "\uffff\u0000he\u0001\u0000\u0000\u0000hf\u0001\u0000\u0000\u0000ij\u0001"+
+ "\u0000\u0000\u0000jk\u0003\b\u0004\u0000kl\u0006\u0003\uffff\uffff\u0000"+
+ "l\u0007\u0001\u0000\u0000\u0000mn\u0003\n\u0005\u0000nu\u0006\u0004\uffff"+
+ "\uffff\u0000op\u0005\u0003\u0000\u0000pq\u0003\n\u0005\u0000qr\u0006\u0004"+
+ "\uffff\uffff\u0000rt\u0001\u0000\u0000\u0000so\u0001\u0000\u0000\u0000"+
+ "tw\u0001\u0000\u0000\u0000us\u0001\u0000\u0000\u0000uv\u0001\u0000\u0000"+
+ "\u0000vx\u0001\u0000\u0000\u0000wu\u0001\u0000\u0000\u0000xy\u0005\u0004"+
+ "\u0000\u0000y\t\u0001\u0000\u0000\u0000z{\u0006\u0005\uffff\uffff\u0000"+
+ "{|\u0005.\u0000\u0000|\u0081\u0006\u0005\uffff\uffff\u0000}~\u0005\u0005"+
+ "\u0000\u0000~\u007f\u0003\u0014\n\u0000\u007f\u0080\u0006\u0005\uffff"+
+ "\uffff\u0000\u0080\u0082\u0001\u0000\u0000\u0000\u0081}\u0001\u0000\u0000"+
+ "\u0000\u0081\u0082\u0001\u0000\u0000\u0000\u0082\u000b\u0001\u0000\u0000"+
+ "\u0000\u0083\u0086\u0006\u0006\uffff\uffff\u0000\u0084\u0085\u0005\u0002"+
+ "\u0000\u0000\u0085\u0087\u0006\u0006\uffff\uffff\u0000\u0086\u0084\u0001"+
+ "\u0000\u0000\u0000\u0086\u0087\u0001\u0000\u0000\u0000\u0087\u0088\u0001"+
+ "\u0000\u0000\u0000\u0088\u0089\u0005\u0006\u0000\u0000\u0089\u008a\u0005"+
+ ".\u0000\u0000\u008a\u008c\u0005\u0007\u0000\u0000\u008b\u008d\u0003\u000e"+
+ "\u0007\u0000\u008c\u008b\u0001\u0000\u0000\u0000\u008c\u008d\u0001\u0000"+
+ "\u0000\u0000\u008d\u008e\u0001\u0000\u0000\u0000\u008e\u008f\u0005\b\u0000"+
+ "\u0000\u008f\u0090\u0003\u0010\b\u0000\u0090\u0091\u0006\u0006\uffff\uffff"+
+ "\u0000\u0091\r\u0001\u0000\u0000\u0000\u0092\u0093\u0006\u0007\uffff\uffff"+
+ "\u0000\u0093\u0094\u0005.\u0000\u0000\u0094\u009a\u0006\u0007\uffff\uffff"+
+ "\u0000\u0095\u0096\u0005\u0003\u0000\u0000\u0096\u0097\u0005.\u0000\u0000"+
+ "\u0097\u0099\u0006\u0007\uffff\uffff\u0000\u0098\u0095\u0001\u0000\u0000"+
+ "\u0000\u0099\u009c\u0001\u0000\u0000\u0000\u009a\u0098\u0001\u0000\u0000"+
+ "\u0000\u009a\u009b\u0001\u0000\u0000\u0000\u009b\u000f\u0001\u0000\u0000"+
+ "\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009d\u009e\u0005\t\u0000\u0000"+
+ "\u009e\u009f\u0003\u0002\u0001\u0000\u009f\u00a0\u0006\b\uffff\uffff\u0000"+
+ "\u00a0\u00a1\u0005\n\u0000\u0000\u00a1\u0011\u0001\u0000\u0000\u0000\u00a2"+
+ "\u00a3\u0003\u0014\n\u0000\u00a3\u00a8\u0006\t\uffff\uffff\u0000\u00a4"+
+ "\u00a5\u0005\u0004\u0000\u0000\u00a5\u00a6\u0003\u0012\t\u0000\u00a6\u00a7"+
+ "\u0006\t\uffff\uffff\u0000\u00a7\u00a9\u0001\u0000\u0000\u0000\u00a8\u00a4"+
+ "\u0001\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a9\u0013"+
+ "\u0001\u0000\u0000\u0000\u00aa\u00ab\u0003\u0016\u000b\u0000\u00ab\u00ac"+
+ "\u0006\n\uffff\uffff\u0000\u00ac\u0015\u0001\u0000\u0000\u0000\u00ad\u00ae"+
+ "\u0003\u0018\f\u0000\u00ae\u00b5\u0006\u000b\uffff\uffff\u0000\u00af\u00b0"+
+ "\u0003B!\u0000\u00b0\u00b1\u0003\u0018\f\u0000\u00b1\u00b2\u0006\u000b"+
+ "\uffff\uffff\u0000\u00b2\u00b4\u0001\u0000\u0000\u0000\u00b3\u00af\u0001"+
+ "\u0000\u0000\u0000\u00b4\u00b7\u0001\u0000\u0000\u0000\u00b5\u00b3\u0001"+
+ "\u0000\u0000\u0000\u00b5\u00b6\u0001\u0000\u0000\u0000\u00b6\u0017\u0001"+
+ "\u0000\u0000\u0000\u00b7\u00b5\u0001\u0000\u0000\u0000\u00b8\u00bb\u0006"+
+ "\f\uffff\uffff\u0000\u00b9\u00ba\u0005+\u0000\u0000\u00ba\u00bc\u0006"+
+ "\f\uffff\uffff\u0000\u00bb\u00b9\u0001\u0000\u0000\u0000\u00bb\u00bc\u0001"+
+ "\u0000\u0000\u0000\u00bc\u00bd\u0001\u0000\u0000\u0000\u00bd\u00be\u0003"+
+ "\u001c\u000e\u0000\u00be\u00c4\u0006\f\uffff\uffff\u0000\u00bf\u00c0\u0003"+
+ "\u001a\r\u0000\u00c0\u00c1\u0006\f\uffff\uffff\u0000\u00c1\u00c3\u0001"+
+ "\u0000\u0000\u0000\u00c2\u00bf\u0001\u0000\u0000\u0000\u00c3\u00c6\u0001"+
+ "\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000\u00c4\u00c5\u0001"+
+ "\u0000\u0000\u0000\u00c5\u0019\u0001\u0000\u0000\u0000\u00c6\u00c4\u0001"+
+ "\u0000\u0000\u0000\u00c7\u00c8\u0006\r\uffff\uffff\u0000\u00c8\u00c9\u0005"+
+ "\u0007\u0000\u0000\u00c9\u00ca\u0003\u0012\t\u0000\u00ca\u00d1\u0006\r"+
+ "\uffff\uffff\u0000\u00cb\u00cc\u0005\u0003\u0000\u0000\u00cc\u00cd\u0003"+
+ "\u0012\t\u0000\u00cd\u00ce\u0006\r\uffff\uffff\u0000\u00ce\u00d0\u0001"+
+ "\u0000\u0000\u0000\u00cf\u00cb\u0001\u0000\u0000\u0000\u00d0\u00d3\u0001"+
+ "\u0000\u0000\u0000\u00d1\u00cf\u0001\u0000\u0000\u0000\u00d1\u00d2\u0001"+
+ "\u0000\u0000\u0000\u00d2\u00d4\u0001\u0000\u0000\u0000\u00d3\u00d1\u0001"+
+ "\u0000\u0000\u0000\u00d4\u00d5\u0005\b\u0000\u0000\u00d5\u00de\u0001\u0000"+
+ "\u0000\u0000\u00d6\u00d7\u0005\u0007\u0000\u0000\u00d7\u00de\u0005\b\u0000"+
+ "\u0000\u00d8\u00d9\u0005\u000b\u0000\u0000\u00d9\u00da\u0003\u0012\t\u0000"+
+ "\u00da\u00db\u0006\r\uffff\uffff\u0000\u00db\u00dc\u0005\f\u0000\u0000"+
+ "\u00dc\u00de\u0001\u0000\u0000\u0000\u00dd\u00c7\u0001\u0000\u0000\u0000"+
+ "\u00dd\u00d6\u0001\u0000\u0000\u0000\u00dd\u00d8\u0001\u0000\u0000\u0000"+
+ "\u00de\u001b\u0001\u0000\u0000\u0000\u00df\u00e0\u00051\u0000\u0000\u00e0"+
+ "\u0116\u0006\u000e\uffff\uffff\u0000\u00e1\u00e2\u00050\u0000\u0000\u00e2"+
+ "\u0116\u0006\u000e\uffff\uffff\u0000\u00e3\u00e4\u0005/\u0000\u0000\u00e4"+
+ "\u0116\u0006\u000e\uffff\uffff\u0000\u00e5\u00e6\u0005.\u0000\u0000\u00e6"+
+ "\u0116\u0006\u000e\uffff\uffff\u0000\u00e7\u00e8\u0005\r\u0000\u0000\u00e8"+
+ "\u0116\u0006\u000e\uffff\uffff\u0000\u00e9\u00ea\u0005\u000e\u0000\u0000"+
+ "\u00ea\u0116\u0006\u000e\uffff\uffff\u0000\u00eb\u00ec\u0005\u000f\u0000"+
+ "\u0000\u00ec\u00ed\u0003B!\u0000\u00ed\u00ee\u0006\u000e\uffff\uffff\u0000"+
+ "\u00ee\u0116\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005\u0006\u0000\u0000"+
+ "\u00f0\u00f1\u0005\u0007\u0000\u0000\u00f1\u00f2\u0003\u000e\u0007\u0000"+
+ "\u00f2\u00f3\u0005\b\u0000\u0000\u00f3\u00f4\u0003\u0010\b\u0000\u00f4"+
+ "\u00f5\u0006\u000e\uffff\uffff\u0000\u00f5\u0116\u0001\u0000\u0000\u0000"+
+ "\u00f6\u00f7\u0005\u0010\u0000\u0000\u00f7\u0116\u0006\u000e\uffff\uffff"+
+ "\u0000\u00f8\u00f9\u0005\u0007\u0000\u0000\u00f9\u00fa\u0003\u0002\u0001"+
+ "\u0000\u00fa\u00fb\u0005\b\u0000\u0000\u00fb\u00fc\u0006\u000e\uffff\uffff"+
+ "\u0000\u00fc\u0116\u0001\u0000\u0000\u0000\u00fd\u00fe\u0003 \u0010\u0000"+
+ "\u00fe\u00ff\u0006\u000e\uffff\uffff\u0000\u00ff\u0116\u0001\u0000\u0000"+
+ "\u0000\u0100\u0101\u0003\u001e\u000f\u0000\u0101\u0102\u0006\u000e\uffff"+
+ "\uffff\u0000\u0102\u0116\u0001\u0000\u0000\u0000\u0103\u0104\u0003\"\u0011"+
+ "\u0000\u0104\u0105\u0006\u000e\uffff\uffff\u0000\u0105\u0116\u0001\u0000"+
+ "\u0000\u0000\u0106\u0107\u0003$\u0012\u0000\u0107\u0108\u0006\u000e\uffff"+
+ "\uffff\u0000\u0108\u0116\u0001\u0000\u0000\u0000\u0109\u010a\u0003(\u0014"+
+ "\u0000\u010a\u010b\u0006\u000e\uffff\uffff\u0000\u010b\u0116\u0001\u0000"+
+ "\u0000\u0000\u010c\u010d\u0003*\u0015\u0000\u010d\u010e\u0006\u000e\uffff"+
+ "\uffff\u0000\u010e\u0116\u0001\u0000\u0000\u0000\u010f\u0110\u0003,\u0016"+
+ "\u0000\u0110\u0111\u0006\u000e\uffff\uffff\u0000\u0111\u0116\u0001\u0000"+
+ "\u0000\u0000\u0112\u0113\u0003<\u001e\u0000\u0113\u0114\u0006\u000e\uffff"+
+ "\uffff\u0000\u0114\u0116\u0001\u0000\u0000\u0000\u0115\u00df\u0001\u0000"+
+ "\u0000\u0000\u0115\u00e1\u0001\u0000\u0000\u0000\u0115\u00e3\u0001\u0000"+
+ "\u0000\u0000\u0115\u00e5\u0001\u0000\u0000\u0000\u0115\u00e7\u0001\u0000"+
+ "\u0000\u0000\u0115\u00e9\u0001\u0000\u0000\u0000\u0115\u00eb\u0001\u0000"+
+ "\u0000\u0000\u0115\u00ef\u0001\u0000\u0000\u0000\u0115\u00f6\u0001\u0000"+
+ "\u0000\u0000\u0115\u00f8\u0001\u0000\u0000\u0000\u0115\u00fd\u0001\u0000"+
+ "\u0000\u0000\u0115\u0100\u0001\u0000\u0000\u0000\u0115\u0103\u0001\u0000"+
+ "\u0000\u0000\u0115\u0106\u0001\u0000\u0000\u0000\u0115\u0109\u0001\u0000"+
+ "\u0000\u0000\u0115\u010c\u0001\u0000\u0000\u0000\u0115\u010f\u0001\u0000"+
+ "\u0000\u0000\u0115\u0112\u0001\u0000\u0000\u0000\u0116\u001d\u0001\u0000"+
+ "\u0000\u0000\u0117\u0118\u0006\u000f\uffff\uffff\u0000\u0118\u0124\u0005"+
+ "\u000b\u0000\u0000\u0119\u011a\u0003\u0012\t\u0000\u011a\u0121\u0006\u000f"+
+ "\uffff\uffff\u0000\u011b\u011c\u0005\u0003\u0000\u0000\u011c\u011d\u0003"+
+ "\u0012\t\u0000\u011d\u011e\u0006\u000f\uffff\uffff\u0000\u011e\u0120\u0001"+
+ "\u0000\u0000\u0000\u011f\u011b\u0001\u0000\u0000\u0000\u0120\u0123\u0001"+
+ "\u0000\u0000\u0000\u0121\u011f\u0001\u0000\u0000\u0000\u0121\u0122\u0001"+
+ "\u0000\u0000\u0000\u0122\u0125\u0001\u0000\u0000\u0000\u0123\u0121\u0001"+
+ "\u0000\u0000\u0000\u0124\u0119\u0001\u0000\u0000\u0000\u0124\u0125\u0001"+
+ "\u0000\u0000\u0000\u0125\u0126\u0001\u0000\u0000\u0000\u0126\u0127\u0005"+
+ "\f\u0000\u0000\u0127\u0128\u0006\u000f\uffff\uffff\u0000\u0128\u001f\u0001"+
+ "\u0000\u0000\u0000\u0129\u012a\u0006\u0010\uffff\uffff\u0000\u012a\u0136"+
+ "\u0005\t\u0000\u0000\u012b\u012c\u0003\u0012\t\u0000\u012c\u0133\u0006"+
+ "\u0010\uffff\uffff\u0000\u012d\u012e\u0005\u0003\u0000\u0000\u012e\u012f"+
+ "\u0003\u0012\t\u0000\u012f\u0130\u0006\u0010\uffff\uffff\u0000\u0130\u0132"+
+ "\u0001\u0000\u0000\u0000\u0131\u012d\u0001\u0000\u0000\u0000\u0132\u0135"+
+ "\u0001\u0000\u0000\u0000\u0133\u0131\u0001\u0000\u0000\u0000\u0133\u0134"+
+ "\u0001\u0000\u0000\u0000\u0134\u0137\u0001\u0000\u0000\u0000\u0135\u0133"+
+ "\u0001\u0000\u0000\u0000\u0136\u012b\u0001\u0000\u0000\u0000\u0136\u0137"+
+ "\u0001\u0000\u0000\u0000\u0137\u0138\u0001\u0000\u0000\u0000\u0138\u0139"+
+ "\u0005\n\u0000\u0000\u0139\u013a\u0006\u0010\uffff\uffff\u0000\u013a!"+
+ "\u0001\u0000\u0000\u0000\u013b\u013c\u0006\u0011\uffff\uffff\u0000\u013c"+
+ "\u014c\u0005-\u0000\u0000\u013d\u0149\u0005\u0007\u0000\u0000\u013e\u013f"+
+ "\u0003\u0012\t\u0000\u013f\u0146\u0006\u0011\uffff\uffff\u0000\u0140\u0141"+
+ "\u0005\u0003\u0000\u0000\u0141\u0142\u0003\u0012\t\u0000\u0142\u0143\u0006"+
+ "\u0011\uffff\uffff\u0000\u0143\u0145\u0001\u0000\u0000\u0000\u0144\u0140"+
+ "\u0001\u0000\u0000\u0000\u0145\u0148\u0001\u0000\u0000\u0000\u0146\u0144"+
+ "\u0001\u0000\u0000\u0000\u0146\u0147\u0001\u0000\u0000\u0000\u0147\u014a"+
+ "\u0001\u0000\u0000\u0000\u0148\u0146\u0001\u0000\u0000\u0000\u0149\u013e"+
+ "\u0001\u0000\u0000\u0000\u0149\u014a\u0001\u0000\u0000\u0000\u014a\u014b"+
+ "\u0001\u0000\u0000\u0000\u014b\u014d\u0005\b\u0000\u0000\u014c\u013d\u0001"+
+ "\u0000\u0000\u0000\u014c\u014d\u0001\u0000\u0000\u0000\u014d\u014e\u0001"+
+ "\u0000\u0000\u0000\u014e\u014f\u0006\u0011\uffff\uffff\u0000\u014f#\u0001"+
+ "\u0000\u0000\u0000\u0150\u0151\u0006\u0012\uffff\uffff\u0000\u0151\u0152"+
+ "\u0005\u0011\u0000\u0000\u0152\u0153\u0003\u0012\t\u0000\u0153\u0154\u0005"+
+ "\u0012\u0000\u0000\u0154\u0158\u0003\u0002\u0001\u0000\u0155\u0156\u0003"+
+ "&\u0013\u0000\u0156\u0157\u0006\u0012\uffff\uffff\u0000\u0157\u0159\u0001"+
+ "\u0000\u0000\u0000\u0158\u0155\u0001\u0000\u0000\u0000\u0158\u0159\u0001"+
+ "\u0000\u0000\u0000\u0159\u015a\u0001\u0000\u0000\u0000\u015a\u015b\u0005"+
+ "\u0013\u0000\u0000\u015b\u015c\u0006\u0012\uffff\uffff\u0000\u015c%\u0001"+
+ "\u0000\u0000\u0000\u015d\u015e\u0005\u0014\u0000\u0000\u015e\u015f\u0006"+
+ "\u0013\uffff\uffff\u0000\u015f\u0160\u0003\u0012\t\u0000\u0160\u0161\u0005"+
+ "\u0012\u0000\u0000\u0161\u0165\u0003\u0002\u0001\u0000\u0162\u0163\u0003"+
+ "&\u0013\u0000\u0163\u0164\u0006\u0013\uffff\uffff\u0000\u0164\u0166\u0001"+
+ "\u0000\u0000\u0000\u0165\u0162\u0001\u0000\u0000\u0000\u0165\u0166\u0001"+
+ "\u0000\u0000\u0000\u0166\u0167\u0001\u0000\u0000\u0000\u0167\u0168\u0006"+
+ "\u0013\uffff\uffff\u0000\u0168\u016e\u0001\u0000\u0000\u0000\u0169\u016a"+
+ "\u0005\u0015\u0000\u0000\u016a\u016b\u0003\u0002\u0001\u0000\u016b\u016c"+
+ "\u0006\u0013\uffff\uffff\u0000\u016c\u016e\u0001\u0000\u0000\u0000\u016d"+
+ "\u015d\u0001\u0000\u0000\u0000\u016d\u0169\u0001\u0000\u0000\u0000\u016e"+
+ "\'\u0001\u0000\u0000\u0000\u016f\u0170\u0005\u0016\u0000\u0000\u0170\u0171"+
+ "\u0003\u0012\t\u0000\u0171\u0172\u0005\u0017\u0000\u0000\u0172\u0173\u0003"+
+ "\u0002\u0001\u0000\u0173\u0174\u0005\u0018\u0000\u0000\u0174\u0175\u0006"+
+ "\u0014\uffff\uffff\u0000\u0175)\u0001\u0000\u0000\u0000\u0176\u0177\u0005"+
+ "\u0017\u0000\u0000\u0177\u0178\u0003\u0002\u0001\u0000\u0178\u0179\u0005"+
+ "\u0016\u0000\u0000\u0179\u017a\u0003\u0012\t\u0000\u017a\u017b\u0005\u0018"+
+ "\u0000\u0000\u017b\u017c\u0006\u0015\uffff\uffff\u0000\u017c+\u0001\u0000"+
+ "\u0000\u0000\u017d\u017e\u0005\u0019\u0000\u0000\u017e\u017f\u0003\u0002"+
+ "\u0001\u0000\u017f\u0180\u0005\u0003\u0000\u0000\u0180\u0181\u0003\u0012"+
+ "\t\u0000\u0181\u0182\u0005\u0003\u0000\u0000\u0182\u0183\u0003\u0012\t"+
+ "\u0000\u0183\u0184\u0005\u0017\u0000\u0000\u0184\u0185\u0003\u0002\u0001"+
+ "\u0000\u0185\u0186\u0005\u0018\u0000\u0000\u0186\u0187\u0006\u0016\uffff"+
+ "\uffff\u0000\u0187-\u0001\u0000\u0000\u0000\u0188\u0189\u00030\u0018\u0000"+
+ "\u0189\u018a\u0006\u0017\uffff\uffff\u0000\u018a\u018f\u0001\u0000\u0000"+
+ "\u0000\u018b\u018c\u00032\u0019\u0000\u018c\u018d\u0006\u0017\uffff\uffff"+
+ "\u0000\u018d\u018f\u0001\u0000\u0000\u0000\u018e\u0188\u0001\u0000\u0000"+
+ "\u0000\u018e\u018b\u0001\u0000\u0000\u0000\u018f/\u0001\u0000\u0000\u0000"+
+ "\u0190\u0191\u00032\u0019\u0000\u0191\u0192\u0005\u001a\u0000\u0000\u0192"+
+ "\u0193\u0003.\u0017\u0000\u0193\u0194\u0006\u0018\uffff\uffff\u0000\u0194"+
+ "1\u0001\u0000\u0000\u0000\u0195\u0196\u00034\u001a\u0000\u0196\u0197\u0006"+
+ "\u0019\uffff\uffff\u0000\u0197\u01d1\u0001\u0000\u0000\u0000\u0198\u0199"+
+ "\u00036\u001b\u0000\u0199\u019a\u0006\u0019\uffff\uffff\u0000\u019a\u01d1"+
+ "\u0001\u0000\u0000\u0000\u019b\u019c\u00038\u001c\u0000\u019c\u019d\u0006"+
+ "\u0019\uffff\uffff\u0000\u019d\u01d1\u0001\u0000\u0000\u0000\u019e\u019f"+
+ "\u0003:\u001d\u0000\u019f\u01a0\u0006\u0019\uffff\uffff\u0000\u01a0\u01d1"+
+ "\u0001\u0000\u0000\u0000\u01a1\u01a2\u0005.\u0000\u0000\u01a2\u01a7\u0006"+
+ "\u0019\uffff\uffff\u0000\u01a3\u01a4\u0005\u001b\u0000\u0000\u01a4\u01a5"+
+ "\u0003.\u0017\u0000\u01a5\u01a6\u0006\u0019\uffff\uffff\u0000\u01a6\u01a8"+
+ "\u0001\u0000\u0000\u0000\u01a7\u01a3\u0001\u0000\u0000\u0000\u01a7\u01a8"+
+ "\u0001\u0000\u0000\u0000\u01a8\u01a9\u0001\u0000\u0000\u0000\u01a9\u01d1"+
+ "\u0006\u0019\uffff\uffff\u0000\u01aa\u01ad\u0006\u0019\uffff\uffff\u0000"+
+ "\u01ab\u01ac\u0005+\u0000\u0000\u01ac\u01ae\u0006\u0019\uffff\uffff\u0000"+
+ "\u01ad\u01ab\u0001\u0000\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000"+
+ "\u01ae\u01af\u0001\u0000\u0000\u0000\u01af\u01b0\u00051\u0000\u0000\u01b0"+
+ "\u01d1\u0006\u0019\uffff\uffff\u0000\u01b1\u01b2\u00050\u0000\u0000\u01b2"+
+ "\u01d1\u0006\u0019\uffff\uffff\u0000\u01b3\u01b4\u0005/\u0000\u0000\u01b4"+
+ "\u01d1\u0006\u0019\uffff\uffff\u0000\u01b5\u01b6\u0005\r\u0000\u0000\u01b6"+
+ "\u01d1\u0006\u0019\uffff\uffff\u0000\u01b7\u01b8\u0005\u000e\u0000\u0000"+
+ "\u01b8\u01d1\u0006\u0019\uffff\uffff\u0000\u01b9\u01ba\u0005\u001c\u0000"+
+ "\u0000\u01ba\u01bb\u0005\u001d\u0000\u0000\u01bb\u01d1\u0006\u0019\uffff"+
+ "\uffff\u0000\u01bc\u01bd\u0005\u001c\u0000\u0000\u01bd\u01be\u0005\u001e"+
+ "\u0000\u0000\u01be\u01d1\u0006\u0019\uffff\uffff\u0000\u01bf\u01c0\u0005"+
+ "\u001c\u0000\u0000\u01c0\u01c1\u0005\u001f\u0000\u0000\u01c1\u01d1\u0006"+
+ "\u0019\uffff\uffff\u0000\u01c2\u01c3\u0005\u001c\u0000\u0000\u01c3\u01c4"+
+ "\u0005 \u0000\u0000\u01c4\u01d1\u0006\u0019\uffff\uffff\u0000\u01c5\u01c6"+
+ "\u0005\u001c\u0000\u0000\u01c6\u01c7\u0005!\u0000\u0000\u01c7\u01d1\u0006"+
+ "\u0019\uffff\uffff\u0000\u01c8\u01c9\u0005\u001c\u0000\u0000\u01c9\u01ca"+
+ "\u0005\u0006\u0000\u0000\u01ca\u01d1\u0006\u0019\uffff\uffff\u0000\u01cb"+
+ "\u01cc\u0005\u0007\u0000\u0000\u01cc\u01cd\u0003.\u0017\u0000\u01cd\u01ce"+
+ "\u0005\b\u0000\u0000\u01ce\u01cf\u0006\u0019\uffff\uffff\u0000\u01cf\u01d1"+
+ "\u0001\u0000\u0000\u0000\u01d0\u0195\u0001\u0000\u0000\u0000\u01d0\u0198"+
+ "\u0001\u0000\u0000\u0000\u01d0\u019b\u0001\u0000\u0000\u0000\u01d0\u019e"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01a1\u0001\u0000\u0000\u0000\u01d0\u01aa"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01b1\u0001\u0000\u0000\u0000\u01d0\u01b3"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01b5\u0001\u0000\u0000\u0000\u01d0\u01b7"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01b9\u0001\u0000\u0000\u0000\u01d0\u01bc"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01bf\u0001\u0000\u0000\u0000\u01d0\u01c2"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01c5\u0001\u0000\u0000\u0000\u01d0\u01c8"+
+ "\u0001\u0000\u0000\u0000\u01d0\u01cb\u0001\u0000\u0000\u0000\u01d13\u0001"+
+ "\u0000\u0000\u0000\u01d2\u01d3\u0005\"\u0000\u0000\u01d3\u01d4\u0006\u001a"+
+ "\uffff\uffff\u0000\u01d45\u0001\u0000\u0000\u0000\u01d5\u01d6\u0006\u001b"+
+ "\uffff\uffff\u0000\u01d6\u01e6\u0005-\u0000\u0000\u01d7\u01e3\u0005\u0007"+
+ "\u0000\u0000\u01d8\u01d9\u0003.\u0017\u0000\u01d9\u01e0\u0006\u001b\uffff"+
+ "\uffff\u0000\u01da\u01db\u0005\u0003\u0000\u0000\u01db\u01dc\u0003.\u0017"+
+ "\u0000\u01dc\u01dd\u0006\u001b\uffff\uffff\u0000\u01dd\u01df\u0001\u0000"+
+ "\u0000\u0000\u01de\u01da\u0001\u0000\u0000\u0000\u01df\u01e2\u0001\u0000"+
+ "\u0000\u0000\u01e0\u01de\u0001\u0000\u0000\u0000\u01e0\u01e1\u0001\u0000"+
+ "\u0000\u0000\u01e1\u01e4\u0001\u0000\u0000\u0000\u01e2\u01e0\u0001\u0000"+
+ "\u0000\u0000\u01e3\u01d8\u0001\u0000\u0000\u0000\u01e3\u01e4\u0001\u0000"+
+ "\u0000\u0000\u01e4\u01e5\u0001\u0000\u0000\u0000\u01e5\u01e7\u0005\b\u0000"+
+ "\u0000\u01e6\u01d7\u0001\u0000\u0000\u0000\u01e6\u01e7\u0001\u0000\u0000"+
+ "\u0000\u01e7\u01e8\u0001\u0000\u0000\u0000\u01e8\u01e9\u0006\u001b\uffff"+
+ "\uffff\u0000\u01e97\u0001\u0000\u0000\u0000\u01ea\u01eb\u0006\u001c\uffff"+
+ "\uffff\u0000\u01eb\u01f7\u0005\u000b\u0000\u0000\u01ec\u01ed\u0003.\u0017"+
+ "\u0000\u01ed\u01f4\u0006\u001c\uffff\uffff\u0000\u01ee\u01ef\u0005\u0003"+
+ "\u0000\u0000\u01ef\u01f0\u0003.\u0017\u0000\u01f0\u01f1\u0006\u001c\uffff"+
+ "\uffff\u0000\u01f1\u01f3\u0001\u0000\u0000\u0000\u01f2\u01ee\u0001\u0000"+
+ "\u0000\u0000\u01f3\u01f6\u0001\u0000\u0000\u0000\u01f4\u01f2\u0001\u0000"+
+ "\u0000\u0000\u01f4\u01f5\u0001\u0000\u0000\u0000\u01f5\u01f8\u0001\u0000"+
+ "\u0000\u0000\u01f6\u01f4\u0001\u0000\u0000\u0000\u01f7\u01ec\u0001\u0000"+
+ "\u0000\u0000\u01f7\u01f8\u0001\u0000\u0000\u0000\u01f8\u01f9\u0001\u0000"+
+ "\u0000\u0000\u01f9\u01fa\u0005\f\u0000\u0000\u01fa\u01fb\u0006\u001c\uffff"+
+ "\uffff\u0000\u01fb9\u0001\u0000\u0000\u0000\u01fc\u0208\u0005\t\u0000"+
+ "\u0000\u01fd\u01fe\u0003.\u0017\u0000\u01fe\u0205\u0006\u001d\uffff\uffff"+
+ "\u0000\u01ff\u0200\u0005\u0003\u0000\u0000\u0200\u0201\u0003.\u0017\u0000"+
+ "\u0201\u0202\u0006\u001d\uffff\uffff\u0000\u0202\u0204\u0001\u0000\u0000"+
+ "\u0000\u0203\u01ff\u0001\u0000\u0000\u0000\u0204\u0207\u0001\u0000\u0000"+
+ "\u0000\u0205\u0203\u0001\u0000\u0000\u0000\u0205\u0206\u0001\u0000\u0000"+
+ "\u0000\u0206\u0209\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000\u0000"+
+ "\u0000\u0208\u01fd\u0001\u0000\u0000\u0000\u0208\u0209\u0001\u0000\u0000"+
+ "\u0000\u0209\u020a\u0001\u0000\u0000\u0000\u020a\u020b\u0005\n\u0000\u0000"+
+ "\u020b;\u0001\u0000\u0000\u0000\u020c\u020d\u0005#\u0000\u0000\u020d\u020e"+
+ "\u0003\u0012\t\u0000\u020e\u020f\u0005$\u0000\u0000\u020f\u0210\u0003"+
+ ">\u001f\u0000\u0210\u0211\u0005%\u0000\u0000\u0211\u0212\u0006\u001e\uffff"+
+ "\uffff\u0000\u0212=\u0001\u0000\u0000\u0000\u0213\u0214\u0006\u001f\uffff"+
+ "\uffff\u0000\u0214\u0215\u0003@ \u0000\u0215\u021c\u0006\u001f\uffff\uffff"+
+ "\u0000\u0216\u0217\u0005&\u0000\u0000\u0217\u0218\u0003@ \u0000\u0218"+
+ "\u0219\u0006\u001f\uffff\uffff\u0000\u0219\u021b\u0001\u0000\u0000\u0000"+
+ "\u021a\u0216\u0001\u0000\u0000\u0000\u021b\u021e\u0001\u0000\u0000\u0000"+
+ "\u021c\u021a\u0001\u0000\u0000\u0000\u021c\u021d\u0001\u0000\u0000\u0000"+
+ "\u021d?\u0001\u0000\u0000\u0000\u021e\u021c\u0001\u0000\u0000\u0000\u021f"+
+ "\u0220\u0003.\u0017\u0000\u0220\u0221\u0006 \uffff\uffff\u0000\u0221\u0222"+
+ "\u0005\'\u0000\u0000\u0222\u0223\u0003\u0002\u0001\u0000\u0223\u0224\u0006"+
+ " \uffff\uffff\u0000\u0224A\u0001\u0000\u0000\u0000\u0225\u0226\u0005,"+
+ "\u0000\u0000\u0226\u022a\u0006!\uffff\uffff\u0000\u0227\u0228\u0005+\u0000"+
+ "\u0000\u0228\u022a\u0006!\uffff\uffff\u0000\u0229\u0225\u0001\u0000\u0000"+
+ "\u0000\u0229\u0227\u0001\u0000\u0000\u0000\u022aC\u0001\u0000\u0000\u0000"+
+ "(OUZbhu\u0081\u0086\u008c\u009a\u00a8\u00b5\u00bb\u00c4\u00d1\u00dd\u0115"+
+ "\u0121\u0124\u0133\u0136\u0146\u0149\u014c\u0158\u0165\u016d\u018e\u01a7"+
+ "\u01ad\u01d0\u01e0\u01e3\u01e6\u01f4\u01f7\u0205\u0208\u021c\u0229";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaVisitor.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaVisitor.java
index d88565a..2a437a6 100644
--- a/src/main/java/org/programsnail/truffle_lama/parser/LamaVisitor.java
+++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaVisitor.java
@@ -16,12 +16,6 @@ public interface LamaVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitLama(LamaParser.LamaContext ctx);
- /**
- * Visit a parse tree produced by {@link LamaParser#import_expression}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitImport_expression(LamaParser.Import_expressionContext ctx);
/**
* Visit a parse tree produced by {@link LamaParser#scope_expression}.
* @param ctx the parse tree
@@ -70,30 +64,6 @@ public interface LamaVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitFunction_body(LamaParser.Function_bodyContext ctx);
- /**
- * Visit a parse tree produced by {@link LamaParser#infix_definition}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitInfix_definition(LamaParser.Infix_definitionContext ctx);
- /**
- * Visit a parse tree produced by {@link LamaParser#infix_head}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitInfix_head(LamaParser.Infix_headContext ctx);
- /**
- * Visit a parse tree produced by {@link LamaParser#infixity}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitInfixity(LamaParser.InfixityContext ctx);
- /**
- * Visit a parse tree produced by {@link LamaParser#level}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLevel(LamaParser.LevelContext ctx);
/**
* Visit a parse tree produced by {@link LamaParser#expression}.
* @param ctx the parse tree
@@ -238,4 +208,10 @@ public interface LamaVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitCase_branch(LamaParser.Case_branchContext ctx);
+ /**
+ * Visit a parse tree produced by {@link LamaParser#any_infix}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitAny_infix(LamaParser.Any_infixContext ctx);
}
\ No newline at end of file