2
2
from grammer .MinijavaParser import MinijavaParser
3
3
4
4
5
+ def keyboard (banner = None ):
6
+ import code , sys
7
+
8
+ # use exception trick to pick up the current frame
9
+ try :
10
+ raise None
11
+ except :
12
+ frame = sys .exc_info ()[2 ].tb_frame .f_back
13
+
14
+ # evaluate commands in current namespace
15
+ namespace = frame .f_globals .copy ()
16
+ namespace .update (frame .f_locals )
17
+
18
+ code .interact (banner = banner , local = namespace )
19
+
5
20
class MiniJavaPrintListener (MinijavaListener ):
6
21
def __init__ (self , name ):
7
22
super (MinijavaListener , self ).__init__ ()
@@ -43,6 +58,12 @@ def exitSubExpression(self, ctx:MinijavaParser.SubExpressionContext):
43
58
print ("enterSubExpression" )
44
59
self .code += "isub"
45
60
61
+ def enterIntLitExpression (self , ctx :MinijavaParser .IntLitExpressionContext ):
62
+ print ()
63
+ print ("enterIntLitExpression" )
64
+ literal = ctx .getChild (0 ).getText ()
65
+ self .code += "ldc %s" % literal + '\n '
66
+
46
67
47
68
def enterVarDeclaration (self , ctx :MinijavaParser .VarDeclarationContext ):
48
69
print ()
@@ -61,3 +82,10 @@ def enterPowExpression(self, ctx:MinijavaParser.PowExpressionContext):
61
82
print ()
62
83
print ("enterPowExpression" )
63
84
self .code += ""
85
+
86
+
87
+ def enterPrintStatement (self , ctx : MinijavaParser .PrintStatementContext ):
88
+ self .code += "getstatic java/lang/System/out Ljava/io/PrintStream;" + '\n '
89
+
90
+ def exitPrintStatement (self , ctx :MinijavaParser .PrintStatementContext ):
91
+ self .code += "invokevirtual java/io/PrintStream/println(I)V" + '\n '
0 commit comments