[silvano@rivoira ~]$ mjavaCodeGenerator Reading "mjava.flex" Constructing NFA : 419 states in NFA Converting NFA to DFA : .................................................................................................................................................................................. 184 states before minimization, 159 states in minimized DFA Old file "Scanner.java" saved as "Scanner.java~" Writing code to "Scanner.java" Warning : Terminal "ILLEGAL_CHARACTER" was declared but never used ------- CUP v0.11a beta 20060608 Parser Generation Summary ------- 0 errors and 1 warning 52 terminals, 124 non-terminals, and 246 productions declared, producing 458 unique parse states. 1 terminal declared but not used. 0 non-terminal declared but not used. 0 productions never reduced. 0 conflicts detected (0 expected). Code written to "mjavac.java", and "sym.java". ---------------------------------------------------- (v0.11a beta 20060608) Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. ... Creating Symbol-Table for "./source/Fact/Fact.mjava" ... NEW METHOD: 9355 (DOMAIN: 5, RANGE: 5) PUT printf IN e0: {printf=(9355, null, true, null null)} - VARIABLES: [] PUT scanf IN e0: {printf=(9355, null, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] e0: {printf=(9355, null, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] CLASS ENTRY: String e1: (e0) {} - VARIABLES: [] NEW CLASS: 7String (NAME: String, SUPER: null, ENV: e1) PUT String IN e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] CLASS EXIT: String e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] CLASS ENTRY: EntInt e2: (e0) {} - VARIABLES: [] NEW CLASS: 7EntInt (NAME: EntInt, SUPER: null, ENV: e2) PUT EntInt IN e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), EntInt=(7EntInt, 7EntInt, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] PUT fact IN e2: (e0) {fact=null} - VARIABLES: [] METHOD ENTRY: fact e3: (e2) {} - VARIABLES: [] PUT VARIABLE n IN e3: (e2) {n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [n] REMOVED VARIABLE n FROM e3: (e2) {n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [] NEW METHOD: 9322 (DOMAIN: 2, RANGE: 2) CHANGED fact IN e2: (e0) {fact=(9322, 7EntInt, false, null null)} - VARIABLES: [] METHOD EXIT e2: (e0) {fact=(9322, 7EntInt, false, null null)} - VARIABLES: [] PUT main IN e2: (e0) {fact=(9322, 7EntInt, false, null null), main=null} - VARIABLES: [] METHOD ENTRY: main e4: (e2) {} - VARIABLES: [] CHANGED main IN e2: (e0) {fact=(9322, 7EntInt, false, null null), main=(9355, 7EntInt, true, null null)} - VARIABLES: [] PUT VARIABLE n IN e4: (e2) {n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [n] PUT VARIABLE f IN e4: (e2) {f=(2, 7EntInt, false, i32 %f), n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [n, f] BLOCK ENTRY e5: (e4) {} - VARIABLES: [] PUT CONSTANT @.str0 = "Enter an integer greater than 0 and less than 17: " IN GLOBALS PUT CONSTANT @.str1 = "%d" IN GLOBALS NEW REFERENCE: 902 (REFERRED: 2, WIDTH: 4) BLOCK EXIT e4: (e2) {f=(2, 7EntInt, false, i32 %f), n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [n, f] PUT CONSTANT @.str2 = "factorial(%d)= %d " IN GLOBALS METHOD EXIT e2: (e0) {fact=(9322, 7EntInt, false, null null), main=(9355, 7EntInt, true, null null)} - VARIABLES: [] CLASS EXIT: EntInt e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), EntInt=(7EntInt, 7EntInt, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] Number of errors = 0. Number of warnings = 0. Types: 1 = i8 2 = i32 3 = double 4 = bool 5 = void 6 = error 7EntInt = EntInt 7String = String 902 = *i32 9322 = method: i32(i32) 9355 = method: void(void) ... Generating intermediate code for "./source/Fact/Fact.mjava" ... e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), EntInt=(7EntInt, 7EntInt, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] CLASS ENTRY: String e1: (e0) {} - VARIABLES: [] CURRENT CLASS: 7String (NAME: String, SUPER: null, ENV: e1) CLASS EXIT: String e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), EntInt=(7EntInt, 7EntInt, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] CLASS ENTRY: EntInt e2: (e0) {fact=(9322, 7EntInt, false, null null), main=(9355, 7EntInt, true, null null)} - VARIABLES: [] CURRENT CLASS: 7EntInt (NAME: EntInt, SUPER: null, ENV: e2) METHOD ENTRY: fact e3: (e2) {n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [] CURRENT METHOD: fact, type: 9322 (DOMAIN: 2, RANGE: 2) METHOD EXIT e2: (e0) {fact=(9322, 7EntInt, false, null null), main=(9355, 7EntInt, true, null null)} - VARIABLES: [] METHOD ENTRY: main e4: (e2) {f=(2, 7EntInt, false, i32 %f), n=(2, 7EntInt, false, i32 %n)} - VARIABLES: [n, f] CURRENT METHOD: main, type: 9355 (DOMAIN: 5, RANGE: 5) BLOCK ENTRY e5: (e4) {} - VARIABLES: [] NEW REFERENCE: 907String (REFERRED: 7String, WIDTH: 4) NEW PRODUCT: 91907String902 (LEFT: 907String, RIGHT: 902, WIDTH: 8) BLOCK EXIT e4: (e2) {f=(2, 7EntInt, false, i32* %f), n=(2, 7EntInt, false, i32* %n)} - VARIABLES: [n, f] NEW PRODUCT: 91907String2 (LEFT: 907String, RIGHT: 2, WIDTH: 8) NEW PRODUCT: 9191907String22 (LEFT: 91907String2, RIGHT: 2, WIDTH: 12) METHOD EXIT e2: (e0) {fact=(9322, 7EntInt, false, null null), main=(9355, 7EntInt, true, null null)} - VARIABLES: [] CLASS EXIT: EntInt e0: {printf=(9355, null, true, null null), String=(7String, 7String, true, null null), EntInt=(7EntInt, 7EntInt, true, null null), scanf=(9355, null, true, null null)} - VARIABLES: [] Number of errors = 0. Number of warnings = 0. Types: 1 = i8 2 = i32 3 = double 4 = bool 5 = void 6 = error 7EntInt = EntInt 7String = String 902 = *i32 907String = *String 91907String2 = *String, i32 91907String902 = *String, *i32 9191907String22 = *String, i32, i32 9322 = method: i32(i32) 9355 = method: void(void) Code written to "./source/Fact/Fact.mjava.ll". --------------------------------------- (mjavac) - assemble [ Fact.mjava.ll ] into LLVM bitcode [ Fact.mjava.bc ] - - compile [ Fact.mjava.bc ] into Intel assembly language for x86 architecture [ Fact.mjava.s ] - - run [ Fact.mjava.bc ] - ............................................................................. Enter an integer greater than 0 and less than 17: 20 Enter an integer greater than 0 and less than 17: 15 factorial(15)= 2004310016 ............................................................................. [silvano@rivoira ~]$