]> thyrsus.com Git - mad.git/commitdiff
Added PAUSE.
authorEric S. Raymond <esr@thyrsus,com>
Fri, 23 Jan 2004 23:31:47 +0000 (23:31 +0000)
committerEric S. Raymond <esr@thyrsus,com>
Fri, 23 Jan 2004 23:31:47 +0000 (23:31 +0000)
mad

diff --git a/mad b/mad
index ee2b0e70f641d5b18902271c4514027b85798601..7f6873196b5039ea56c5f92c66eaa4adb6126a45 100755 (executable)
--- 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':