diff options
Diffstat (limited to 'sci2jsyacc.py')
-rwxr-xr-x | sci2jsyacc.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/sci2jsyacc.py b/sci2jsyacc.py index cc293477..44b66675 100755 --- a/sci2jsyacc.py +++ b/sci2jsyacc.py @@ -15,7 +15,7 @@ import sys import pickle import ply.yacc as yacc -from sci2jslex import tokens, JOBTYPES, BOOLEAN_TYPE, DOUBLE_TYPE, MATRIX_TYPE, NULL_TYPE, OBJECT_TYPE, STRING_TYPE, VECTOR_TYPE +from sci2jslex import tokens, JOBTYPES, BOOLEAN_TYPE, DOUBLE_TYPE, LIST_TYPE, MATRIX_TYPE, NULL_TYPE, OBJECT_TYPE, STRING_TYPE, VECTOR_TYPE precedence = ( ('left', 'COLON'), @@ -32,6 +32,7 @@ precedence = ( PARSE_MAP = { BOOLEAN_TYPE: 'parseBoolean', DOUBLE_TYPE: 'parseFloat', + LIST_TYPE: '', MATRIX_TYPE: 'inverse', NULL_TYPE: 'parseFloat', OBJECT_TYPE: '', @@ -42,6 +43,7 @@ PARSE_MAP = { MODEL_MAP = { BOOLEAN_TYPE: 'ScilabBoolean', DOUBLE_TYPE: 'ScilabDouble', + LIST_TYPE: '', MATRIX_TYPE: '', NULL_TYPE: '', OBJECT_TYPE: '', @@ -510,8 +512,8 @@ def p_modelvar_modelvar_expression(p): 'modelvar : modelvar OPENBRACKET expression CLOSEBRACKET' p[0] = '%s[%s]' % (p[1], p[3]) -def p_model_var_assignment_expression(p): - 'assignment : MODEL DOT modelvar ASSIGNMENT expression' +def p_assignment_model_modelvar_assignment_modelexpression(p): + 'assignment : MODEL DOT modelvar ASSIGNMENT modelexpression' var = 'this.%s.%s' % (p[1], p[3]) vartype = MODEL_MAP.get(p[5][1], 'ScilabDouble') if vartype != '': @@ -520,6 +522,10 @@ def p_model_var_assignment_expression(p): p[0] = '%*s%s = %s' % (INDENT_LEVEL * INDENT_SIZE, ' ', var, p[5][0]) add_var_vartype(var, p[5][1]) +def p_modelexpression_expression(p): + 'modelexpression : expression' + p[0] = p[1] + def p_model_in_assignment_expression(p): 'assignment : MODEL DOT IN ASSIGNMENT expression' var = 'this.%s.%s1' % (p[1], p[3]) @@ -1001,7 +1007,7 @@ def p_term_function_parameters(p): # list(2,3) def p_term_list_parameters(p): 'term : LIST OPENBRACKET list CLOSEBRACKET' - p[0] = ('%s(%s)' % (p[1], p[3][0]), VECTOR_TYPE) + p[0] = ('%s(%s)' % (p[1], p[3][0]), LIST_TYPE) # gettext("abc") def p_term_gettext_parameter(p): @@ -1016,7 +1022,7 @@ def p_term_function(p): # list() def p_term_list(p): 'term : LIST OPENBRACKET CLOSEBRACKET' - p[0] = ('%s()' % (p[1]), VECTOR_TYPE) + p[0] = ('%s()' % (p[1]), LIST_TYPE) # $ def p_term_lastindex(p): |