что лучший язык программирования должен записать синтаксическим анализаторам и компиляторам? [закрытый]

Я - крупный сторонник репродуцирования ошибок, если это экономически целесообразно (например, не копируя весь жесткий диск некоторого пользователя в Вашу локальную машину только для репродуцирования среды).

неудачная природа ошибок - то, что часто существует только один способ исправить ошибку, но много способов замаскировать его, и много мер на самом деле маска, а не зафиксировать. Вы никогда не можете находить первопричину, таким образом, ошибка появилась бы снова, или позже будет другая на вид другая ошибка.

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

6
задан Radi 22 August 2009 в 07:55
поделиться

9 ответов

Ответ здесь может быть очень субъективным. Но я бы рекомендовал использовать ANTLR , если вы хотите написать парсер. В настоящее время ANTLR поддерживает цели C, C #, ActionScript, JavaScript и Java. По моему опыту, версия Java действительно стабильна в использовании и использовалась во многих мощных проектах с открытым исходным кодом, а именно Drools и Hibernate .

10
ответ дан 8 December 2019 в 02:53
поделиться

Нужно ли писать на каком-либо языке программирования? Или вы можете использовать Flex и Bison ?

7
ответ дан 8 December 2019 в 02:53
поделиться

Парсеры и компиляторы - две отдельные проблемы. Например, я мог бы написать компилятор на C, но я бы никогда не написал синтаксический анализатор на C (я бы использовал генератор синтаксического анализатора). Для очень простых парсеров, где скорость не является приоритетом, я мог бы вручную написать парсер на Perl или Python, которые имеют хорошие возможности для обработки текста. Но для всего, что выходит за рамки самого простого парсера, я бы использовал какие-то инструменты для генерации парсеров. Наиболее часто используются ANTLR , Coco / R и Lex / Yacc и реализация GNU Flex / Bison. Лично я предпочитаю Coco / R, но в наши дни ANTLR кажется более популярным.

Если вы пишете язык программирования общего назначения, вы можете захотеть написать его отдельно. Это дает много преимуществ, включая переносимость (людям нужно переносить только первую версию языка) и демонстрацию возможностей (синтаксический анализ - сложная проблема, поэтому, если это можно сделать на вашем языке, это свидетельство вашего языка). Если ваш язык интерпретируется, это может не подходить по соображениям производительности.

5
ответ дан 8 December 2019 в 02:53
поделиться

Lisp / Scheme - это то, что нам было поручено использовать еще в универе.

Они довольно хорошо приспособились к этой задаче.

Дэн

3
ответ дан 8 December 2019 в 02:53
поделиться

Вы захотите изучить генераторы парсеров. Если вы изучаете компьютерные науки, вам, вероятно, захочется взглянуть на «Книгу драконов»: http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools .

] Вероятно, проще всего было бы создать синтаксический анализатор на C # или Java, поскольку вам не придется беспокоиться о таких вещах, как управление памятью и т. Д., И вы можете сосредоточиться на грамматике.

Хорошим генератором синтаксического анализатора C # является GPPG: http://plas.fit.qut.edu.au/gppg/ .

3
ответ дан 8 December 2019 в 02:53
поделиться

В то время как у меня когда-то был учебник под названием «Современная реализация компилятора на Java», я думаю, что профессионалы все еще используют C. Кроме того, чтобы доказать, что их язык может компилироваться сам.

2
ответ дан 8 December 2019 в 02:53
поделиться

Если вы реализуете компилятор с нуля, большинство языков программирования справятся с этой задачей. (Я даже знаю компиляторы / парсеры, написанные на Fortran IV и COBOL, хотя я бы не рекомендовал пробовать это!)

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

Итак, на этой основе, подходящие языки программирования, для которых доступен достойный генератор синтаксического анализатора. В Википедии есть страница, на которой сравнивается большое количество генераторов парсеров. Я и не думал, что их так много!

1
ответ дан 8 December 2019 в 02:53
поделиться

Если ваша цель - изучить методы, лежащие в основе парсеров (и токенизаторов), возможно, лучше написать один самостоятельно с нуля. Вы можете сделать это на большинстве языков программирования, так что вы можете выбрать тот, который вам удобнее.

Некоторое время назад я написал серию сообщений в блоге, которые показывают, насколько легко написать парсер для небольшого вымышленного BASIC- как язык программирования, в C #. Я не хочу рассылать здесь спам, поэтому не буду предоставлять прямую ссылку, но если вы зайдете в блог (см. Мой профиль) и спуститесь вниз, вы можете найти ссылку «Написание парсера» в разделе «Мои сообщения "-раздел.

1
ответ дан 8 December 2019 в 02:53
поделиться

Хотите написать синтаксический анализатор для языка общего назначения? В этом случае явно рекомендуется написание (и начальная загрузка) на целевом языке. Вы должны есть свой собственный корм для собак.

0
ответ дан 8 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: