смотрю страницу на википедии не могу ничего понять про принцип и даже про задание условия в примере Как я понимаю таблица строится из грамматики, но откуда взялась такая грамматика S → F S → (S + F) F → 1 В регулярных выражениях понятнее там язык соответствует тому что мы хотим найти а тут что означает грамматика не понятно.
VaVa, забейте на это в википеди написана откровенная чушь. Автор путает порождающие цепочки, с грамматикой. Да ещё парсер с генератором.
VaVa, По теории хорошо пишет: Карпов Ю.Г._основы построения трансляторов Книга лежит в колхозе и в генезисе. Ещё одна книга это Опалева Э.А., Самойленко В.П. -Языки программирования и методы трансляции-БХВ (2005) Тут особо вам будет интересна 6 глава. Бизон и Ясс устроены проще чем об этом пишут. Берем текстовый фал разбираем их на лексемы - слова, препинания, числа, пробельная лексема и др. Затем идем по массиву лексем, последовательно вычитывая их. Преобразуем лексему в узел синтакисиского дерева. Код (Pascal): // Кастуем лексему в узел. Node.IsTerminal:=True; Node.Lexem:=curLexem; Node.Name:=curLexem; Заносим в стек Код (Pascal): // сдвиг. Stack.Push(Node); Проверяем все правила перебором. Если какое либо правило совпало, то выполняем свёртку. Заменяем группу узлов на новый. Код (Pascal): // Свёртка. NewNode:=TNode.Create; NewNode.IsTerminal:=False; // не терминальный символ NewNode.Name:=Rule.Name; For i:=0 to Rule.Length-1 do NewNode.Add(Stack.Pop) Stack.Push(NewNode); //Обработка Rule.OnFunction(NewNode) - // вызываем функцию из сгенерированого кода. И так до тех пор пока стек не опустеет либо лексемы не закончатся. Тут свёртка для анализа вида RR, если надо LL то стек заменяете очередью и правила проверяются не на вершине стека а в конце очереди. Плюс у бизона в правила добавлены приоритеты операторов. Там свёртка выполняется над группой узлов когда на вершине стека окажется оператор с низшим приоритетом.