tokens = reserved + (
'TAB', 'SEMI',
'COMMA',
- 'NAME','INTNUM', 'FLOATNUM', 'FUNCALL',
+ 'NAME','INTNUM', 'FLOATNUM', 'STRING', 'FUNCALL',
'LPAREN','RPAREN',
'PLUS','MINUS','TIMES','DIVIDE','EQUALS',
'NOT', 'OR', 'AND', 'THEN', 'EQV',
t_RPAREN = r'\)'
t_FLOATNUM= r'\d+\.\d*'
t_INTNUM = r'\d+'
+t_STRING = r'\$[^$]*\$'
reserved_map = { }
for r in reserved:
def p_transfer(t):
"statement : TRANSFER TO NAME"
t[0] = ('goto', t[3])
+ print "Foo!", t[3]
targets.append(t[3])
## WHENEVER
'statement : WHENEVER expression'
t[0] = ('whenever', t[2], t[4])
-## VECTOR VALUES
-#def p_vector_values(t):
-# "statement : VECTOR VALUES assignlist"
-# t[0] = ('values',) + tuple(t[3])
+# VECTOR VALUES
+def p_vector_values(t):
+ "statement : VECTOR VALUES NAME EQUALS STRING"
+ t[0] = ('values',) + (t[3], t[5])
## Assignment
def p_statement_substitution(t):
bools = []
dimensions = {}
+# Map MAD intrinsics to C library functions
+madfunc_map = {'elog':'log'}
+
def declare(var, lst):
if var in untyped:
untyped.remove(var)
res += "[" + dim[1] + "]"
return res
elif t[0] == 'apply':
- return t[1][:-1] + `t[2]`
+ madfunc = t[1][:-1]
+ return madfunc_map.get(madfunc, madfunc) + "(" + " ,".join(map(print_expr, t[2])) + ")"
elif t[0] == '+':
if len(t) == 2:
return "%s" % print_expr(t[1])
return "goto " + statement[1] + ";"
elif statement[0] == 'if':
return "if (" + print_expr(statement[1]) + ") " + print_statement(statement[2])
+ elif statement[0] == 'read':
+ return 'scanf(' + statement[1] + ', ' + ", ".join(map(lambda x: "&"+x, statement[2:])) + ");"
+ elif statement[0] == 'print':
+ return 'printf(' + statement[1] + ', ' + ", ".join(statement[2:]) + ");"
elif statement[0] == 'substitution':
return statement[1] + " = " + print_expr(statement[2]) + ";"
else: