三、属性翻译文法
主类声明(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>
闽公网安备 35060202000074号