-- test b0t package b0t is body x: integer; y,z: boolean; begin z := true; writeln("z = ",z); %%dmp end; in simple.c Token : Package Token : Id grammar: packname -> Id # PutPackName After : PutPackName Semstack is: EMPTY Token : Is Token : Body Token : Id grammar: idlist -> Id #PushId#CreateIdList After : PushId Semstack is: IdEntry (x) <+ SemTop After : CreateIdList Semstack is: IdListEntry <+ SemTop Token : Colonsym Token : Id grammar: type -> Id #PushId#MakeTypeEntry After : PushId Semstack is: IdEntry (integer) <+ SemTop IdListEntry After : MakeTypeEntry Semstack is: TypeEntry <+ SemTop IdListEntry Token : Termsym grammar: decl -> idlist Colonsym type ; #EnterIdList After : EnterIdlist Semstack is: EMPTY grammar: decl -> decl Token : Id grammar: idlist -> Id #PushId#CreateIdList After : PushId Semstack is: IdEntry (y) <+ SemTop After : CreateIdList Semstack is: IdListEntry <+ SemTop Token : Commasym Token : Id grammar: idlist -> idlist Commasym Id #PushId#MergeIdList After : PushId Semstack is: IdEntry (z) <+ SemTop IdListEntry After : MergeIdList Semstack is: IdListEntry <+ SemTop Token : Colonsym Token : Id grammar: type -> Id #PushId#MakeTypeEntry After : PushId Semstack is: IdEntry (boolean) <+ SemTop IdListEntry After : MakeTypeEntry Semstack is: TypeEntry <+ SemTop IdListEntry Token : Termsym grammar: decl -> idlist Colonsym type ; #EnterIdList After : EnterIdlist Semstack is: EMPTY grammar: decl -> decllist decl Token : Begin grammar: stmtlist -> lambda #NullList After : NullList Semstack is: StLstEntry <+ SemTop Token : Id grammar: identifier->Id #PushId After : PushId Semstack is: IdEntry (z) <+ SemTop StLstEntry grammar: memref -> identifier #IdToAddr After : IdToAddr Semstack is: AddrEntry (type boolean) <+ SemTop StLstEntry Token : Assignop Token : True grammar: boolean_const-> True #PushBool After : PushBool Semstack is: ConstEntry (type boolean) <+ SemTop AddrEntry (type boolean) StLstEntry grammar: primary -> boolean_const #ConstReduce After : ConstReduce Semstack is: ExprEntry (type boolean) <+ SemTop AddrEntry (type boolean) StLstEntry grammar: fact -> primary grammar: u_expr -> fact grammar: term -> u_expr Token : Termsym grammar: s_expr -> term grammar: relation -> s_expr grammar: expr -> relation grammar: assignstmt->memeref Assignop expr #Assign After : Assign Semstack is: StmtEntry <+ SemTop StLstEntry grammar: stmt -> assignstmt Termsym grammar: stmtlist -> stmtlist stmt #MergeStmts After : MergeStmts Semstack is: StLstEntry <+ SemTop Token : Writeln Token : Lparen Token : Strconst grammar: actparam -> Strconst #PushString#CreateaActParam After : PushString Semstack is: StrConstEntry (z = ) <+ SemTop StLstEntry After : CreateActParam Semstack is: ParmEntry <+ SemTop StLstEntry grammar: actparamlist->actparam Token : Commasym Token : Id grammar: identifier->Id #PushId After : PushId Semstack is: IdEntry (z) <+ SemTop ParmEntry StLstEntry grammar: memref -> identifier #IdToAddr After : IdToAddr Semstack is: AddrEntry (type boolean) <+ SemTop ParmEntry StLstEntry grammar: primary -> memref #AddrToPrimary After : AddrToPrimary Semstack is: ExprEntry (type boolean) <+ SemTop ParmEntry StLstEntry grammar: fact -> primary grammar: u_expr -> fact grammar: term -> u_expr Token : Rparen grammar: s_expr -> term grammar: relation -> s_expr grammar: expr -> relation grammar: actparam -> expr #CreateActParam After : CreateActParam Semstack is: ParmEntry <+ SemTop ParmEntry StLstEntry grammar: actparamlist->actparamlist Commasym actparam #MergeActParam After : MergeActParam Semstack is: ParmEntry <+ SemTop StLstEntry grammar: writestmt-> Writeln Lparen actparamlist Rparen #Call After : Call Semstack is: StmtEntry <+ SemTop StLstEntry Token : Termsym grammar: stmt -> writestmt Termsym grammar: stmtlist -> stmtlist stmt #MergeStmts After : MergeStmts Semstack is: StLstEntry <+ SemTop Symbol table dump: boolean Type: boolean integer Type: integer x Type: integer y Type: boolean z Type: boolean Token : End grammar: body -> Body decllst Begin stmtlst Token : Termsym grammar: pgm -> Package packname Is body End ;# Done Warning - integer 'x' is not used Warning - boolean 'y' is not used After : Done Semstack is: EMPTY Intermediate Representation - the Abstract Syntax Tree Statements Assign z gets Immediate Value 1 Writeln parameters String: z = z >From codegen.c - DisplayRegs() marks used registers Register: 0 1 2 3 4 5 6 7 8 9 - - - - - - - - - - Used = x: x x COMPILATION COMPLETE out simple.c listing file 1 -- test b0t 2 package b0t is 3 body 4 x: integer; 5 y,z: boolean; 6 begin 7 z := true; 8 writeln("z = ",z); 9 %%dmp 10 end; Warning - integer 'x' is not used Warning - boolean 'y' is not used 11 spim code generated by compiler # Register Usage: # $s0 for global variables # .text .globl main main: la $s0, VARS # # Start Code # Generate Assignment Statement # li $t0,1 sw $t0,8($s0) # # Generate Writeln statement la $a0, S1 li $v0, 4 syscall li $v0, 1 lw $a0,8($s0) syscall la $a0, S0 li $v0, 4 syscall # # Halt execution li $v0 10 syscall # # Finish up by writing out constants .word 0 CONST: #Constant storage area .data S0: .asciiz "\n" .data S1: .asciiz "z = " # # Reserve space for global variables .word 0 VARS: # space for Global Variables .data _x: .word 0 # Offset at 0 .data _y: .word 0 # Offset at 4 .data _z: .word 0 # Offset at 8