('right', 'ABS', 'UPLUS')
)
+sourcefile = ""
+sourceline = 0
deck = []
scopes = []
targets = []
def p_card(t):
'card : TAB statement SEMI'
- deck.append((None, t[2]))
+ deck.append((t.lineno(1), None, t[2]))
def p_labeled_card(t):
'card : NAME TAB statement SEMI'
- deck.append((t[1], t[3]))
+ deck.append((t.lineno(1), t[1], t[3]))
# Statement level
"Gather variable types."
global integers, floats, bools
# Mine the code for compile-time directives
- for (label, statement) in deck:
+ for (line, label, statement) in deck:
if statement[0] == 'integer':
for var in statement[1:]:
declare(var, integers)
while str[i] != ',':
i += 1
if i <= 0:
- sys.stderr.write('invalid spacer in %s\n' % str)
+ sys.stderr.write('"%s", line %d: invalid spacer in %s\n' % (sourcefile, sourceline, str))
sys.exit(1)
count = int(str[1:i])
if write:
res += ('%' + str[1:i] + 'd') * count
str = str[i:]
else:
- sys.stderr.write('invalid field code in format string %s!\n' % str)
+ sys.stderr.write('"%s", line %d: invalid field code in format string %s!\n' % (sourcefile, sourceline, str))
sys.exit(1)
# Clip off format character
if write:
def generate(out):
out.write('#include <math.h>\n\n')
- for (label, statement) in deck:
+ for (line, label, statement) in deck:
if statement == 'function':
# FIXME: someday, deduce when return is of integral type
out.write('float %s {return %s;}' \
for (id, value) in static.items():
out.write('\tstatic const char *%s\t= "%s";\n' % (id, fmt_convert(value)))
indent = 0
- for (label, statement) in deck:
+ global sourceline
+ for (sourceline, label, statement) in deck:
if label in targets:
sys.stdout.write(label+':')
rep = print_statement(statement)
sys.exit(1)
# end
-
-