summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2018-06-21 14:53:50 +0530
committerSunil Shetye2018-06-22 11:21:05 +0530
commitec185db61d5b6fa65322296e48a983de36436cd0 (patch)
tree8287e20c421c162a16d0aa58b3b74fe1df49a67b
parentca5b9d74c606ee8e9cabadada1e7f7f29c1f3b47 (diff)
downloadsci2js-ec185db61d5b6fa65322296e48a983de36436cd0.tar.gz
sci2js-ec185db61d5b6fa65322296e48a983de36436cd0.tar.bz2
sci2js-ec185db61d5b6fa65322296e48a983de36436cd0.zip
start work on separating local and global vars
-rw-r--r--js/Branching/SELF_SWITCH.js2
-rw-r--r--js/Misc/EXPRESSION.js2
-rw-r--r--js/NonLinear/LOOKUP_c.js17
-rw-r--r--js/Sources/CURVE_c.js17
-rwxr-xr-xsci2jsyacc.py87
5 files changed, 94 insertions, 31 deletions
diff --git a/js/Branching/SELF_SWITCH.js b/js/Branching/SELF_SWITCH.js
index 8743a359..4133e106 100644
--- a/js/Branching/SELF_SWITCH.js
+++ b/js/Branching/SELF_SWITCH.js
@@ -1,3 +1,3 @@
-Syntax error in input LexToken(FUNCTION,'function',1,466)
+Syntax error in input LexToken(DOT,'.',1,644)
/* autogenerated from "macros/Branching/SELF_SWITCH.sci" */
None
diff --git a/js/Misc/EXPRESSION.js b/js/Misc/EXPRESSION.js
index 8d531352..a1b624a7 100644
--- a/js/Misc/EXPRESSION.js
+++ b/js/Misc/EXPRESSION.js
@@ -1,4 +1,4 @@
Syntax error in input LexToken(PREVAR,'%mi',1,4312)
-Syntax error in input LexToken(OPENBRACKET,'(',1,4686)
+Syntax error in input LexToken(VAR,'PREVAR_foo',1,4610)
/* autogenerated from "macros/Misc/EXPRESSION.sci" */
None
diff --git a/js/NonLinear/LOOKUP_c.js b/js/NonLinear/LOOKUP_c.js
index b94e586d..833808db 100644
--- a/js/NonLinear/LOOKUP_c.js
+++ b/js/NonLinear/LOOKUP_c.js
@@ -1,11 +1,14 @@
Syntax error in input LexToken(DOT,'.',1,12001)
-Syntax error in input LexToken(DOT,'.',1,25941)
-Syntax error in input LexToken(DOT,'.',1,27143)
-Syntax error in input LexToken(DOT,'.',1,27805)
+Syntax error in input LexToken(VAR,'a',1,25832)
+Syntax error in input LexToken(VAR,'a',1,27066)
+Syntax error in input LexToken(VAR,'a',1,27777)
Syntax error in input LexToken(CLOSEBRACKET,')',1,28535)
-Syntax error in input LexToken(COLON,':',1,32814)
-Syntax error in input LexToken(DOT,'.',1,33402)
+Syntax error in input LexToken(VAR,'xye',1,32671)
+Syntax error in input LexToken(VAR,'a',1,33307)
+Syntax error in input LexToken(VAR,'order',1,33666)
Syntax error in input LexToken(CLOSEBRACKET,')',1,34234)
-Syntax error in input LexToken(COMMA,',',1,36019)
+Syntax error in input LexToken(VAR,'xye',1,35442)
+Syntax error in input LexToken(VAR,'N',1,36302)
+Syntax error in input LexToken(VAR,'x',1,40233)
/* autogenerated from "macros/NonLinear/LOOKUP_c.sci" */
-
+None
diff --git a/js/Sources/CURVE_c.js b/js/Sources/CURVE_c.js
index badf6e90..6a38555c 100644
--- a/js/Sources/CURVE_c.js
+++ b/js/Sources/CURVE_c.js
@@ -1,11 +1,14 @@
Syntax error in input LexToken(DOT,'.',1,11244)
-Syntax error in input LexToken(DOT,'.',1,25241)
-Syntax error in input LexToken(DOT,'.',1,26390)
-Syntax error in input LexToken(DOT,'.',1,27428)
+Syntax error in input LexToken(VAR,'a',1,25132)
+Syntax error in input LexToken(VAR,'a',1,26313)
+Syntax error in input LexToken(VAR,'a',1,27400)
Syntax error in input LexToken(CLOSEBRACKET,')',1,28162)
-Syntax error in input LexToken(COLON,':',1,32472)
-Syntax error in input LexToken(DOT,'.',1,33210)
+Syntax error in input LexToken(VAR,'xye',1,32329)
+Syntax error in input LexToken(VAR,'a',1,33109)
+Syntax error in input LexToken(VAR,'order',1,33486)
Syntax error in input LexToken(CLOSEBRACKET,')',1,33946)
-Syntax error in input LexToken(COMMA,',',1,35785)
+Syntax error in input LexToken(VAR,'xye',1,35193)
+Syntax error in input LexToken(VAR,'N',1,36068)
+Syntax error in input LexToken(VAR,'x',1,38964)
/* autogenerated from "macros/Sources/CURVE_c.sci" */
-
+None
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
index df4634b1..9d466a80 100755
--- a/sci2jsyacc.py
+++ b/sci2jsyacc.py
@@ -32,24 +32,26 @@ start = 'functionblocks'
JOB_BLOCKS = {}
+LOCAL_VARS = set()
+GLOBAL_VARS = set()
+
# define functionblocks
def p_functionblocks_functionblocks_functionblock(p):
'functionblocks : functionblocks functionblock'
p[0] = '%s%s' % (p[1], p[2])
-def p_functionblocks_functionblock(p):
- 'functionblocks : EOL functionblock'
+def p_functionblocks_jobfunctionblock(p):
+ 'functionblocks : EOL jobfunctionblock'
p[0] = '%s' % (p[2])
# end functionblocks
# define functionblock
-def p_functionblock_function_job_statementblock_endfunction(p):
- '''functionblock : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL statementblock ENDFUNCTION EOL
- | FUNCTION lterm ASSIGNMENT FUNCTIONCALL OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL statementblock ENDFUNCTION EOL'''
- fname = p[4]
+def p_jobfunctionblock_jobfunctionstatement_statementblock_endfunction(p):
+ 'jobfunctionblock : jobfunctionstatement statementblock ENDFUNCTION EOL'
+ fname = '%s' % (p[1])
indent = ' '
p[0] = ('function %s() {\n' +
'%s%s.prototype.define = function %s() {\n%s%s}\n' +
@@ -63,9 +65,20 @@ def p_functionblock_function_job_statementblock_endfunction(p):
indent, fname, fname, (JOB_BLOCKS['"set"'] if '"set"' in JOB_BLOCKS else ''), indent,
)
-def p_functionblock_function_statementblock_endfunction(p):
- '''functionblock : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET list CLOSEBRACKET EOL statementblock ENDFUNCTION EOL
- | FUNCTION lterm ASSIGNMENT FUNCTIONCALL OPENBRACKET list CLOSEBRACKET EOL statementblock ENDFUNCTION EOL'''
+def p_functionblock_functionstatement_statementblock_endfunction(p):
+ 'functionblock : functionstatement statementblock ENDFUNCTION EOL'
+ p[0] = ''
+
+def p_jobfunctionstatement_function(p):
+ '''jobfunctionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL
+ | FUNCTION lterm ASSIGNMENT FUNCTIONCALL OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL'''
+ for var in (p[6], p[8], p[10]):
+ LOCAL_VARS.add(var)
+ p[0] = '%s' % (p[4])
+
+def p_functionstatement_function(p):
+ '''functionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET list CLOSEBRACKET EOL
+ | FUNCTION lterm ASSIGNMENT FUNCTIONCALL OPENBRACKET list CLOSEBRACKET EOL'''
p[0] = ''
# end define functionblock
@@ -91,6 +104,10 @@ def p_statement_assignment(p):
| RETURN EOL'''
p[0] = '%s;\n' % (p[1])
+def p_statement_functionblock(p):
+ 'statement : functionblock'
+ p[0] = ''
+
def p_statement_resume(p):
'statement : lterm ASSIGNMENT RESUME OPENBRACKET expression CLOSEBRACKET EOL'
p[0] = '%s%s%s(%s)\n' % (p[1], p[2], p[3], p[5])
@@ -231,6 +248,9 @@ def p_forstatement_for_start_step_end(p):
else:
endop = '>='
stepop = '-='
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ LOCAL_VARS.add(var)
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):
@@ -242,12 +262,18 @@ def p_forstatement_for_start_end(p):
lend = p[6]
endop = '<='
stepop = '+='
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ LOCAL_VARS.add(var)
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
| FOR VAR ASSIGNMENT VAR DO EOL'''
var = p[2]
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ LOCAL_VARS.add(var)
p[0] = 'for (%s in %s) {\n' % (var, p[4])
def p_selectstatement_select(p):
@@ -502,14 +528,31 @@ def p_ltermvar_ltermvar_dot_in(p):
p[0] = '%s.%s1' % (p[1], p[3])
def p_ltermvar_var(p):
- '''ltermvar : VAR
- | PREVAR'''
- p[0] = '%s' % (p[1])
+ 'ltermvar : VAR'
+ var = p[1]
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ LOCAL_VARS.add(var)
+ if var in GLOBAL_VARS:
+ p[0] = '%s' % (var)
+ else:
+ p[0] = '%s' % (var)
# in
def p_ltermvar_in(p):
'ltermvar : IN'
- p[0] = '%s1' % (p[1])
+ var = p[1] + '1'
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ LOCAL_VARS.add(var)
+ if var in GLOBAL_VARS:
+ p[0] = '%s' % (var)
+ else:
+ p[0] = '%s' % (var)
+
+def p_ltermvar_prevar(p):
+ 'ltermvar : PREVAR'
+ p[0] = '%s' % (p[1])
# end define lterm
@@ -695,12 +738,26 @@ def p_termvar_termvar_dot_in(p):
# A
def p_termvar_var(p):
'termvar : VAR'
- p[0] = '%s' % (p[1])
+ var = p[1]
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ GLOBAL_VARS.add(var)
+ if var in GLOBAL_VARS:
+ p[0] = '%s' % (var)
+ else:
+ p[0] = '%s' % (var)
# in
def p_termvar_in(p):
'termvar : IN'
- p[0] = '%s1' % (p[1])
+ var = p[1] + '1'
+ if var not in GLOBAL_VARS:
+ if var not in LOCAL_VARS:
+ GLOBAL_VARS.add(var)
+ if var in GLOBAL_VARS:
+ p[0] = '%s' % (var)
+ else:
+ p[0] = '%s' % (var)
# 5
# 3.4