<?php
class EregSymbol extends Parser {
function EregSymbol($sym) {
parent :: Parser();
$bars = explode('/',$sym);
$mods = array_pop($bars);
array_shift($bars);
$spaces = '[\s\t\n]*';
$this->preg = '/^'.$spaces.'('.implode('/',$bars).')'.$spaces.'/'.$mods;
$this->sym = $sym;
}
function parse($tks) {
$spaces = '[\s\t\n]*';
if (preg_match($this->preg, $tks->str, $matches)) {
return array (ParseResult::match($matches[1]),new ParseInput(substr($tks->str,strlen($matches[0]))));
} else {
$this->setError(array((string)strlen(preg_replace('/^'.$spaces.'/','',$tks->str))=>$this->sym));
return array (ParseResult::fail(),$tks);
}
}
function print_tree() {
return $this->sym;
}
}
class Symbol extends EregSymbol {
function Symbol($ss) {
parent :: EregSymbol('/'.preg_quote($ss).'/');
$this->sym='"'.$ss.'"';
}
}
?>
|