summaryrefslogtreecommitdiff
path: root/sci2jsyacc.py
diff options
context:
space:
mode:
Diffstat (limited to 'sci2jsyacc.py')
-rwxr-xr-xsci2jsyacc.py74
1 files changed, 70 insertions, 4 deletions
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
index 8305bbc0..a7449e39 100755
--- a/sci2jsyacc.py
+++ b/sci2jsyacc.py
@@ -165,7 +165,7 @@ def p_functionblock_functionstatement_statementblock_endfunction(p):
p[0] = ''
def p_jobfunctionstatement_function_var(p):
- 'jobfunctionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL'
+ 'jobfunctionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA ARG1 COMMA VAR CLOSEBRACKET EOL'
global SCICOS_BLOCK_NAME
SCICOS_BLOCK_NAME = p[4]
for var in (p[6], p[8], p[10]):
@@ -173,7 +173,7 @@ def p_jobfunctionstatement_function_var(p):
p[0] = SCICOS_BLOCK_NAME
def p_jobfunctionstatement_function_functionname(p):
- 'jobfunctionstatement : FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL'
+ 'jobfunctionstatement : FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET JOB COMMA ARG1 COMMA VAR CLOSEBRACKET EOL'
global SCICOS_BLOCK_NAME
SCICOS_BLOCK_NAME = p[4][0]
for var in (p[6], p[8], p[10]):
@@ -599,8 +599,8 @@ def p_lterm_assignment_expression(p):
value = 'new ScilabString(["xstringb(orig(1),orig(2),\\"%s\\",sz(1),sz(2));"])' % (SCICOS_BLOCK_NAME)
if var in LOCAL_VARS and '.' not in var:
prefix = 'var '
- p[0] = '%*s%s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', prefix, var, value)
add_var_vartype(var, p[3][1])
+ p[0] = '%*s%s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', prefix, var, value)
if len(LAST_ARRAY) > 0:
VAR_DEFINITIONS[var] = LAST_ARRAY
if AT_START and INDENT_LEVEL == 2:
@@ -613,11 +613,39 @@ def p_model_assignment_expression(p):
global INIT_VARS
var = p[1]
add_global_var(var)
- p[0] = '%*s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', print_var(var), p[3][0])
add_var_vartype(var, p[3][1])
+ p[0] = '%*s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', print_var(var), p[3][0])
+ if AT_START and INDENT_LEVEL == 2:
+ INIT_VARS += p[0]
+
+def p_lterm_assignment_arg1(p):
+ '''assignment : lterm ASSIGNMENT ARG1 EOL
+ | ARG1 ASSIGNMENT expression'''
+ p[0] = ''
+
+def p_model_assignment_arg1_model(p):
+ '''assignment : GRAPHICS ASSIGNMENT ARG1 DOT GRAPHICS EOL
+ | MODEL ASSIGNMENT ARG1 DOT MODEL EOL
+ | ARG1 DOT GRAPHICS ASSIGNMENT GRAPHICS EOL
+ | ARG1 DOT MODEL ASSIGNMENT MODEL EOL'''
+ p[0] = ''
+
+def p_arg1_var_assignment_expression(p):
+ 'assignment : ARG1 DOT VAR ASSIGNMENT expression EOL'
+ global INIT_VARS
+ var = p[3]
+ add_global_var(var)
+ add_var_vartype(var, p[5][1])
+ p[0] = '%*s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', print_var(var), p[5][0])
if AT_START and INDENT_LEVEL == 2:
INIT_VARS += p[0]
+# arg1(['model', 'rpar', 'objs', 1])
+# TODO: need a method to set type of the variable
+def p_assignment_arg1_key_assignment_expression(p):
+ 'assignment : ARG1 OPENBRACKET expression CLOSEBRACKET ASSIGNMENT expression EOL'
+ p[0] = '%*sgetObjectFromKeyList(%s, %s) = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', 'this', p[3][0], p[6][0])
+
def p_modelvar_modelvar_var(p):
'modelvar : modelvar DOT VAR'
p[0] = '%s.%s' % (p[1], p[3])
@@ -647,6 +675,19 @@ def p_assignment_model_modelvar_assignment_modelexpression(p):
if AT_START and INDENT_LEVEL == 2:
INIT_VARS += p[0]
+def p_assignment_arg1_model_modelvar_assignment_expression(p):
+ '''assignment : ARG1 DOT GRAPHICS DOT modelvar ASSIGNMENT expression EOL
+ | ARG1 DOT MODEL DOT modelvar ASSIGNMENT expression EOL'''
+ global INIT_VARS
+ var = '%s.%s' % (print_var(p[3]), p[5])
+ value = p[7][0]
+ vartype = p[7][1]
+ if var != value:
+ add_var_vartype(var, vartype)
+ p[0] = '%*s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', var, value)
+ if AT_START and INDENT_LEVEL == 2:
+ INIT_VARS += p[0]
+
def p_modelexpression_list_modelexpressionlist(p):
'modelexpression : LIST OPENBRACKET modelexpressionlist CLOSEBRACKET'
value = '%s(%s)' % (p[1], p[3])
@@ -1004,6 +1045,10 @@ def p_list_list_expression(p):
| list COMMA listcall'''
p[0] = '%s,%s' % (p[1], p[3][0])
+def p_list_list_arg1(p):
+ 'list : list COMMA ARG1'
+ p[0] = '%s,%s' % (p[1], 'this')
+
def p_list_list_var_expression(p):
'''list : list COMMA VAR ASSIGNMENT expression
| list COMMA GRAPHICS ASSIGNMENT expression
@@ -1023,6 +1068,10 @@ def p_list_expression(p):
| listcall'''
p[0] = '%s' % (p[1][0])
+def p_list_arg1(p):
+ 'list : ARG1'
+ p[0] = '%s' % ('this')
+
def p_list_var_expression(p):
'''list : VAR ASSIGNMENT expression
| VAR ASSIGNMENT listcall'''
@@ -1356,6 +1405,12 @@ def p_term_function_parameters(p):
'term : FUNCTIONNAME OPENBRACKET list CLOSEBRACKET'
p[0] = ('%s(%s)' % (p[1][0], p[3]), p[1][1])
+# arg1(['model', 'rpar', 'objs', 1])
+# TODO: need a method to get type of the variable
+def p_term_arg1_key(p):
+ 'term : ARG1 OPENBRACKET expression CLOSEBRACKET'
+ p[0] = ('getObjectFromKeyList(%s, %s)' % ('this', p[3][0]), DOUBLE_TYPE)
+
# list(2,3)
def p_listcall_list_parameters(p):
'listcall : LIST OPENBRACKET list CLOSEBRACKET'
@@ -1451,6 +1506,17 @@ def p_termvar_var(p):
vartype = get_var_vartype(var)
p[0] = ('%s' % (print_var(var)), vartype)
+# arg1.model.ipar
+def p_termvar_arg1_model_var(p):
+ '''termvar : ARG1 DOT GRAPHICS DOT VAR
+ | ARG1 DOT MODEL DOT VAR'''
+ var = p[3]
+ add_global_var(var)
+ add_object_var(var)
+ var = '%s.%s' % (var, p[5])
+ vartype = get_var_vartype(var)
+ p[0] = ('%s' % (print_var(var)), vartype)
+
# in
def p_termvar_in(p):
'termvar : IN'