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

postFix.push("define_constructor");

 MetCon=false;</action>

   <symbol>FuncBody</symbol>

   <action>if(!ct.EndConstructor()){ti.put(0,0,0,0,"method Constructor error");

 return false;}

postFix.push("define_constructor_end");

 postFix.push(labels.pop());</action>

  </rightPart>

 </rule>

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

  <rightPart>

   <action>postFix.push(currentLexem.textOfWord); prog=prog+" "+currentLexem.textOfWord;</action>

   <symbol>id</symbol>

   <symbol>BasicEnd</symbol>

  </rightPart>

 </rule>

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

  <rightPart>

  </rightPart>

  <comment>пустые параметры</comment>

 </rule>

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

  <rightPart>

   <symbol>identifier</symbol>

   <symbol>otherparams</symbol>

  </rightPart>

  <comment>тип идентификатор и другие параметры</comment>

 </rule>

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

  <rightPart>

   <symbol>BasePart</symbol>

   <symbol>GramaConstruction</symbol>

  </rightPart>

  <comment>Пошло  тело  или  что,то  вроде  того</comment>

 </rule>

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

  <rightPart>

  </rightPart>

 </rule>

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

  <rightPart>

   <string>;</string>

  </rightPart>

 </rule>

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

  <rightPart>

  </rightPart>

 </rule>

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

  <rightPart>

   <action>postFix.push(currentLexem.textOfWord);prog=prog+" "+currentLexem.textOfWord+" ";</action>

   <symbol>id</symbol>

   <action>postFix.push(currentLexem.textOfWord);prog=prog+" "+currentLexem.textOfWord+" ";</action>

   <symbol>id</symbol>

   <action>if(MetCon){

            if(!ct.AddMethodParam(postFix.get(postFix.size()-2).toString(),postFix.get(postFix.size()-1).toString()))

              ti.put(0,0,0,0,"Method param redef");

       }else{

            if(!ct.AddConstructorParam(postFix.get(postFix.size()-2).toString(),postFix.get(postFix.size()-1).toString()))

                 ti.put(0,0,0,0,"Constructor param redef");

};</action>

   <action>tetrades.add(new Tetrade("DEFINE_PARAM", postFix.get(postFix.size()-2).toString(),postFix.get(postFix.size()-1).toString(),""));

postFix.push("define_param");</action>

  </rightPart>

 </rule>

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

  <rightPart>

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

   <symbol>TypeId</symbol>

   <action>postFix.push(currentLexem.textOfWord);prog=prog+" "+currentLexem.textOfWord+" ";</action>

   <symbol>id</symbol>

   <action>if(MetCon){

     if(!ct.AddMethodParam(postFix.get(postFix.size()-2).toString(),postFix.get(postFix.size()-1).toString()))

ti.put(0,0,0,0,"Method param redef");

}else{

 if(!ct.AddConstructorParam(postFix.get(postFix.size()-2).toString(),postFix.get(postFix.size()-1).toString()))

ti.put(0,0,0,0,"Constructor param redef");

};</action>

   <action>tetrades.add(new Tetrade("DEFINE_PARAM", postFix.get(postFix.size()-2).toString(),postFix.get(postFix.size()-1).toString(),""));postFix.push("define_param");</action>

  </rightPart>

 </rule>

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

  <rightPart>