|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。编译3、属性翻译文法
主类声明(MainClass)
<MainClass>::="class"<Identifier>↑<id_name1>
@fillMemory↓<id_name1>↑<id_address>
@fillTable↓<id_name1>,<id_address>
@fillTree↓<id_name1>
"{""public""static""void""main""(""String""[""]"
<Identifier>↑<id_name2>,<id_belongsTo>=<id_name1>,<id_type>=StringArrayType
@fillTable↓<id_name2>,<id_belongsTo>
"{"<PrintStatement>"}""}"
类声明(ClassDeclaration)
<ClassDeclaration>::="class"<Identifier>↑<id_name>
@checkTable↓<id_name>
@fillMemory↓<id_name1>↑<id_address>
@fillTable↓<id_name>,<id_address>
@fillTree↓<node_name>=<id_name>
"{"(VarDeclaration)*(MethodDeclaration)*"}"
类承继声明(ClassExtendsDeclaration)
<ClassExtendsDeclaration>::="class"<Identifier>↑<id_name1>
@checkTable↓<id_name1>
"extends"<Identifier>↑<id_name2>
@checkTree↓<id_name2>
@fillMemory↓<id_name1>↑<id_address>
@fillTable↓<id_name1>,<id_name2>,<id_address>
@fillTree↓<child_name>=<id_name1>,<parent_name>=<id_name2>
"{"(VarDeclaration)*(MethodDeclaration)*"}"
变量声明(VarDeclaration)
<VarDeclaration>::=<Type>↑<id_type>
<Idetifier>↑<id_name>,<id_belongsTo>“;”
@checkTable↓<id_name>,<id_belongsTo>
@fillMemory↓<id_name>↑<id_address>
@fillTable↓<id_name>,<id_type>,<id_belongsTo>,<address>
<Type>↑<id_type>::=<ArrayType>↑<id_type>=ArrayType
|<BooleanType>↑<id_type>=BooleanType
|<IntegerType>↑<id_type>=IntegerType
<VarDeclaration>::=<Type>↑<id_type>=ObjectType
@checkTable↓<id_type>
<Idetifier>↑<id_name>,<id_belongsTo>“;”
@checkTable↓<id_name>,<id_belongsTo>
@fillTable↓<id_name>,<id_type>,<id_belongsTo>
办法声明(MethodDeclaration)
<MethodDeclaration>::="public"<Type>↑<id_type>
<Identifier>↑<id_name>,<id_belongsTo>
@checkTable↓<id_name>,<id_belongsTo>
@fillMemory↓<id_name>↑<id_address>
@fillTable↓<id_name>,<id_type>,<id_belongsTo>,<id_address>
"("(<FormalParameterList>)?")"
"{"(<VarDeclaration>)*(<Statement>)*"return"
<Expression>↑<exp_type>,<exp_value>
@checkType↓<id_type>,<exp_type>";""}"
<Type>↑<id_type>::=<ArrayType>↑<id_type>=ArrayType
|<BooleanType>↑<id_type>=BooleanType
|<IntegerType>↑<id_type>=IntegerType
<FormalParameterList>::=<FormalParameter>
(<FormalParameterRest>)*
<FormalParameter>::=<Type>↑<id_type>
<Identifier>↑<id_name>,<id_belongsTo>
@checkTable↓<id_name>,<id_belongsTo>
@fillTable↓<id_name>,<id_type>
<MethodDeclaration>::="public"<Type>↑<id_type>=ObjectType
@checkTable↓<id_type>
<Identifier>↑<id_name>,<id_belongsTo>
@checkTable↓<id_name>,<id_belongsTo>
@fillMemory↓<id_name>↑<id_address>
@fillTable↓<id_name>,<id_type>,<id_belongsTo>,<id_address>
"("(<FormalParameterList>)?")"
"{"(<VarDeclaration>)*(<Statement>)*"return"
<Expression>↑<exp_type>,<exp_value>
@checkType↓<id_type>,<exp_type>";""}"
<Type>↑<id_type>::=<ArrayType>↑<id_type>=ArrayType
|<BooleanType>↑<id_type>=BooleanType
|<IntegerType>↑<id_type>=IntegerType
<FormalParameterList>::=<FormalParameter>
(<FormalParameterRest>)*
<FormalParameter>::=<Type>↑<id_type>=ObjectType
@checkTable↓<id_type>
<Identifier>↑<id_name>,<id_belongsTo>
@checkTable↓<id_name>,<id_belongsTo>
@fillMemory↓<id_name>↑<id_address>
@fillTable↓<id_name>,<id_type>,<id_address>
<FormalParameterRest>::=","<FormalParameter>
赋值语句(AssignmentStatement)
<AssignmentStatement>::=<Identifier>↑id_name@checkTable↓<id_name>↑<id_type>
“=”<Expression>↑<exp_type>,<exp_value>“;”
@checkType↓<id_type>,<exp_type>
@generateCode↓<stmt_type>=stmt_assign,<extra_para>
数组元素赋值语句(ArrayAssignmentStatement)
<ArrayAssignmentStatement>::=<Identifier>↑<id_name>@checkTable↓<id_name>↑<id_type>
@checkType↓<id_type>,ArrayType
"["<Expression>↑<exp_type1>,<exp_value1>
@checkType↓<exp_type1>,IntegerType
"]""="<Expression>↑<exp_type2>,<exp_value2>
@checkType↓<exp_type2>,IntegerType";"
@generateCode↓<stmt_type>=stmt_array_assign,<extra_para>
if语句(IfStatement)
<IfStatement>:="if""("<Expression>↑<exp_type>,<exp_value>
@checkType↓<exp_type>,BooleanType
")"<Statement>"else"<Statement>
@generateCode↓<stmt_type>=stmt_if,<extra_para>
while语句(WhileStatemen)
<WhileStatement>::="while""("<Expression>↑<exp_type>,<exp_value>
@checkType↓<exp_type>,BooleanType
")"<Statement>
@generateCode↓<stmt_type>=stmt_while,<extra_para>
打印语句(PrintStatement)
<PrintStatement>::="System.out.println""("
<Expression>↑<exp_type>,<exp_value>
@checkType↓<exp_type>,IntegerType
")"";"
@generateCode↓<stmt_type>=stmt_print,<extra_para>
属性及举措注释
举措
举措
感化
@checkTable↓<id_name>,<id_level>
反省标识符的正当性(遍历标记表)
@checkTable↓<class_name>
反省类名是不是已声明
@checkTable↓<id_name>↑<id_type>
反省变量是不是已声明,若已声明前往变量范例
@checkTable↓<id_type>
反省范例是不是已声明
@fillTable↓<id_name1>,<id_address>
将标识符拔出标记表
@fillTable↓<child_name>,<parent_name>,<id_address>
将子类拔出标记表,同时复制父类的办法和类变量至子类
@fillTable↓<id_name>,<id_belongsTo>
将标识符拔出标记表
@fillTable↓<id_name>,<id_sort>,<id_level>,<id_type>
将标识符拔出标记表
@fillMemory↓<id_name>↑<id_address>
挂号内存,前往地点
@generateCode↓<stmt_type>,<extra_para>
天生伪代码
@checkType↓<child_name>,<parent_name>
反省范例正当性(遍历承继树、标记表)
@checkType↓<id_type>,<exp_type>
反省变量范例与表达式范例是不是婚配
@checkTree↓<child_name>,<parent_name>
反省child_name是不是是parent_name的子类(遍历承继树)
@checkTree↓<class_name>
反省child_name是不是已存在于承继树内
@fillTree↓<child_name>,<parent_name>
将child_name拔出承继树中parent_name下
@fillTree↓<node_name>
将node_name拔出承继树中(父类为Object)
属性
属性
数据范例(针对Java言语)
寄义
id_name
String
标识符称号
id_level
int
标识符的条理布局
id_belongsTo
String
所属条理称号,(见附表)
id_address
int
内存地点
stmt_type
int
操纵范例(见附表)
class_name
String
类名
extra_para
Object
附加参数
child_name
String
子类称号
parent_name
String
父类称号
class_name
String
类名
id_type
compiler.type.Type
变量范例范例(见附表)
para_list
java.util.List
参数表
exp_value
int或boolean或任何程序中已界说的对象范例
表达式值
exp_type
compiler.type.Type
表达式范例
标记表布局
称号
数据范例(针对Java言语)
寄义
name
String
标识符称号
sort
String
标识符种别
type
compiler.type.Type
变量范例
belongsTo
String
回属信息(见附表)
address
int
存储地点
内存分派表布局
称号
数据范例(针对Java言语)
寄义
address
int
标识符地点
sort
String
标识符种别
name
String
标识符称号
value
Object
标识符值
附表
stmt_type
称号
值
寄义
stmt_assign
1
赋值语句
stmt_array_assign
2
数组元素赋值语句
stmt_if
3
if语句
stmt_while
4
while语句
stmt_print
5
打印语句
id_type
类
寄义
size(字长(bytes))
ArrayType
整型数组范例
4
BooleanType
布尔范例
1
IntegerType
整型范例
4
ObjectType
对象范例
不断定
NonVariableType
非变量
0
id_belongsTo
标识符范例
“belongsTo”属性内容
类
无(剖析时以文件为单元)
办法
类名
类变量
类名
办法内变量
办法名
参数
办法名
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。 |
|