Семантика языков программирования. Семантический анализ и элементы генерации объектного кода или интерпретации, страница 6

               return this.classes.get(this.classes.size()-1).AddField(Visible, Type, Name);

        return false;

       }

     public boolean AddConstructor(boolean Visible, String Name){

             if(this.classes.size()>0)

                return this.classes.get(this.classes.size()-1).AddConstructor(Visible, Name);

             return false;

     };

     public boolean AddConstructorParam(String t, String n){

             if(this.classes.isEmpty()||this.Resolved(t)==false||this.Resolved(n))

                 return false;

             return this.classes.get(this.classes.size()-1).AddConstructorParam(new Param(t,n));

     };

     public boolean EndConstructor(){

       if(this.classes.size()>0)

              return this.classes.get(this.classes.size()-1).EndConstructor();

        return true;

     };

    public boolean AddMethod(boolean Visible, String Type, String Name){

             if(this.classes.size()>0&& this.Resolved(Type)&& this.Resolved(Name)==false)

               return this.classes.get(this.classes.size()-1).AddMethod(Visible,Type,Name);

             return false;

    };

    public boolean AddMethodParam(String t, String n){

             if(this.classes.isEmpty()||this.Resolved(t)==false||this.Resolved(n))

                 return false;

             return this.classes.get(this.classes.size()-1).AddMethodParam(new Param(t,n));

     };

     class Param{

            public String type;

            public String name;

            public Param(String Type, String Name  ){

               name=Name;

               type=Type;

            }

            public String toString(){

                return type+" "+name;

            }

            public boolean CompareToType(Param p){

                return type.compareTo(p.type)==0;

            }

           public boolean CompareToName(Param p){

                return name.compareTo(p.name)==0;

            }

      };

};

ClassTable ct=new ClassTable();

boolean MetCon;

class Tetrade{

    String oper="";

    String par1="";

    String par2="";

    String result="";

    public Tetrade(){

    };

public Tetrade(String Oper,String Par1,String Par2,String Result){

oper=Oper;

par1=Par1;

par2=Par2;

result=Result;

    };

    public String toString(){

        return oper+" "+par1+" "+par2+" "+result  ;

    };

};

ArrayList<Tetrade> tetrades=new ArrayList<Tetrade>();

Stack funcCall=new Stack();

Stack idResolver=new Stack();

 </data>

 <rule for='Classes' leftPart='Classes'>

  <rightPart>

   <symbol>Class</symbol>

   <symbol>Classes</symbol>

  </rightPart>

  <comment>Классы</comment>

 </rule>

 <rule for='Classes' leftPart='Classes'>

  <rightPart>

   <action>ti.put(0,0,0,0,"");

ti.put(0,0,0,0,"");

 ti.put(0,0,0,0,"Постфиксная запись");

for(Object postFixObject: postFix){

ti.put(0,0,0,0,postFixObject.toString());}

 ti.put(0,0,0,0,"");

ti.put(0,0,0,0,"");

ti.put(0,0,0,0,"Тетрады");

 for(Tetrade t: tetrades){ ti.put(0,0,0,0,t.toString());

 } ti.put(0,0,0,0,"");

 ti.put(0,0,0,0,"");

 ti.put(0,0,0,0,"Таблицы классов");

 ti.put(0,0,0,0,ct.toString());

prog=prog+"public class Main { public static void main(java.lang.String[] args) {Program0Program pr=new Program0Program(); pr.Main0Main();}}";

ti.put(0,0,0,0,prog);</action>

  </rightPart>

  <comment>Конец разбора классов и вывод ПФЗ.</comment>

 </rule>

 <rule for='Classes' leftPart='Class'>

  <rightPart>

   <string>data</string>

   <action>postFix.push(currentLexem.textOfWord);