В настоящее время я беру класс компиляторов, и мне трудно понять алгоритмы синтаксического анализа LR (1), используя таблицу action/goto, а также как сгенерировать эти таблицы вручную. Сейчас мы используем Engineering компилятором Cooper и Torczon как наш учебник по учебникам, и я также прочитал страницы википедии о генерации таблиц, но я до сих пор не понимаю понятия. Если возможно, кто-нибудь может порекомендовать какую-либо другую книгу, в которой объясняется синтаксический анализ или онлайн-ресурс? Я бы подумал, что у многих университетов будут хорошие онлайн-ресурсы/слайды по этому предмету, но я понятия не имею, с чего начать искать. Спасибо!
Помогите понять парсер LR (1), создание таблицы? Любые другие ресурсы?
Ответ 1
некоторые приличные лекции...
http://cs.oberlin.edu/~jdonalds/331/lecture14.html
Понимание и запись компиляторов имеет раздел "Каковы истинные преимущества анализа LR (1)?
http://www.amazon.com/Understanding-Writing-Compilers-Yourself-Macmillan/dp/0333217322
(также доступно свободно онлайн)
Вот ссылка на приличное резюме, хотя объяснений не хватает.
http://arantxa.ii.uam.es/~modonnel/Compilers/LR1Summary.pdf
больше лекций...
http://www.cs.umd.edu/class/spring2011/cmsc430/lectures/lec07.pdf
и отмечает здесь...
http://cobweb.ecn.purdue.edu/~smidkiff/ece495S/files/handouts/w3w4bBW.pdf
(включая таблицы goto и действий)
Извините, я не могу объяснить лично, я не слишком уверен в себе. Может быть, вы найдете добрую, более знающую душу вокруг.
Ответ 2
Книги всегда трудно читать из-за деталей алгоритма. Греческие символы и абстрактные операции трудно интерпретировать, если вы уже не знаете, что они означают.
То, как я научился это делать, заключалось в том, чтобы написать крошечную грамматику (простое выражение, оператор присваивания, если это утверждение, последовательность операторов), а затем вручную имитирует алгоритм. Получите действительно большой лист бумаги. Нарисуйте начальное состояние конфигурации только с символом цели и точкой [G = DOT RHS1... RHSM]. Затем обрабатывайте необработанные состояния, следуя алгоритму в деталях; напишите, что символизирует каждый греческий символ в этот момент. По мере того, как вы получаете уверенность, вы получите лучшее чувство, и оно пойдет быстрее.
По существу, что вы собираетесь делать, для каждого элемента I
[LHS RHS1 DOT RHS2 RHS3 ... RHSN]
в состоянии, нажмите точку в элементе один раз вправо, чтобы создать новый элемент
[LHS RHS1 RHS2 DOT RHS3 ... RHSN ]
нарисуйте новое состояние в своем новом состоянии с этим элементом в качестве семени, заполните ядро элемента с помощью наглядных наборов на основе FIRST (RHS3), разверните состояние и повторите.
Это займет у вас несколько часов при первой попытке. Стоит каждую секунду. Используйте карандаш!