%%
module
- : optional_statements_or_definitions {
+ : optional_statements {
$$ = sltNodeMakeModule($1);
*moduleOut = $$;
}
;
-optional_statements_or_definitions
- : /* Nothing */ {
+/*optional_statements_or_definitions
+ : *//* Nothing *//* {
$$ = NULL;
}
| statements_or_definitions
;
statements_or_definitions
- : definition {
+ : function_definition {
$$ = sltNodeMakeSequence(NULL, $1);
}
| statement {
$$ = sltNodeMakeSequence(NULL, $1);
}
- | statements_or_definitions definition {
+ | statements_or_definitions function_definition {
$$ = sltNodeMakeSequence($1, $2);
}
| statements_or_definitions statement {
$$ = sltNodeMakeSequence($1, $2);
}
- ;
+ ;*/
-definition
+/*definition
: function_definition
- /*| type_definition*/
+ | type_definition
| variable_definition ';'
- ;
+ ;*/
function_definition
- : IDENTIFIER IDENTIFIER '(' optional_parameter_definitions ')' '{' optional_statements '}' {
+ : type IDENTIFIER '(' optional_parameter_definitions ')' '{' optional_statements '}' {
$$ = sltNodeMakeFunctionDefinition($1, $2, $4, $7);
}
;
;
parameter_definition
- : IDENTIFIER IDENTIFIER {
+ : type IDENTIFIER {
$$ = sltNodeMakeFunctionParameterDefinition($1, $2);
}
;
;*/
variable_definition
- : IDENTIFIER IDENTIFIER {
+ : type IDENTIFIER {
$$ = sltNodeMakeVariableDefinition($1, $2, NULL);
}
- | IDENTIFIER IDENTIFIER '=' expression {
+ | type IDENTIFIER '=' expression {
$$ = sltNodeMakeVariableDefinition($1, $2, $4);
}
;
+type
+ : IDENTIFIER {
+ $$ = $1;//sltNodeMakeTypeDefinition($1, 1);
+ }
+ | '[' type ':' INT ']' {
+ $$ = $2;//sltNodeMakeTypeDefinition($1, $2);
+ }
+ ;
+
optional_statements
: /* nothing */ {
$$ = NULL;
: ';' {
$$ = NULL; /* Otherwise this will pass up the ';' character */
}
+ | function_definition
| variable_definition ';'
| "return" optional_expression ';' {
$$ = sltNodeMakeReturn($2);
$$ = sltNodeMakeFunctionCall($1, $3);
}
| postfix_expression '.' IDENTIFIER {
- $$ = sltNodeMakeTypeAccess($1, $3);
+ $$ = sltNodeMakeMemberAccess($1, $3);
}
/*| postfix_expression postfix_unary_operator {
$$ = sltNodeMakeUnaryOperation($1, $2);