/** * @param Symbol $symbol * @return array|NormalizedProduction[] */ public function getAllEntriesFor(Symbol $symbol) { $set = new ArraySet($this->productionHash); foreach ($this->uniqueEntries as $entry) { if ($entry->getNonTerminal()->toString() == $symbol->toString() || $entry->getTerminal()->toString() == $symbol->toString()) { $otherSet = $entry->getProductionSet(); $set->addAll($otherSet); } } return $set->toList(); }
/** * @param Symbol $nonTerminal * @return ArraySet|null */ public function getTerminalSet(Symbol $nonTerminal) { $key = $nonTerminal->toString(); if (array_key_exists($key, $this->terminalSets)) { return $this->terminalSets[$key]; } return null; }
public function add(Symbol $terminal) { $key = $terminal->toString(); if (array_key_exists($key, $this->terminals)) { return false; } $this->terminals[$key] = $terminal; return true; }
public function matchSymbol(Symbol $symbol) { if ($symbol instanceof EpsilonSymbol) { return true; } if (EpsilonSymbol::singletonInstance()->getType() == $symbol->getType()) { return EpsilonSymbol::singletonInstance()->toString() == $symbol->toString(); } return false; }
/** * @return string */ public function toHash() { $string = $this->nonTerminal->toString() . $this->terminal->toString(); $hash = md5($string); return $hash; }
public function compare(Symbol $leftSymbol, Symbol $rightSymbol) { $leftString = $leftSymbol->toString(); $rightString = $rightSymbol->toString(); return strcmp($leftString, $rightString); }
public function contains(Symbol $symbol) { return array_key_exists($symbol->toString(), $this->symbols); }
/** * @param Symbol $symbol * @return ExpressionSymbol */ public static function createAdapterForSymbol(Symbol $symbol) { $expression = new self($symbol->getType(), $symbol->toString()); return $expression; }