Почему в спецификациях языков программирования лексический анализ нельзя перевести? - PullRequest
2 голосов
/ 18 февраля 2010

Во всех стандартных спецификациях для языков программирования почему вы не можете напрямую перевести лексический анализ / макет в грамматику, которая готова к подключению и работе?

Я могу понять, что было бы невозможно адаптировать его для подобных Flex / Bison, Lex / Yacc, Antlr и так далее, и, кроме того, сделать его понятным для понимания людьми.

Но, конечно, если это стандартная спецификация, это должна быть простая копия / вставка макета грамматики, а вместо этого в результате будет множество ошибок сдвига / уменьшения, что может привести к возгоранию и, следовательно, к созданию неточной грамматики.

Другими словами, почему они не сделали его читабельным для использования инструментом грамматики / парсера сразу?

Может быть, это спорная вещь, которую я не знаю ...

Спасибо, С наилучшими пожеланиями, Том.

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

Людям легко взглянуть на грамматику и узнать, что задумал автор, однако, на этом пути компьютеру нужно держать намного больше рук.

В частности, эти спецификации обычно не являются LL (1) или LR (1). Как таковые, заглядывание в будущее необходимо, конфликты должны быть разрешены. Правда, это можно сделать в спецификации языка, но тогда это исходный код лексического анализатора, а не спецификация языка.

1 голос
/ 18 февраля 2010

Другими словами, почему они не сделали он читается для использования инструмент грамматики / парсера сразу?

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

0 голосов
/ 18 февраля 2010

Я согласен с вашим мнением, но парни, пишущие стандарты, не могут победить на этом.

Чтобы заставить лексер / грамматику работать с генератором синтаксического анализатора напрямую, нестандартно, стандартные авторы могли бынужно выбрать конкретный.(Какой выбор сделали бы обычные люди COBOL в 1958 году?)

Популярные (LEX, YACC и т. Д.) Часто не способны обрабатывать справочные грамматики, написанные для краткости и ясности, и поэтомуплохой (например, не) выбор.

Более экзотические (Earley, GLR ) могут быть более эффективными, потому что они допускают бесконечную перспективу и двусмысленность, но их труднее найти.Таким образом, если бы был выбран конкретный инструмент, подобный этому, вы не получили бы то, что вам хотел, - это грамматика, которая работает с вашим генератором парсера.

Сказав это, DMS Software Reengineering Toolkit использует генератор синтаксических анализаторов GLR.Нам не нужно много массажировать эталонные грамматики, чтобы заставить их работать, и теперь DMS работает со многими языками, в том числе с такими сложными, как C ++.ИМХО, это настолько близко к вашему идеалу, насколько вы, вероятно, получите.

...