summaryrefslogtreecommitdiff
path: root/sci2jsyacc.py
diff options
context:
space:
mode:
Diffstat (limited to 'sci2jsyacc.py')
-rwxr-xr-xsci2jsyacc.py99
1 files changed, 52 insertions, 47 deletions
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
index ccb45980..7e35fa74 100755
--- a/sci2jsyacc.py
+++ b/sci2jsyacc.py
@@ -18,25 +18,25 @@ precedence = (
start = 'functionblock'
-jobblocks = {}
+JOB_BLOCKS = {}
# define functionblock
def p_functionblock_function_statementblock_endfunction(p):
'functionblock : emptystatementblock FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL statementblock ENDFUNCTION emptystatementblock'
- f = str(p[5])
- p[0] = ('function ' + f + '() {\n' +
- f + '.prototype.get = function ' + f + '() {\n' +
- (jobblocks['"get"'] if '"get"' in jobblocks else '') +
+ fname = str(p[5])
+ p[0] = ('function ' + fname + '() {\n' +
+ fname + '.prototype.get = function ' + fname + '() {\n' +
+ (JOB_BLOCKS['"get"'] if '"get"' in JOB_BLOCKS else '') +
'}\n' +
- f + '.prototype.set = function ' + f + '() {\n' +
- (jobblocks['"set"'] if '"set"' in jobblocks else '') +
+ fname + '.prototype.set = function ' + fname + '() {\n' +
+ (JOB_BLOCKS['"set"'] if '"set"' in JOB_BLOCKS else '') +
'}\n' +
- f + '.prototype.define = function ' + f + '() {\n' +
- (jobblocks['"define"'] if '"define"' in jobblocks else '') +
+ fname + '.prototype.define = function ' + fname + '() {\n' +
+ (JOB_BLOCKS['"define"'] if '"define"' in JOB_BLOCKS else '') +
'}\n' +
- f + '.prototype.details = function ' + f + '() {\n' +
- (jobblocks['"details"'] if '"details"' in jobblocks else '') +
+ fname + '.prototype.details = function ' + fname + '() {\n' +
+ (JOB_BLOCKS['"details"'] if '"details"' in JOB_BLOCKS else '') +
'}\n' +
'}')
@@ -138,12 +138,12 @@ def p_casestatementblock_casestatement(p):
def p_casejobstatementblock_casejobstatementblock_casejobstatement(p):
'casejobstatementblock : casejobstatementblock casejobstatement statementblock'
- jobblocks[p[2]] = p[3]
+ JOB_BLOCKS[p[2]] = p[3]
p[0] = ''
def p_casejobstatementblock_casejobstatement(p):
'casejobstatementblock : casejobstatement statementblock'
- jobblocks[p[1]] = p[2]
+ JOB_BLOCKS[p[1]] = p[2]
p[0] = ''
def p_whilestatementblock_whilestatement(p):
@@ -174,27 +174,27 @@ def p_forstatement_for_start_step_end(p):
'''forstatement : FOR VAR ASSIGNMENT expression COLON expression COLON expression EOL
| FOR VAR ASSIGNMENT expression COLON expression COLON expression DO EOL'''
var = p[2]
- start = p[4]
- step = int(p[6])
- end = p[8]
- if step > 0:
+ lstart = p[4]
+ lstep = int(p[6])
+ lend = p[8]
+ if lstep > 0:
endop = '<='
stepop = '+='
else:
endop = '>='
stepop = '-='
- p[0] = 'for (%s=%s;%s%s%s;%s%s%s) {\n' % (var, start, var, endop, end, var, stepop, step)
+ p[0] = 'for (%s=%s;%s%s%s;%s%s%s) {\n' % (var, lstart, var, endop, lend, var, stepop, lstep)
def p_forstatement_for_start_end(p):
'''forstatement : FOR VAR ASSIGNMENT expression COLON expression EOL
| FOR VAR ASSIGNMENT expression COLON expression DO EOL'''
var = p[2]
- start = p[4]
- step = 1
- end = p[6]
+ lstart = p[4]
+ lstep = 1
+ lend = p[6]
endop = '<='
stepop = '+='
- p[0] = 'for (%s=%s;%s%s%s;%s%s%s) {\n' % (var, start, var, endop, end, var, stepop, step)
+ p[0] = 'for (%s=%s;%s%s%s;%s%s%s) {\n' % (var, lstart, var, endop, lend, var, stepop, lstep)
def p_forstatement_for_list(p):
'''forstatement : FOR VAR ASSIGNMENT VAR EOL
@@ -346,12 +346,12 @@ def p_expression_term_transpose(p):
def p_expression_expression_multiplication_expression(p):
'expression : expression MULTIPLICATION expression'
if p[2] == '**':
- op = '^'
+ operator = '^'
elif p[2] == '\\':
- op = '\\'
+ operator = '\\'
else:
- op = p[2]
- p[0] = str(p[1]) + op + str(p[3])
+ operator = p[2]
+ p[0] = str(p[1]) + operator + str(p[3])
def p_expression_expression_addition_expression(p):
'expression : expression ADDITION expression'
@@ -359,19 +359,19 @@ def p_expression_expression_addition_expression(p):
def p_expression_expression_comparison_expression(p):
'expression : expression COMPARISON expression'
- o = p[2]
- if o == '<>' or o == '~=':
- o = '!='
- p[0] = str(p[1]) + o + str(p[3])
+ operator = p[2]
+ if operator == '<>' or operator == '~=':
+ operator = '!='
+ p[0] = str(p[1]) + operator + str(p[3])
def p_expression_expression_logical_expression(p):
'expression : expression LOGICAL expression'
- o = p[2]
- if o == '&':
- o = '&&'
- elif o == '|':
- o = '||'
- p[0] = str(p[1]) + o + str(p[3])
+ operator = p[2]
+ if operator == '&':
+ operator = '&&'
+ elif operator == '|':
+ operator = '||'
+ p[0] = str(p[1]) + operator + str(p[3])
def p_expression_addition_term(p):
'expression : ADDITION expression %prec UNARYADDITION'
@@ -419,7 +419,7 @@ def p_lterm_slice(p):
def p_lterm_index(p):
'lterm : ltermvar OPENBRACKET expression CLOSEBRACKET'
addtoarray(p[1])
- p[0] = str(p[1]) + '[' + str(p[3]) + '-1]'
+ p[0] = '%s[%s-1]' % (p[1], p[3])
# [A,B,C]
def p_lterm_ltermarraylist(p):
@@ -477,6 +477,11 @@ def p_term_full_slice_expression(p):
'term : termvar OPENBRACKET COLON COMMA expression CLOSEBRACKET'
p[0] = p[1] + '.slice()[' + str(p[5]) + '-1]'
+# B(:,1)
+def p_term_full_slice_full_slice(p):
+ 'term : termvar OPENBRACKET COLON COMMA COLON CLOSEBRACKET'
+ p[0] = p[1] + '.slice().slice()'
+
# (1:10)
def p_term_range(p):
'term : OPENBRACKET expression COLON expression CLOSEBRACKET'
@@ -549,7 +554,7 @@ def p_term_prevar_boolean(p):
if p[1] == '%t':
p[0] = 'true'
elif p[1] == '%f':
- p[0] == 'false'
+ p[0] = 'false'
# 1+2*%i
def p_term_prevar_complex1(p):
@@ -617,18 +622,18 @@ def p_term_constant(p):
def p_error(p):
print("Syntax error in input", p)
-arraylist = set()
+ARRAY_LIST = set()
+
+def addtoarray(name):
+ ARRAY_LIST.add(name)
-def addtoarray(s):
- global arraylist
- arraylist.add(s)
+def isarray(name):
+ return name in ARRAY_LIST
-def isarray(s):
- global arraylist
- return s in arraylist
+FUNCTION_LIST = set()
-def isfunction(s):
- return False
+def isfunction(name):
+ return name in FUNCTION_LIST
if __name__ == '__main__':
if len(sys.argv) <= 1: