词法分析(flex++)-语法分析(bison++,语法树,一般是采用自下而上的语法树)-语义分析(静态语义检查,类型检查)-中间代码生成(主要是对 抽象语法树的翻译, 说明语句\控制语言\赋值语句的翻译)-中间代码优化-目标代码生成(汇编指令)-目标代码优化. w2 f, q8 b0 z2 z
1 C- L! |' f2 @) \9 r7 {0 t还有在此过程中,会用到符号表(symbol_table),和出错处理(warning, errors,)7 C& n( P9 E! s% D
; s# X0 S$ T* A; E7 J. _Java的编译器(javac.exe) 和C编译器不一样+ c. E# h9 Z$ v; u# R3 o: o
建立批解析环境-词法分析+语法分析(JavaCC)-语义分析-翻译(主要是类中的方法)-字节码文件生成1 M- _% h$ c3 i, i5 f
出错处理(env.err(para1,....))+常量池(Constant_Pool)9 `7 w/ M/ ?, \# Y/ a9 W! ^
格式:
" ]( g3 B7 @4 O5 F$ ]typedef unsigned char u1;
% ~! ], [# [: K$ @+ ytypedef unsigned short u2; S6 ^$ q( M! w4 b, Z0 D
typedef unsigned int u4;
! J. ]# H9 b* ^' q9 p& c# \0 [typedef unsigned __int64 u8;8 b& W- }9 S( V
typdef struct _ClassFile{
5 X. p/ b1 r2 l+ j6 Lu4 java_magic;
# x: p x$ O; Uu2 minor_version;7 k& E% R0 z. T# a# y- d
u2 major_version;
7 @! ^+ b7 [3 ` _, P- P) Z+ Gu2 constantPool_count;+ ~$ ^% `2 ], ^: {/ [
constantPool_info constatPool[constantPool_count-1];
! k! G* k4 h' p& n" C' Lu2 access_flags;3 W" o& _$ r* S, R" C
u2 this_class;4 K" b* J: e4 V7 u6 e n6 u4 f
u2 super_class;
+ I. h1 f0 f% j+ k/ v5 Uu2 interfaces_count;& D. `9 F9 X1 K, d& c
u2 interferfaces;
/ P0 W1 q7 v8 s$ @u2 field_count, {9 D" p. J7 v6 J
field_info field[fields_count];/ `5 z- ^9 u- c$ B: R j9 ?3 U+ W% n
u2 method_count;
# n" a! P% V' V! n5 Cmethods_info method[methods_count];% }) C1 V' i2 F4 _# ]( \) `
u2 attribute_count;' J$ k0 ^1 {2 e( W
attribute_info attribute[attribute_count];
' \+ d0 e$ A1 x- W% ?# P2 W# D3 R}ClassFile;