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

      };

      class Field{

            boolean visible;

            String name;

            String type;

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

               visible=Visible;

               name=Name;

               type=Type;

            }

            public String toString(){

                if (visible) return "public "+type+" "+name+";\n";

                return "private "+type+" "+name+";\n";

            }

            public boolean CompareTo(String str){

                return name.compareTo(str)==0;

            }

       }

      class Constructor{

             boolean visible;

             String name;

             ArrayList<Param> params;

             public Constructor(boolean Visible, String Name ){

                this.visible=Visible;

                this.name=Name;

                this.params=new ArrayList<Param>();

             }

             public String toString(){

                String str;

                if (visible)

                    str= "public "+name+"(";

                else

                     str= "private "+name+"(";

                boolean first=true;

                for(Param p:params){

                   if(first){

                     str+=p.toString();

                     first=false;

                   }

                   else

                     str+=", "+p.toString();

                }

                return str+");\n";

            }

             public boolean CompareTo(Constructor c){

                 ArrayList<Param> cparams=c.params;

                if(cparams.size()!=this.params.size())

                    return false;

               for(int i=0; i<this.params.size(); i++){

                       if(this.params.get(i).CompareToType(cparams.get(i))==false)

                           return false;

               }

                return true;

             };

     }

      class Method{

             boolean visible;

             String name;

             String type;

             ArrayList<Param> params;

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

                this.visible=Visible;

                this.name=Name;

                this.type=Type;

                this.params=new ArrayList<Param>();

             }

             public String toString(){

                String str;

                if (visible)

                    str= "public "+type+" "+name+"(";

                else

                     str= "private "+type+" "+name+"(";

                boolean first=true;

                for(Param p:params){

                   if(first){

                     str+=p.toString();

                     first=false;

                   }

                   else

                     str+=", "+p.toString();

                }

                return str+");\n";

            }

             public boolean CompareTo(Method c){

                if(this.name.compareTo(c.name)!=0)

                    return false;

                ArrayList<Param> cparams=c.params;

                if(cparams.size()!=this.params.size())

                    return false;

                for(int i=0; i<this.params.size(); i++){

                       if(this.params.get(i).CompareToType(cparams.get(i))==false)

                           return false;

               }

                return true;

             };

     }

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

        if(this.Resolved(Type)&&this.Resolved(Name)==false)

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