diff options
Diffstat (limited to 'sci2jsyacc.py')
-rwxr-xr-x | sci2jsyacc.py | 133 |
1 files changed, 89 insertions, 44 deletions
diff --git a/sci2jsyacc.py b/sci2jsyacc.py index 5f7463ba..2b504049 100755 --- a/sci2jsyacc.py +++ b/sci2jsyacc.py @@ -136,10 +136,14 @@ def p_functionstatement_function_var(p): 'functionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET list CLOSEBRACKET EOL' p[0] = '' -def p_functionstatement_function_functionname(p): +def p_functionstatement_function_functionname_list(p): 'functionstatement : FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET list CLOSEBRACKET EOL' p[0] = '' +def p_functionstatement_function_functionname(p): + 'functionstatement : FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET CLOSEBRACKET EOL' + p[0] = '' + # end define functionblock # define statementblock @@ -187,7 +191,7 @@ def p_statement_clearvar(p): def p_statement_eol(p): 'statement : EOL' - p[0] = '\n' + p[0] = '' def p_statement_forstatementblocks(p): 'statement : forstatementblocks' @@ -271,7 +275,7 @@ def p_casejobstatementblock_casejobstatementblock_casejobsetstatement_jobsetstat def p_casestatementblock_casestatementblock_casestatement(p): 'casestatementblock : casestatementblock casestatement' - p[0] = '%s%s%s' % (p[1], p[2], '') + p[0] = '%s%s' % (p[1], p[2]) def p_casejobstatementblock_casejobstatementblock_casejobstatement(p): 'casejobstatementblock : casejobstatementblock casejobstatement' @@ -333,10 +337,14 @@ def p_elseifstatementblock_elseifstatement(p): 'elseifstatementblock : elseifstatement statementblock' p[0] = '%s%s' % (p[1], p[2]) -def p_elsestatementblock_elsestatement(p): +def p_elsestatementblock_elsestatement_statementblock(p): 'elsestatementblock : elsestatement statementblock' p[0] = '%s%s' % (p[1], p[2]) +def p_elsestatementblock_elsestatement(p): + 'elsestatementblock : elsestatement' + p[0] = '%s' % (p[1]) + def p_trystatementblocks_trystatement_statementblock_catchstatement_statementblock(p): 'trystatementblocks : trystatement statementblock catchstatement statementblock endstatementblock' p[0] = '%s%s%s%s%s' % (p[1], p[2], p[3], p[4], p[5]) @@ -463,7 +471,7 @@ def p_whilestatement_while_do(p): INDENT_LEVEL += 1 def p_ifstatement_if_then(p): - '''ifstatement : IF expression THEN EOL + '''ifstatement : IF expression THEN | IF expression EOL''' global INDENT_LEVEL p[0] = '%*sif (%s) {\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', p[2][0]) @@ -659,7 +667,8 @@ def p_getvaluearg3_var(p): p[0] = '%s' % (p[1]) def p_getvaluearg4_expression(p): - 'getvaluearg4 : expression' + '''getvaluearg4 : expression + | listcall''' p[0] = '%s' % (p[1][0]) # end define assignment @@ -674,14 +683,14 @@ def p_ltermarraylist_ltermarraylistterm(p): 'ltermarraylist : ltermarraylistterm' p[0] = '%s' % (p[1]) -def p_ltermarraylistterm_ltermvar(p): +def p_ltermarraylistterm_var(p): '''ltermarraylistterm : VAR | MODEL''' var = '%s' % (p[1]) add_local_var(var) p[0] = '%s' % (print_var(var)) -def p_ltermarraylistterm_ltermvar_dot_var(p): +def p_ltermarraylistterm_var_dot_var(p): 'ltermarraylistterm : VAR DOT VAR' var = '%s' % (p[1]) add_local_var(var) @@ -889,23 +898,28 @@ def p_clearvar_clearvar_var(p): # define lterm # B(2:$-1) -def p_lterm_ltermvar_slice(p): +def p_lterm_lterm_slice(p): 'lterm : lterm OPENBRACKET expression COLON expression CLOSEBRACKET' p[0] = '%s.slice(%s-1,%s)' % (p[1], p[3][0], p[5][0]) # B(2) -def p_lterm_ltermvar_index(p): +def p_lterm_lterm_index(p): 'lterm : lterm OPENBRACKET expression CLOSEBRACKET' p[0] = '%s[%s-1]' % (p[1], p[3][0]) # B(2:$-1,1:n) -def p_lterm_ltermvar_slice_slice(p): +def p_lterm_lterm_slice_slice(p): 'lterm : lterm OPENBRACKET expression COLON expression COMMA expression COLON expression CLOSEBRACKET' p[0] = '%s.slice(%s-1,%s).slice(%s-1,%s)' % (p[1], p[3][0], p[5][0], p[7][0], p[9][0]) +# B(2,:) +def p_lterm_lterm_index_full_slice(p): + 'lterm : lterm OPENBRACKET expression COMMA COLON CLOSEBRACKET' + p[0] = '%s[%s-1].slice()' % (p[1], p[3][0]) + # B(2,3) # B($-2)(3) -def p_lterm_ltermvar_index_index(p): +def p_lterm_lterm_index_index(p): '''lterm : lterm OPENBRACKET expression COMMA expression CLOSEBRACKET | lterm OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEBRACKET''' base = '%s[%s-1]' % (p[1], p[3][0]) @@ -916,29 +930,29 @@ def p_lterm_ltermarraylist(p): 'lterm : OPENSQBRACKET ltermarraylist CLOSESQBRACKET' p[0] = '[%s]' % (p[2]) -def p_ltermvar_ltermvar_dot_var(p): +def p_lterm_lterm_dot_var(p): '''lterm : lterm DOT VAR | lterm DOT MODEL''' p[0] = '%s.%s' % (p[1], p[3]) -def p_ltermvar_ltermvar_dot_in(p): +def p_lterm_lterm_dot_in(p): 'lterm : lterm DOT IN' p[0] = '%s.%s1' % (p[1], p[3]) -def p_ltermvar_var(p): +def p_lterm_var(p): 'lterm : VAR' var = p[1] add_local_var(var) p[0] = '%s' % (print_var(var)) # in -def p_ltermvar_in(p): +def p_lterm_in(p): 'lterm : IN' var = p[1] + '1' add_local_var(var) p[0] = '%s' % (print_var(var)) -def p_ltermvar_prevar(p): +def p_lterm_prevar(p): 'lterm : PREVAR' p[0] = '%s' % (p[1]) @@ -947,53 +961,63 @@ def p_ltermvar_prevar(p): # define term # B(2:$-1) -def p_term_slice(p): - 'term : termvar OPENBRACKET expression COLON expression CLOSEBRACKET' +def p_termvar_termvar_slice(p): + 'termvar : termvar OPENBRACKET expression COLON expression CLOSEBRACKET' p[0] = ('%s.slice(%s-1,%s)' % (p[1][0], p[3][0], p[5][0]), VECTOR_TYPE) # B(2:$-1,1) -def p_term_slice_expression(p): - 'term : termvar OPENBRACKET expression COLON expression COMMA expression CLOSEBRACKET' +def p_termvar_termvar_slice_expression(p): + 'termvar : termvar OPENBRACKET expression COLON expression COMMA expression CLOSEBRACKET' p[0] = ('%s.slice(%s-1,%s)[%s-1]' % (p[1][0], p[3][0], p[5][0], p[7][0]), VECTOR_TYPE) +# B(2:$-1,1:2) +def p_termvar_termvar_slice_slice(p): + 'termvar : termvar OPENBRACKET expression COLON expression COMMA expression COLON expression CLOSEBRACKET' + p[0] = ('%s.slice(%s-1,%s).slice(%s-1,%s)' % (p[1][0], p[3][0], p[5][0], p[7][0], p[9][0]), MATRIX_TYPE) + +# B(2:$-1,:) +def p_termvar_termvar_slice_full_slice(p): + 'termvar : termvar OPENBRACKET expression COLON expression COMMA COLON CLOSEBRACKET' + p[0] = ('%s.slice(%s-1,%s).slice()' % (p[1][0], p[3][0], p[5][0]), MATRIX_TYPE) + # B(:$-1) -def p_term_left_slice(p): - 'term : termvar OPENBRACKET COLON expression CLOSEBRACKET' +def p_termvar_termvar_left_slice(p): + 'termvar : termvar OPENBRACKET COLON expression CLOSEBRACKET' p[0] = ('%s.slice(%s-1)' % (p[1][0], p[3][0]), VECTOR_TYPE) # B(2:) -def p_term_right_slice(p): - 'term : termvar OPENBRACKET expression COLON CLOSEBRACKET' +def p_termvar_termvar_right_slice(p): + 'termvar : termvar OPENBRACKET expression COLON CLOSEBRACKET' p[0] = ('%s.slice(%s-1,%s)' % (p[1][0], '1', p[4][0]), VECTOR_TYPE) # B(:) -def p_term_full_slice(p): - 'term : termvar OPENBRACKET COLON CLOSEBRACKET' +def p_termvar_termvar_full_slice(p): + 'termvar : termvar OPENBRACKET COLON CLOSEBRACKET' p[0] = ('%s.slice()' % (p[1][0]), VECTOR_TYPE) # B(:,1) -def p_term_full_slice_expression(p): - 'term : termvar OPENBRACKET COLON COMMA expression CLOSEBRACKET' +def p_termvar_termvar_full_slice_expression(p): + 'termvar : termvar OPENBRACKET COLON COMMA expression CLOSEBRACKET' p[0] = ('%s.slice()[%s-1]' % (p[1][0], p[5][0]), DOUBLE_TYPE) # B(1,:) -def p_term_expression_full_slice(p): - '''term : termvar OPENBRACKET expression COMMA COLON CLOSEBRACKET - | termvar OPENBRACKET expression CLOSEOPENBRACKET COLON CLOSEBRACKET''' +def p_termvar_termvar_expression_full_slice(p): + '''termvar : termvar OPENBRACKET expression COMMA COLON CLOSEBRACKET + | termvar OPENBRACKET expression CLOSEOPENBRACKET COLON CLOSEBRACKET''' base = '%s[%s-1]' % (p[1][0], p[3][0]) p[0] = ('%s.slice()' % (base), VECTOR_TYPE) # B(1,1) # B($-2)(1) -def p_term_expression_expression(p): - '''term : termvar OPENBRACKET expression COMMA expression CLOSEBRACKET - | termvar OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEBRACKET''' +def p_termvar_termvar_expression_expression(p): + '''termvar : termvar OPENBRACKET expression COMMA expression CLOSEBRACKET + | termvar OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEBRACKET''' base = '%s[%s-1]' % (p[1][0], p[3][0]) p[0] = ('%s[%s-1]' % (base, p[5][0]), DOUBLE_TYPE) # B(:,:) -def p_term_full_slice_full_slice(p): - 'term : termvar OPENBRACKET COLON COMMA COLON CLOSEBRACKET' +def p_termvar_termvar_full_slice_full_slice(p): + 'termvar : termvar OPENBRACKET COLON COMMA COLON CLOSEBRACKET' p[0] = ('%s.slice().slice()' % (p[1][0]), DOUBLE_TYPE) # (1:10) @@ -1007,20 +1031,20 @@ def p_term_range_step(p): p[0] = ('[%s:%s:%s]' % (p[1][0], p[3][0], p[5][0]), VECTOR_TYPE) # B($-2) -def p_term_termvar_parameter(p): - 'term : termvar OPENBRACKET expression CLOSEBRACKET' +def p_termvar_termvar_parameter(p): + 'termvar : termvar OPENBRACKET expression CLOSEBRACKET' p[0] = ('%s[%s-1]' % (p[1][0], p[3][0]), DOUBLE_TYPE) # B($-2)(1)(3) -def p_term_termvar_parameter_parameter_parameter(p): - 'term : termvar OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEOPENBRACKET expression CLOSEBRACKET' +def p_termvar_termvar_parameter_parameter_parameter(p): + 'termvar : termvar OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEOPENBRACKET expression CLOSEBRACKET' base = '%s[%s-1]' % (p[1][0], p[3][0]) base = '%s[%s-1]' % (base, p[5][0]) p[0] = ('%s[%s-1]' % (base, p[7][0]), DOUBLE_TYPE) -# B($-2)('function parameter')(3:4) -def p_term_termvar_parameter_parameter_slice(p): - 'term : termvar OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEOPENBRACKET expression COLON expression CLOSEBRACKET' +# B($-2)(1)(3:4) +def p_termvar_termvar_parameter_parameter_slice(p): + 'termvar : termvar OPENBRACKET expression CLOSEOPENBRACKET expression CLOSEOPENBRACKET expression COLON expression CLOSEBRACKET' base = '%s[%s-1]' % (p[1][0], p[3][0]) base = '%s[%s-1]' % (base, p[5][0]) p[0] = ('%s.slice(%s-1,%s)' % (base, p[7][0], p[9][0]), STRING_TYPE) @@ -1287,6 +1311,27 @@ def dump_vars(picklefilename): pickle.dump(VAR_TYPES, cfile) +def get_expression_type_1(expression, vartype, isslice=False, slicetype=''): + if vartype == STRING_TYPE: + pass + elif type(vartype) == tuple: + if isslice: + pass + elif vartype[0] == MATRIX_TYPE: + vartype = (VECTOR_TYPE, vartype[1]) + elif vartype[0] == VECTOR_TYPE: + vartype = vartype[1] + else: + print('Syntax error: getting', slicetype, 'index of expression', expression, 'of vartype', vartype) + else: + print('Syntax error: getting', slicetype, 'index of expression', expression, 'of vartype', vartype) + return vartype + +def get_expression_type_2(expression, vartype, isslice1=False, isslice2=False): + vartype = get_expression_type_1(expression, vartype, isslice1, 'first') + vartype = get_expression_type_1(expression, vartype, isslice2, 'second') + return vartype + def load_vars(picklefilename): global GLOBAL_VARS global VAR_TYPES |