diff options
author | Sunil Shetye | 2018-08-24 10:37:00 +0530 |
---|---|---|
committer | Sunil Shetye | 2018-08-24 10:42:26 +0530 |
commit | 9fee9bd7e5e356e872c7a539d4a6cfa89cae593c (patch) | |
tree | f2f3777b239fda03dab6481694a2b38429279704 /sci2jsyacc.py | |
parent | 8ae8205dc95554cfafe994c560e57597e2f8954b (diff) | |
download | sci2js-9fee9bd7e5e356e872c7a539d4a6cfa89cae593c.tar.gz sci2js-9fee9bd7e5e356e872c7a539d4a6cfa89cae593c.tar.bz2 sci2js-9fee9bd7e5e356e872c7a539d4a6cfa89cae593c.zip |
expand the variable
Diffstat (limited to 'sci2jsyacc.py')
-rwxr-xr-x | sci2jsyacc.py | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/sci2jsyacc.py b/sci2jsyacc.py index 951805cf..b89c5bdc 100755 --- a/sci2jsyacc.py +++ b/sci2jsyacc.py @@ -73,6 +73,8 @@ GLOBAL_VARS = { } VAR_TYPES = {} +VAR_DEFINITIONS = {} +LAST_ARRAY = [] LABELS = [] @@ -549,7 +551,7 @@ VARCOUNT = 0 def p_lterm_assignment_expression(p): '''assignment : lterm ASSIGNMENT expression EOL | lterm ASSIGNMENT listcall EOL''' - global VARCOUNT + global VARCOUNT, LAST_ARRAY var = p[1] if var[0] == '[': prefix = 'var ' @@ -574,6 +576,9 @@ def p_lterm_assignment_expression(p): prefix = 'var ' p[0] = '%*s%s%s = %s;\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', prefix, var, value) add_var_vartype(var, p[3][1]) + if len(LAST_ARRAY) > 0: + VAR_DEFINITIONS[var] = LAST_ARRAY + LAST_ARRAY = [] def p_model_assignment_expression(p): '''assignment : GRAPHICS ASSIGNMENT expression EOL @@ -739,12 +744,22 @@ def p_getvaluearg2_gettext_string(p): def p_getvaluearg2_var(p): 'getvaluearg2 : VAR' - # TODO: replace with value of that variable var = p[1] add_global_var(var, force=True) var = print_var(var) - p[0] = '%s' % (var) - LABELS.append(var) + if var in VAR_DEFINITIONS: + # replace variable with value of that variable + labels = VAR_DEFINITIONS[var] + s = '[' + for l in labels: + s += l + ',' + LABELS.append(l) + else: + s += ',' + s = s[:-1] + ']' + else: + p[0] = '%s' % (var) + LABELS.append(var) def p_getvaluearg2arraylist_arraylist_arraylistitem(p): '''getvaluearg2arraylist : getvaluearg2arraylist SEMICOLON getvaluearg2arraylistitem @@ -860,14 +875,18 @@ def p_ltermarraylistterm_prevar(p): def p_termarrayarraylist_termarrayarraylist_semicolon_termarraylist(p): 'termarrayarraylist : termarrayarraylist SEMICOLON termarraylist' p[0] = ('%s,[%s]' % (p[1][0], p[3][0]), p[1][1]) + LAST_ARRAY.append(p[3][0]) def p_termarrayarraylist_termarraylist_semicolon_termarraylist(p): 'termarrayarraylist : termarraylist SEMICOLON termarraylist' p[0] = ('[%s],[%s]' % (p[1][0], p[3][0]), p[1][1]) + LAST_ARRAY.append(p[1][0]) + LAST_ARRAY.append(p[3][0]) def p_termarrayarraylist_termarraylist_semicolon(p): 'termarrayarraylist : termarraylist SEMICOLON' p[0] = ('[%s]' % (p[1][0]), p[1][1]) + LAST_ARRAY.append(p[1][0]) def p_termarraylist_termarraylist_comma_expression(p): '''termarraylist : termarraylist COMMA expression |