2008-12-13 4 views
8

Если бы я искал, чтобы создать свой собственный язык, есть ли какие-нибудь инструменты, которые помогли бы мне? Я слышал о yacc, но мне интересно, как я буду реализовывать функции, которые я хочу на этом языке.Создание собственного языка

+3

Канонический вопрос для этого: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler – dmckee 2010-02-04 14:55:03

ответ

9

Первым инструментом, который я бы рекомендовал, является Книга Дракона. Это ссылка для создания компиляторов. Проектирование языка - непростая задача, реализация его еще сложнее. Книга драконов помогает там. В книге даже упоминаются стандартные инструменты unix lex и yacc. Инструменты эквивалентного gnu называются flex и bison. Они оба генерируют лексер и парсер. Существуют также более современные инструменты для генерации лексера и парсера, например. для java есть ANTLR (я также помню javacc и CUP, но я использовал себя только ANTLR). Тот факт, что ANTLR объединяет парсер и лексер и что плагин eclipse доступен, делает его очень удобным для использования. Но чтобы сравнить их, тип парсера, который вам нужен, и знать, что вам нужно, вы должны прочитать книгу Дракона. Есть также другие вещи, которые вы должны учитывать, такие как среда выполнения, парадигма программирования, ...

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

4

ANTLR - очень хороший генератор синтаксического анализатора, написанный на Java. Также есть terrific book.

10

Близкие вопросы (все взяты путем поиска по [compiler] на StackOverflow):

И подобные темы (из той же категории):


Edit: Я знаю, связанные StackOverflow поиск вопрос не то, что мы хотели бы, чтобы это было, но действительно ли нам нужно п-й итерации этой теме? Мех!

2

Мне нравится Flex (Fast Lex) [лексический]
и Bison (волосатый Yacc) [Еще один компилятор компиляторов]

Оба свободны и доступны на всех * NIX установок. Для Windows просто установите cygwin.
Но я старой школы.

Используя эти инструменты, вы также можете найти правила lex и yacc-грамматики для множества популярных языков в Интернете.Таким образом, вы получите быстрый способ встать и запустить, а затем вы можете настроить грамматистов по ходу дела.

Пример: Обработка арифметических выражений [порядок приоритета и т. Д. - это проблема, связанная с смертью], вы можете быстро получить этот грамматик для этого из Интернета.

Альтернативой думать является написать внешнее расширение GCC.
Нетривиальный, но если вы хотите скомпилировать язык, это сэкономит много работы в разделе генерации кода (вам все равно нужно знать любовь и понимать flex/bison).

Смежные вопросы