From: Eric S. Raymond Date: Fri, 23 Jan 2004 23:31:47 +0000 (+0000) Subject: Added PAUSE. X-Git-Tag: 1.0~168 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=0f04a010b7100d6c38ff1fab07a18cad5ea168af;p=mad.git Added PAUSE. --- diff --git a/mad b/mad index ee2b0e7..7f68731 100755 --- a/mad +++ b/mad @@ -1,8 +1,8 @@ #!/usr/bin/env python -reserved = ('CONDITIONAL', 'DIMENSION', 'END', 'FOR', 'FORMAT', - 'FUNCTION', 'INTEGER', 'INTERNAL', 'OF', 'PRINT', 'PROGRAM', - 'READ', 'COMMENT', 'THROUGH', 'TO', 'TRANSFER', 'VALUES', 'VECTOR', +reserved = ('CONDITIONAL', 'DIMENSION', 'END', 'FOR', 'FORMAT', 'FUNCTION', + 'INTEGER', 'INTERNAL', 'OF', 'PAUSE', 'PRINT', 'PROGRAM', 'READ', + 'COMMENT', 'THROUGH', 'TO', 'TRANSFER', 'VALUES', 'VECTOR', 'WHENEVER') tokens = reserved + ( @@ -44,7 +44,6 @@ t_STRING = r'\$[^$]*\$' reserved_map = { } for r in reserved: reserved_map[r] = r -refcount = {} def t_NAME(t): r'[A-Z][A-Z0-9]*(\.(?!P))?' @@ -93,6 +92,7 @@ precedence = ( ('right', 'ABS', 'UPLUS') ) +refcount = {} sourcefile = "" sourceline = 0 deck = [] @@ -154,10 +154,10 @@ def p_internal(t): "statement : INTERNAL FUNCTION FUNCALL application EQUALS expression" t[0] = ('function', t[3], tuple(t[4]), t[6]) -## READ FORMAT -def p_read_format(t): - 'statement : READ FORMAT NAME COMMA varlist' - t[0] = ('read', t[3]) + tuple(t[5]) +## PAUSE +def p_pause(t): + "statement : PAUSE expression" + t[0] == ('pause', t[1]) ## PRINT FORMAT def p_print_format(t): @@ -182,6 +182,11 @@ def p_remark2(t): 'statement : COMMENT' t[0] = ('remark',) +## READ FORMAT +def p_read_format(t): + 'statement : READ FORMAT NAME COMMA varlist' + t[0] = ('read', t[3]) + tuple(t[5]) + ## THROUGH def p_through_for(t): 'statement : THROUGH NAME COMMA FOR NAME EQUALS expression COMMA expression COMMA expression' @@ -481,6 +486,8 @@ def print_statement(statement): return 'goto ' + statement[1] + ';' elif statement[0] == 'if': return 'if (' + print_expr(statement[1]) + ') ' + print_statement(statement[2]) + elif statement[0] == 'pause': + return('printf("%o", ' + print_expr(statement[1]) + '); getchar();') elif statement[0] == 'read': return 'scanf("' + fmt_convert(format[statement[1]], write=False) + '", ' + ', '.join(map(lambda x: '&'+x, statement[2:])) + ');' elif statement[0] == 'remark':