Пример #1
0
 /**
  * @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;
 }
Пример #2
0
 public function add(Symbol $terminal)
 {
     $key = $terminal->toString();
     if (array_key_exists($key, $this->terminals)) {
         return false;
     }
     $this->terminals[$key] = $terminal;
     return true;
 }
Пример #3
0
 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;
 }
Пример #4
0
 /**
  * @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();
 }
Пример #5
0
 /**
  * @return string
  */
 public function toHash()
 {
     $string = $this->nonTerminal->toString() . $this->terminal->toString();
     $hash = md5($string);
     return $hash;
 }
Пример #6
0
 /**
  * @param Symbol $symbol
  * @return bool
  */
 public function matchSymbol(Symbol $symbol)
 {
     return $symbol->getType() === $this->type;
 }
Пример #7
0
 public function compare(Symbol $leftSymbol, Symbol $rightSymbol)
 {
     $leftString = $leftSymbol->toString();
     $rightString = $rightSymbol->toString();
     return strcmp($leftString, $rightString);
 }
Пример #8
0
 public function contains(Symbol $symbol)
 {
     return array_key_exists($symbol->toString(), $this->symbols);
 }
Пример #9
0
 /**
  * @param Symbol $symbol
  * @return bool
  */
 public function match(Symbol $symbol)
 {
     $match = $symbol->getType() === Symbol::TYPE_TERMINAL;
     $this->matchedOne |= $match;
     return $match;
 }
Пример #10
0
 /**
  * @param Symbol $symbol
  * @return ExpressionSymbol
  */
 public static function createAdapterForSymbol(Symbol $symbol)
 {
     $expression = new self($symbol->getType(), $symbol->toString());
     return $expression;
 }