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]; }
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]; }