diff options
-rwxr-xr-x | sci2jslex.py | 18 | ||||
-rwxr-xr-x | sci2jsyacc.py | 22 |
2 files changed, 31 insertions, 9 deletions
diff --git a/sci2jslex.py b/sci2jslex.py index 931a7e12..83eadeab 100755 --- a/sci2jslex.py +++ b/sci2jslex.py @@ -64,7 +64,8 @@ tokens = [ 'NUMBER', 'OPENBRACKET', 'OPENSQBRACKET', - 'OPERATOR', + 'MULTIPLICATION', + 'ADDITION', 'PREVAR', 'QSTRING', 'SEMICOLON', @@ -86,7 +87,7 @@ def t_COMMENT(t): pass def t_NUMBER(t): - r'-?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?' + r'(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?' global afterarray afterarray = False t.state = 'NUMBER' @@ -135,11 +136,18 @@ def t_DOT(t): t.state = 'DOT' return t -def t_OPERATOR(t): - r'[+\-*/^\\]' +def t_MULTIPLICATION(t): + r'[*/^\\]' global afterarray afterarray = False - t.state = 'OPERATOR' + t.state = 'MULTIPLICATION' + return t + +def t_ADDITION(t): + r'[+\-]' + global afterarray + afterarray = False + t.state = 'ADDITION' return t def t_COMMA(t): diff --git a/sci2jsyacc.py b/sci2jsyacc.py index 77b7e050..e174aa20 100755 --- a/sci2jsyacc.py +++ b/sci2jsyacc.py @@ -5,6 +5,12 @@ import ply.yacc as yacc from sci2jslex import tokens +precedence = ( + ('left', 'ADDITION'), + ('left', 'MULTIPLICATION'), + ('right', 'UNARYADDITION'), +) + start = 'statementblock' # define statementblock @@ -66,8 +72,8 @@ def p_termarraylist_termarraylist_semicolon_expression(p): p[0] = str(p[1]) + ',' + str(p[3]) def p_termarraylist_termarraylist_expression(p): - '''termarraylist : termarraylist expression - | expression expression''' + '''termarraylist : termarraylist term + | term term''' p[0] = str(p[1]) + ',' + str(p[2]) # end define termarraylist @@ -87,10 +93,18 @@ def p_expression_term_transpose(p): 'expression : term TRANSPOSE' p[0] = 'transpose(' + str(p[1]) + ')' -def p_expression_operator_term(p): - 'expression : expression OPERATOR term' +def p_expression_expression_multiplication_expression(p): + 'expression : expression MULTIPLICATION expression' + p[0] = str(p[1]) + str(p[2]) + str(p[3]) + +def p_expression_expression_addition_expression(p): + 'expression : expression ADDITION expression' p[0] = str(p[1]) + str(p[2]) + str(p[3]) +def p_expression_addition_term(p): + 'expression : ADDITION term %prec UNARYADDITION' + p[0] = str(p[1]) + str(p[2]) + def p_expression_term(p): 'expression : term' p[0] = str(p[1]) |