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

// Остальные слова имеют код 1

$this->instates = array("+" => 0, "*" => 0, "-" => 0, "/" => 0, "(" => 2, ")" => 3);

// Автоматпарсера

$this->automat=array(

/*

-1 Ошибка

0 Начало разбора

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

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

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

4 Получили правый операнд (надо проверить на число), ожидаем оператор или правую скобку

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

*/

//состояния 0, 1, 2, 3, 4, 5

"0"=>array( 1, -1, 1, 1, 1, 1),//оператор

"1"=>array( 2, 4, -1, 2, -1, -1),//операнд

"2"=>array( 3, 3, -1, 3, -1, -1),//левая скобка

"3"=>array(-1, -1, 5, -1, 5, 5),//праваяскобка

);

$this->state=$this->prevstate=0;

}

/**********************************************************************

* Сканер *

**********************************************************************/

function Scan() {

// Разделители, которые игнорируем

$delimiters=array(" ","t","r","n");

// Слова из одного символа

$words=array("+","-","*","/","(",")");

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