Пример #1
0
 protected static function parseSignature($scanner, $_symTable)
 {
     list($identifier, $symTable) = parent::parseSignature($scanner, $_symTable);
     parent::requireOperator($scanner, ':');
     $scanner->next();
     $type = SymType::parseFixed($scanner, $symTable);
     if ($type->isAnonim()) {
         $symTable->append($type);
     }
     $_symTable->append(new SymVar('result', $type));
     return [$identifier, $symTable, $type];
 }
Пример #2
0
 protected static function parseSignature($scanner, $_symTable)
 {
     if (!$scanner->get()->isIdentifier()) {
         parent::simpleException($scanner, ['<IDENTIFIER>']);
     }
     $symTable = new SymTable($_symTable);
     $identifier = $scanner->get()->getValue();
     $scanner->next();
     if ($scanner->get()->isOperator('(')) {
         $scanner->next();
         $idx = 0;
         while (true) {
             $identifiers = [];
             while ($scanner->get()->isIdentifier()) {
                 $identifiers[] = $scanner->get()->getValue();
                 $scanner->next();
                 if (!$scanner->get()->isOperator(',')) {
                     break;
                 }
                 $scanner->next();
             }
             if (count($identifiers) > 0) {
                 parent::requireOperator($scanner, ':');
                 $scanner->next();
                 $type = SymType::parseFixed($scanner, $symTable);
                 foreach ($identifiers as $arg) {
                     $symTable->append(new SymArg($arg, $type, $idx));
                     $idx++;
                 }
             }
             if ($scanner->get()->isOperator(')')) {
                 $scanner->next();
                 break;
             }
             parent::semicolonPass($scanner);
         }
     }
     return [$identifier, $symTable];
 }