Учебник информатики способ сделать текст / XML / любой анализ - PullRequest
3 голосов
/ 30 сентября 2008

Это какое-то время гремело в моем мозгу.

У меня было некоторое исследование по Compilers / Flex / Byson и тому подобному, но я так и не нашел хорошую справку, в которой подробно рассказывалось бы о «стеке разбора» или о том, как его реализовать.

Кто-нибудь знает хорошие ссылки, где я могу наверстать упущенное?

Редактировать : Я ценю все ссылки на компиляторы, и я собираюсь перечислить некоторые из перечисленных книг, но я сосредоточился на самом синтаксическом анализе, а не на том, что вы будете делать с ним после.

Ответы [ 5 ]

10 голосов
/ 30 сентября 2008

Книга Дракон ! Я использовал его совсем недавно, чтобы написать компилятор (на PHP!) Для языка обработки файлов шаблонов, написанных на RTF ...

3 голосов
/ 23 апреля 2011

Это ответ Димы, который вы приняли как правильный ответ. Хотя утверждение о том, что синтаксический анализ связан с теорией автоматов, не является плохим ответом, я чувствую, что здесь есть некоторое недопонимание.

  • Во-первых, конечные автоматы способны распознавать только регулярные языки (например, регулярные выражения). Для распознавания контекстно-свободных языков вам понадобится pushdown automata , который является более мощным. См. http://en.wikipedia.org/wiki/Automata_theory#Classes_of_automata, чтобы узнать больше автоматов и их связь с различными классами языков.

  • Во-вторых, синтаксический анализ отличается от распознавания . Распознавание строки только говорит вам, есть ли эта строка на языке, сгенерированном вашей грамматикой. Цель синтаксического анализатора - создать конкретное синтаксическое дерево, которое является более сложным и, как правило, более полезным.

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

EDIT: Я извиняюсь за то, что поднял этот вопрос снова, я только что натолкнулся на два отличных поста, описывающих взаимосвязь между обычными языками и конечными автоматами , контекстно-свободными языками и автоматами . Может быть интересным для людей, которые находят этот вопрос.

1 голос
/ 02 октября 2008

Парсер - это в основном конечный автомат, или конечный автомат. Вы должны найти книгу по теории вычислений, в которой обсуждаются конечные автоматы и такие вещи, как обычные языки, контекстно-свободные языки и т. Д.

0 голосов
/ 30 сентября 2008

Прочтите «Бринч Хансен о компиляторах Pascal» ... он был написан в 1985 году, но я использовал его в прошлом году для курса по компиляторам (автор Per Per Brinch Hansen) и нашел его очень лаконичным и полезным для разработки компиляторов.

0 голосов
/ 30 сентября 2008

попробуй амазонка

Конструкция компилятора это только один хороший пример

...