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

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

4 Получили правый операнд (надо проверить число ли это),

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

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

Парсер завершит работу, когда сканер вернет FALSE или при возникновении ошибки - состояние -1. По той же причине, что и в сканере мы можем не вносить состояние -1 в таблицу автомата

Далее привожу код программы с подробными комментариями, которые заменят дальнейшие объяснения. Я не строю дерева операций в примере данного парсера. Вы можете сделать это сами, ведь в соответствующих состояниях автомата вы получите оператор и операнды.

<?php

class ExpressionParser {

var $pos, // Позиция в буфере для разбора

$length, // Длина буфера

$line, // Текущий номер строки

$column, // Текущий номер колонки в строке

$data, // Буфер данных

$brackets, // Количество открытых скобок

$state, // Текущее состояние парсера

$errorstr, // Строка диагностики ошибки

$instates, // Код слова подаваемый на вход автомата

$prevstate, // Предыдущее состояние парсера

$automat; // Таблица автомата парсера

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

* Конструктор *

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

function ExpressionParser($str) {

$this->data=$str;

$this->length=strlen($str);

$this->pos=0;

$this->line=1;

$this->column=0;

$this->brackets=0;

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