Подтвердить что ты не робот

Помогите понять парсер LR (1), создание таблицы? Любые другие ресурсы?

В настоящее время я беру класс компиляторов, и мне трудно понять алгоритмы синтаксического анализа LR (1), используя таблицу action/goto, а также как сгенерировать эти таблицы вручную. Сейчас мы используем Engineering компилятором Cooper и Torczon как наш учебник по учебникам, и я также прочитал страницы википедии о генерации таблиц, но я до сих пор не понимаю понятия. Если возможно, кто-нибудь может порекомендовать какую-либо другую книгу, в которой объясняется синтаксический анализ или онлайн-ресурс? Я бы подумал, что у многих университетов будут хорошие онлайн-ресурсы/слайды по этому предмету, но я понятия не имею, с чего начать искать. Спасибо!

4b9b3361

Ответ 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), разверните состояние и повторите.

Это займет у вас несколько часов при первой попытке. Стоит каждую секунду. Используйте карандаш!