p0-symtab-example.txt ----------------------- Using the source code example file %%t %%ss %%dmp beta := 2; %%dmp alpha := beta * 3; %%dmp writeln(alpha, beta); ====================================================================== rohan% simple -i -y -o tsymb.s -i tsymb.list tsymb in simple.c grammar: stmtlist -> lambda Symbol table dump: SymRoot is NULL => symbol table is empty Token : Id grammar: identifier->Id After : PushId Semstack is: IdEntry (beta) <+ SemTop StLstEntry grammar: memref -> identifier After : IdToAddr Semstack is: AddrEntry <+ SemTop StLstEntry Token : Assignop Token : Iconst grammar: integer_const-> Iconst After : PushInt Semstack is: IconstEntry <+ SemTop AddrEntry StLstEntry grammar: primary -> integer_const After : IconstReduce Semstack is: ExprEntry <+ SemTop AddrEntry StLstEntry grammar: fact -> primary grammar: term -> fact Token : Termsym grammar: expr -> term grammar: assignstmt->memeref Assignop expr After : Assign Semstack is: StmtEntry <+ SemTop StLstEntry grammar: stmt -> assignstmt Termsym grammar: stmtlist -> stmtlist stmt After : MergeStmts Semstack is: StLstEntry <+ SemTop Symbol table dump: beta Token : Id grammar: identifier->Id After : PushId Semstack is: IdEntry (alpha) <+ SemTop StLstEntry grammar: memref -> identifier After : IdToAddr Semstack is: AddrEntry <+ SemTop StLstEntry Token : Assignop Token : Id grammar: identifier->Id After : PushId Semstack is: IdEntry (beta) <+ SemTop AddrEntry StLstEntry grammar: memref -> identifier After : IdToAddr Semstack is: AddrEntry <+ SemTop AddrEntry StLstEntry grammar: primary -> memref After : AddrToPrimary Semstack is: ExprEntry <+ SemTop AddrEntry StLstEntry grammar: fact -> primary grammar: term -> fact Token : Mpysym grammar: multop -> Mpysym After : Operator Semstack is: OperEntry <+ SemTop ExprEntry AddrEntry StLstEntry Token : Iconst grammar: integer_const-> Iconst After : PushInt Semstack is: IconstEntry <+ SemTop OperEntry ExprEntry AddrEntry StLstEntry grammar: primary -> integer_const After : IconstReduce Semstack is: ExprEntry <+ SemTop OperEntry ExprEntry AddrEntry StLstEntry grammar: fact -> primary grammar: term -> term multop fact After : DoArithOp Semstack is: ExprEntry <+ SemTop AddrEntry StLstEntry Token : Termsym grammar: expr -> term grammar: assignstmt->memeref Assignop expr After : Assign Semstack is: StmtEntry <+ SemTop StLstEntry grammar: stmt -> assignstmt Termsym grammar: stmtlist -> stmtlist stmt After : MergeStmts Semstack is: StLstEntry <+ SemTop Symbol table dump: alpha beta Token : Writeln Token : Lparen Token : Id grammar: identifier->Id After : PushId Semstack is: IdEntry (alpha) <+ SemTop StLstEntry grammar: memref -> identifier After : IdToAddr Semstack is: AddrEntry <+ SemTop StLstEntry grammar: primary -> memref After : AddrToPrimary Semstack is: ExprEntry <+ SemTop StLstEntry grammar: fact -> primary grammar: term -> fact Token : Commasym grammar: expr -> term grammar: actparam -> expr After : CreateActParam Semstack is: ParmEntry <+ SemTop StLstEntry grammar: actparamlist->actparam Token : Id grammar: identifier->Id After : PushId Semstack is: IdEntry (beta) <+ SemTop ParmEntry StLstEntry grammar: memref -> identifier After : IdToAddr Semstack is: AddrEntry <+ SemTop ParmEntry StLstEntry grammar: primary -> memref After : AddrToPrimary Semstack is: ExprEntry <+ SemTop ParmEntry StLstEntry grammar: fact -> primary grammar: term -> fact Token : Rparen grammar: expr -> term grammar: actparam -> expr After : CreateActParam Semstack is: ParmEntry <+ SemTop ParmEntry StLstEntry grammar: actparamlist->actparamlist Commasym actparam After : MergeActParam Semstack is: ParmEntry <+ SemTop StLstEntry grammar: writestmt-> Writeln Lparen actparamlist Rparen After : Call Semstack is: StmtEntry <+ SemTop StLstEntry Token : Termsym grammar: stmt -> writestmt Termsym grammar: stmtlist -> stmtlist stmt After : MergeStmts Semstack is: StLstEntry <+ SemTop grammar: program -> stmtlist After : Done Semstack is: EMPTY Intermediate Representation - the Abstract Syntax Tree Statements Assign beta gets Immediate Value 2 Assign alpha gets beta multiply Immediate Value 3 Writeln parameters alpha beta From codegen.c - DisplayRegs() marks used registers Register: 0 1 2 3 4 5 6 7 8 9 - - - - - - - - - - Used = x: COMPILATION COMPLETE out simple.c ======================================================== SPIM Version 6.2 of January 11, 1999 Copyright 1990-1998 by James R. Larus (larus@cs.wisc.edu). All Rights Reserved. See the file README for a full copyright notice. Loaded: /opt/spim/bin/trap.handler 62 ============================= tsymb.s ============================== han% cat tsymb.s # Register Usage: # $s0 for global variables # .text .globl main main: la $s0, GVARS # # Start Code # # Generate Assignment Statement li $t0,2 sw $t0,4($s0) # # Generate Assignment Statement lw $t0,4($s0) mul $t0,$t0,3 sw $t0,0($s0) # # Generate Writeln statement li $v0, 1 lw $a0,0($s0) syscall li $v0, 1 lw $a0,4($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" # # Reserve space for global variables .word 0 GVARS: # space for Global Variables .data _alpha: .word 0 # Offset at 0 .data _beta: .word 0 # Offset at 4 .data Temp_Wr: .word 0 #just for alignment of write(exprtree)