160 likes | 295 Views
N.C.C Final Presentation. ( Ncc is not a C Compiler). 4 조 ( 말년병장 ) 200324293 심민조 200324210 김호철. Index. 1. Development Environment 2. Language Support 3. LEX & YACC Define 4. Symbol Table Management
E N D
N.C.C Final Presentation (Ncc is not a C Compiler) 4조 (말년병장) 200324293 심민조 200324210 김호철
Index • 1. Development Environment • 2. Language Support • 3. LEX & YACC Define • 4. Symbol Table Management • 5. Intermediate Code • 6. Target Code • 7. Optimization • 8. Work Plan • 9. Demo • 10. Q&A
Development Environment • Development Environment • Language : C, C++ • Compiler : gcc, g++ • Lexer : FLEX v2.5.4 • Yacc : BISON v1.25 • Assembler : MASM v6.15 • Linker : Microsoft Incremental Linker 6.00.8447 • O.S : Linux(ubuntu), Windows XP, Windows7 • Test Environment • O.S : Windows XP(SP3), Windows7
Language Support • Language Supports • Function Call, Argument Passing • Return Value, Printf, IF condition • For loop, While loop, break, • Increment OP, Decrement OP, +,-,/,*,mod • Recursive Function Call • NestedFor, While, IF, Integer Variable • Void type, Single/Multiple Comment • Difference ! Small ,Easy ,Real Binary • Ncc supports WIN32 PE binary, asm architecture
LEX & YACC Define • Make our Own Small C Language ! • - Mini C < NCC < ANSI C • Difference ! Small & Easy • Special Feature • - Printf can be used in grammer ! ( Not a function ) • - Genereate 3 Address IntermmediateCode • Error Handling • - Sementic Error ( Type Check, Function, Variable ) • - Syntax( {, }, ; )
Symbol Table Management • One Function has One Symbol table • Function Call , Parameter • Global Variables are not considered • Only supports Local Variable, Parameter Variable • Data Structure • Vector : Function Table • Vector : Symbol Table
Symbol Table Management Function Manage Table ---------------- FuncTab* List Literal Table Number Table Win32 Binary Function Table ---------------- funcname Symbol List Intercode List nParam Source Lexer Parser Code generate MASM assmbler Linker
Intermediate Code • Using Triple Address • Condition Jump use Compare op like assembly • Optimization ? • Constant Number Allocate Optimize • IF Statement Optimize • What is difference with assembly code? • Stack Frame Management • Register Management • Abstraction Level
Target Code(Masm Code) • Printf Library ( not a stdlib ) • Available to use Crtlib ( vc ) int main(){ intI,j,k; for(i=2; i<10; i++) { for(j=1; j<10;j++) { k=i*j; printf(“%d*%d=%d\t”,I,j,k); } printf(“\n”); }
Target Code(Total Process) int main(){ intI,j,k; for(i=2; i<10; i++) { for(j=1; j<10;j++) { k=i*j; printf(“%d*%d=%d\t”,I,j,k); } printf(“\n”); } }
Target Code(Binary Code) MASM Assembler Linker Win32 Binary
Optimization • 1. Constant Number Assign • a = 3*2+1*2 a=8 • 2. If condition Code Optimize • if( a < b) { • a++; • } • • cmpa,b • jlif_inner_stmt • jgeif_exit • inner_stmt : • inc a • if_exit: • cmpa,b • jgeif_exit • inc a • if_exit:
DEMO • 1. For Loop • 2. Function Call & For Loop • 3. While & Comment • 4. Recursive - 1 ( Recursive Summation) • 5. Recursive - 2 ( Recursive Fibonacci Sequence) • 6. MultiFunction ( Prime Finder, Piramid) • 7. Error Detection • 8. Intermediate Code