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

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

  <rightPart>

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

   <symbol>const</symbol>

  </rightPart>

 </rule>

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

  <rightPart>

   <action>idResolver.push(funcCall.size());

funcCall.push(postFix.size());postFix.push(currentLexem.textOfWord);firstPriznak=true;prog=prog+currentLexem.textOfWord;</action>

   <symbol>id</symbol>

   <symbol>ForM1</symbol>

   <symbol>RestIdExp</symbol>

   <action>int idRes=(Integer)idResolver.pop();

while(funcCall.size()&gt;idRes){

funcCall.pop();

}</action>

  </rightPart>

 </rule>

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

  <rightPart>

   <action>prog=prog+currentLexem.textOfWord;</action>

   <string>*</string>

   <symbol>U</symbol>

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

  </rightPart>

 </rule>

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

  <rightPart>

   <action>prog=prog+currentLexem.textOfWord;</action>

   <string>/</string>

   <action>divStk.push(postFix.size());</action>

   <symbol>U</symbol>

   <action>if(postFix.peek().toString()=="/"&&(((DivClass)postFix.peek()).Priority==minusPrior)){

postFix.add((Integer)divStk.pop(),new DivClass(minusPrior));

}else{postFix.push(new DivClass(minusPrior));}</action>

  </rightPart>

 </rule>

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

  <rightPart>

  </rightPart>

 </rule>

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

  <rightPart>

   <string>true</string>

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

  </rightPart>

 </rule>

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

  <rightPart>

   <string>false</string>

   <action>postFix.push("false");

 prog=prog+"false";</action>

  </rightPart>

 </rule>

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

  <rightPart>

   <action>prog=prog+currentLexem.textOfWord;</action>

   <string>!</string>

   <symbol>LogicConst</symbol>

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

  </rightPart>

 </rule>

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

  <rightPart>

   <action>firstPriznak=false;</action>

  </rightPart>

 </rule>

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

  <rightPart>

   <action>postFix.pop();

funcCall.push(postFix.size());</action>

   <symbol>FunctionArgs</symbol>

  </rightPart>

 </rule>

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

  <rightPart>

  </rightPart>

 </rule>

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

  <rightPart>

   <string>.</string>

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

   <symbol>id</symbol>

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

   <symbol>ForM1</symbol>

   <symbol>RestIdExp</symbol>

  </rightPart>

 </rule>

</syntax>

</transLab>

Вывод: в ходе выполнения лабораторной работы я изучил семантические свойства объектов транслируемой программы, методы их выявления и использования, типов данных и методов контроля типов, областей видимости переменных, локальных и нелокальных сред ссылок, способов передачи параметров, приобрел навыки преобразования псевдокода в объектный код или разработки элементов виртуальной машины для интерпретируемого языка.