most part of attributed grammar (without scopes and string casts) done, if node fixed

This commit is contained in:
ProgramSnail 2025-06-15 16:01:47 +03:00
parent 515207481f
commit b08a2e0fff
13 changed files with 1849 additions and 1773 deletions

View file

@ -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);
}
}

View file

@ -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<LamaExpressionNode> 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<TruffleString> args]
: { $args = new ArrayList<TruffleString>(); }
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<LamaExpressionNode> args, Optional<LamaExpressionNode> access_index]
: { $args = new ArrayList<LamaExpressionNode>(); $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<LamaExpressionNode> elems = new ArrayList<LamaExpressionNode>(); }
'[' (
expression { elems.addLast($expression.result); }
(','
expression { elems.addLast($expression.result); }
)*
)? ']'
{ $result = factory.createArrayNode(elems); }
;
list_expression returns [LamaExpressionNode result]
: { List<LamaExpressionNode> elems = new ArrayList<LamaExpressionNode>(); }
'{' (
expression { elems.addLast($expression.result); }
(','
expression {elems.addLast($expression.result); }
)*
)? '}'
{ $result = factory.createListSexpNode(elems); }
;
s_expression returns [LamaExpressionNode result]
: { List<LamaExpressionNode> elems = new ArrayList<LamaExpressionNode>(); }
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<LamaPattern> elems = new ArrayList<LamaPattern>(); }
UIDENT
('(' (
pattern { elems.addLast($pattern.result); }
(','
pattern { elems.addLast($pattern.result); }
)*)?
')')?
{ $result = factory.createSexpPattern($UIDENT, elems); }
;
array_pattern returns [LamaPattern result]
: { List<LamaPattern> elems = new ArrayList<LamaPattern>(); }
'[' (
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<LamaPattern> pats, List<LamaExpressionNode> exprs]
: { $pats = new ArrayList<LamaPattern>(); $exprs = new ArrayList<LamaExpressionNode> 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]+;

File diff suppressed because one or more lines are too long

View file

@ -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

View file

@ -24,18 +24,6 @@ public class LamaBaseListener implements LamaListener {
* <p>The default implementation does nothing.</p>
*/
@Override public void exitLama(LamaParser.LamaContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterImport_expression(LamaParser.Import_expressionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitImport_expression(LamaParser.Import_expressionContext ctx) { }
/**
* {@inheritDoc}
*
@ -132,54 +120,6 @@ public class LamaBaseListener implements LamaListener {
* <p>The default implementation does nothing.</p>
*/
@Override public void exitFunction_body(LamaParser.Function_bodyContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterInfix_definition(LamaParser.Infix_definitionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitInfix_definition(LamaParser.Infix_definitionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterInfix_head(LamaParser.Infix_headContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitInfix_head(LamaParser.Infix_headContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterInfixity(LamaParser.InfixityContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitInfixity(LamaParser.InfixityContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterLevel(LamaParser.LevelContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitLevel(LamaParser.LevelContext ctx) { }
/**
* {@inheritDoc}
*
@ -468,6 +408,18 @@ public class LamaBaseListener implements LamaListener {
* <p>The default implementation does nothing.</p>
*/
@Override public void exitCase_branch(LamaParser.Case_branchContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterAny_infix(LamaParser.Any_infixContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitAny_infix(LamaParser.Any_infixContext ctx) { }
/**
* {@inheritDoc}

View file

@ -19,13 +19,6 @@ public class LamaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements L
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLama(LamaParser.LamaContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitImport_expression(LamaParser.Import_expressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@ -82,34 +75,6 @@ public class LamaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements L
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFunction_body(LamaParser.Function_bodyContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInfix_definition(LamaParser.Infix_definitionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInfix_head(LamaParser.Infix_headContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInfixity(LamaParser.InfixityContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLevel(LamaParser.LevelContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@ -278,4 +243,11 @@ public class LamaBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements L
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitCase_branch(LamaParser.Case_branchContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAny_infix(LamaParser.Any_infixContext ctx) { return visitChildren(ctx); }
}

File diff suppressed because one or more lines are too long

View file

@ -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 {

View file

@ -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

View file

@ -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);
}

View file

@ -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;

View file

@ -16,12 +16,6 @@ public interface LamaVisitor<T> extends ParseTreeVisitor<T> {
* @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<T> extends ParseTreeVisitor<T> {
* @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<T> extends ParseTreeVisitor<T> {
* @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);
}