2012-01-25 3 views
10

В Интернете есть много примеров, показывающих, как построить таблицы синтаксического анализа для контекстно-свободной грамматики из первых/следующих наборов для парсера LL (1).Как построить таблицу разбора для LL (k> 1)?

Но я не нашел ничего полезного, связанного с k> 1 случаем. Даже википедия не дает информации об этом.

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

+0

У меня есть копия большой книги по разбору, которая, к сожалению, пропускает эту тему. Мне так же любопытно, как и ты. Однако, по моему мнению, алгоритмы для k> 1 существенно более востребованы и полностью неосуществимы на практике. Думаю, мы узнаем! – templatetypedef

+2

Я не думаю, что это невозможно. По крайней мере ANTLR претендует на разбор LL (K) (с любыми K) грамматиками. –

+0

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

ответ

1

Я очень сильно борюсь с теми же проблемами, создавая парсер LR, а не LL. Я нашел немного лучшую страницу, чем LL (k), упомянутую @cakeplus - http://www.seanerikoconnor.freeservers.com/ComputerScience/Compiler/ParserGeneratorAndParser/QuickReviewOfLRandLALRParsingTheory.html Существует также связанная с этим бумага, доступная бесплатно - http://ci.nii.ac.jp/naid/110002673618/

Однако мне даже не очень помогли. Поэтому я начал с основ. Если кому-то интересно: https://aboutskila.wordpress.com/2013/06/14/lalrk-first-sets/ и битва продолжится :-)

+1

Ссылка мертва. :( – paulotorrens

+1

@paulotorrens, исправлено последнее, спасибо. – greenoldman

+0

Мне жаль, что я не найду алгоритм для их расчета. Вероятно, я перепроектирую [это] (http://www.fit.vutbr.cz/~ikocman/ llkptg /). – paulotorrens