Esempio n. 1
0
 public function __construct($scanner, $_symTable)
 {
     parent::requireKeyword($scanner, 'case');
     $scanner->next();
     $this->condition = new Expression($scanner, $_symTable);
     parent::requireKeyword($scanner, 'of');
     $scanner->next();
     Globals::$switchDepth++;
     while (true) {
         if ($scanner->get()->isKeyword('else')) {
             $scanner->next();
             $this->default = CompoundStatement::smartParse($scanner, $_symTable);
             parent::semicolonPass($scanner);
             break;
         }
         $caseCondition = new Expression($scanner, $_symTable);
         $caseCondition = TypeCast::tryTypeCast($caseCondition, $this->condition->symType, false);
         parent::requireOperator($scanner, ':');
         $scanner->next();
         $caseStatements = CompoundStatement::smartParse($scanner, $_symTable);
         $this->cases[] = ["condition" => $caseCondition, "statements" => $caseStatements];
         parent::semicolonPass($scanner);
         if ($scanner->get()->isKeyword('end')) {
             break;
         }
     }
     Globals::$switchDepth--;
     parent::requireKeyword($scanner, 'end');
     $scanner->next();
 }
Esempio n. 2
0
 public function __construct($scanner, $_symTable)
 {
     parent::requireKeyword($scanner, 'for');
     $scanner->next();
     $this->counter = VariableAccess::parse($scanner, $_symTable);
     if (!SymSimpleType::equal($this->counter->symType, Globals::getSimpleType('integer'))) {
         SemanticException::raw($scanner, 'Counter must be integer');
     }
     parent::requireOperator($scanner, ':=');
     $scanner->next();
     $this->from = new Expression($scanner, $_symTable);
     $this->from = TypeCast::tryTypeCast($this->from, 'integer');
     switch ($scanner->get()->getValue()) {
         case 'to':
             $this->direction = self::DIRECTION_ASC;
             break;
         case 'downto':
             $this->direction = self::DIRECTION_DESC;
             break;
         default:
             parent::simpleException($scanner, ['<KEYWORD \'to\'>', '<KEYWORD \'downto\'>']);
     }
     $scanner->next();
     $this->to = new Expression($scanner, $_symTable);
     $this->to = TypeCast::tryTypeCast($this->to, 'integer');
     parent::requireKeyword($scanner, 'do');
     $scanner->next();
     Globals::$loopDepth++;
     $this->statements = CompoundStatement::smartParse($scanner, $_symTable);
     Globals::$loopDepth--;
 }
Esempio n. 3
0
 public function __construct($scanner, $_symTable)
 {
     parent::requireKeyword($scanner, 'while');
     $scanner->next();
     $this->condition = new Expression($scanner, $_symTable);
     $this->condition = TypeCast::tryTypeCast($this->condition, 'boolean');
     parent::requireKeyword($scanner, 'do');
     $scanner->next();
     Globals::$loopDepth++;
     $this->statements = CompoundStatement::smartParse($scanner, $_symTable);
     Globals::$loopDepth--;
 }