com.ssv.test.airbase.contest
Class Execution

java.lang.Object
  extended by com.ssv.test.airbase.contest.Execution

public class Execution
extends java.lang.Object

Этот класс представляет "объектный код" "скомпилированной" программы.

Изначально я не собирался делать "кодогенерацию", я просто хотел выполнить метод Operator.run() оператора, представляющего "верхний уровень" программы. Но к сожалению, такой номер не прошел, поскольку у нас есть оператор goto, который ломает иерархичность исполнения. Поэтому, после синтаксического разбора и получения набора операторов, мне пришлось проводить некоторую дополнительную работу.

Я пришел к такой схеме: программа есть последовательность объектов типа Step, размещенных последовательно. "Обычные" операторы после выполнения просто переходят к следующей команде (экземпляру типа Step). Но есть две специальных команды, меняющие порядок исполнения. Эти команды - безусловный переход (Goto) и условный переход (ConditionalGoto). После их исполнения управление переходит не к следующей команде, а к некоторой другой точке в списке.

Author:
Sergey Siryk

Nested Class Summary
static class Execution.ConditionalGoto
           
static class Execution.Goto
           
 
Constructor Summary
Execution(Operator op)
          Создать объект Execution, "откомпилировать" оператор, переданный как параметр в последовательность шагов.
 
Method Summary
 void add(com.ssv.test.airbase.contest.Execution.Step step)
           
 void add(Operator op)
           
 void list()
           
 void run()
          Данный метод выполняет последовательность шагов.
 int size()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Execution

public Execution(Operator op)
Создать объект Execution, "откомпилировать" оператор, переданный как параметр в последовательность шагов.

Parameters:
op -
Method Detail

list

public void list()

size

public int size()

add

public void add(com.ssv.test.airbase.contest.Execution.Step step)

add

public void add(Operator op)

run

public void run()
         throws ParserException
Данный метод выполняет последовательность шагов. Выполнение всегда начинается с шага 0 в списке и выполняется до тех пор, пока "адрес" следующей команды - за границей списка команд.

Throws:
ParserException