Статья: Парсер на РНР - это возможно

// Если слов больше нет, то прерываем цикл

if ($word===false) break;

// Устанавливаем код, подаваемого на вход автомата, слова

$instate=isset($this->instates[$word]) ? $this->instates[$word] : 1;

// Получаем состояние автомата парсера

$this->state=$this->automat[$instate][$this->state];

// Если ошибочное состояние, то прерываем цикл

if ($this->state==-1) {

$this->errorstr="Ошибкавстроке: $this->line, колонка: $this->column<br>";

break;

}

// Наши действия по состояниям автомата парсера

switch($this->state) {

case 1: // Получили оператор, ожидаем правый операнд или левую скобку

// Если первое слово оператор, то это может быть только "+" или "-"

if (($this->prevstate==3 || $this->prevstate==0) && $word!="-" && $word!="+") {

$this->errorstr="Ошибкавстроке: $this->line, колонка: $this->column<br>";

return false;

}

break;

case 2: // Получили левый операнд (надо проверить число ли это), ждем оператор

//или правую скобку

// Проверяем число ли это?

if (!preg_match("/^[0-9]+(.[0-9]+)?$/",$word)) {

$this->errorstr="Ошибкавстроке: $this->line, колонка: $this->column<br>";

return false;

}

break;

case 3: // Получили левую скобку, ожидаем оператор или левую скобку

К-во Просмотров: 418
Бесплатно скачать Статья: Парсер на РНР - это возможно