Class AbstractNestedStructureHouseKeeper

java.lang.Object
com.scriptbasic.syntax.AbstractNestedStructureHouseKeeper
All Implemented Interfaces:
NestedStructureHouseKeeper
Direct Known Subclasses:
GenericNestedStructureHouseKeeper

public abstract class AbstractNestedStructureHouseKeeper extends Object implements NestedStructureHouseKeeper
  • Constructor Details

    • AbstractNestedStructureHouseKeeper

      protected AbstractNestedStructureHouseKeeper(LexicalAnalyzer analyzer)
  • Method Details

    • push

      public void push(NestedStructure element)
      Description copied from interface: NestedStructureHouseKeeper
      Push a nested structure object on the housekeeping stack. This version of push does push the object associated with the actual class of the object.
      Specified by:
      push in interface NestedStructureHouseKeeper
      Parameters:
      element - to push on the stack.
    • isStackIsHealthy

      protected boolean isStackIsHealthy()
    • push

      public void push(Class<?> klass, NestedStructure element)
      Description copied from interface: NestedStructureHouseKeeper
      Push a nested structure object on the housekeeping stack.
      Specified by:
      push in interface NestedStructureHouseKeeper
      Parameters:
      klass - is the class that we will expect when we pop this element off
      element - the element to be stored on the stack.
    • pop

      public <T extends NestedStructure> T pop(Class<T> expectedClass) throws AnalysisException
      Description copied from interface: NestedStructureHouseKeeper
      Pops one element from the stack.

      Note that nested element have to be pushed on the stack nested. If we get an element off the stack that was not expected it means syntax error and therefore in this case exception is thrown.

      When exception was thrown the functioning of the object is not defined by this interface. Some implementation may seek the appropriate element in the stack and throw off all top element until a proper type of element is found assuming that the user forgot to close some internal programming structured in the scripted language. Other implementations may follow more complex strategy to recover from such an error. In either case the sole reason of further syntax analysis is to discover as many syntax error as possible following the first one.

      Specified by:
      pop in interface NestedStructureHouseKeeper
      Type Parameters:
      T - expected type of the element
      Parameters:
      expectedClass - the expected class of the element
      Returns:
      the top element
      Throws:
      AnalysisException - when the top element of the stack is not the type that we expect
    • checkFinalState

      public void checkFinalState() throws AnalysisException
      Description copied from interface: NestedStructureHouseKeeper
      Check final state of nested structures. Check if there are no opened nested structures or any other pending blocks.
      Specified by:
      checkFinalState in interface NestedStructureHouseKeeper
      Throws:
      AnalysisException - when there are some elements on the stack
    • consumeEndOfStatement

      public void consumeEndOfStatement() throws AnalysisException
      Description copied from interface: NestedStructureHouseKeeper
      Checks that there are no extra characters when the line analyzer expects it has finished analyzing the statement. If there are some extra characters on the line then throws syntax error exception. Otherwise it simply steps the lexical analyzer iterator over the symbol.
      Specified by:
      consumeEndOfStatement in interface NestedStructureHouseKeeper
      Throws:
      AnalysisException - when there are extra character on the actual line
    • pushEndOfStatementProcessor

      public void pushEndOfStatementProcessor(NestedStructureHouseKeeper.EndOfStatementProcessor endOfStatementProcessor)
      Specified by:
      pushEndOfStatementProcessor in interface NestedStructureHouseKeeper
    • popEndOfStatementProcessor

      public NestedStructureHouseKeeper.EndOfStatementProcessor popEndOfStatementProcessor()
      Specified by:
      popEndOfStatementProcessor in interface NestedStructureHouseKeeper