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

16
задан Community 23 May 2017 в 11:46
поделиться

13 ответов

Если вы говорите по-французски, вас может заинтересовать один из курсов моих коллег (в свободном доступе) http://matthieuamiguet.ch/scientifique/enseignement/langages-et-compilateurs, хотя он использует Python для объяснения концепций построения и компиляции языка.

Английский PDF с PyCon 2010 http://matthieuamiguet.ch/assets/files/scientifique/publis/TeachingCompilersWithPython_Paper.pdf

Возможно, мне придется поговорить с ним о переводе его информации на английский 8)

0
ответ дан 30 November 2019 в 21:18
поделиться

Прочтите сообщения в группе новостей usenet comp.compilers, она доступна через группы Google. В нем много обсуждений, связанных с построением языка, сборкой компилятора, lex / yacc, грамматиками и т.п. Конечно, вы должны быть хорошо знакомы с классикой, такой как книга дракона, книга тигра среди многих книг по компиляторам и хорошие книги по алгоритмам и структурам данных.

Оригинальный компилятор C получает новую жизнь. Большая часть его переписывается, а его кодовая база достаточно мала, чтобы ее можно было прочитать и понять во время летних каникул. Рассмотрите возможность чтения кода вместе с документами, которые использовались для написания кода этого или любого работающего компилятора, и я уверен, что вы получите представление о том, с чего начать и т. Д.

0
ответ дан 30 November 2019 в 21:18
поделиться

Для простоты я рекомендую реализовать простой язык постфиксов. FORTH или основная часть PostScript были бы отличным выбором.

0
ответ дан 30 November 2019 в 21:18
поделиться

Одно из старых руководств по компилятору - , это . Хотя он написан на Паскале, это очень хороший источник информации. Если вам нужно что-то более свежее, вам следует взглянуть на ANTLR .

1
ответ дан 30 November 2019 в 21:18
поделиться

Вы можете прочитать несколько хорошо написанных статей Никлауса Вирта:

  • "Compiler Construction" (доступно здесь) - это краткое, сжатое введение в искусство создания компилятора.
  • "Алгоритмы + структура данных = программы" (к сожалению, вышедший из печати), в последней главе которого представлен более простой язык (названный PL/0).

хотя эти работы в основном написаны на языке Pascal, раскрытые в них концепции легко перевести на язык C.

1
ответ дан 30 November 2019 в 21:18
поделиться

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

Многие говорят, что Dragon Book - одна из лучших книг для этого. Возможно, вы можете взглянуть на нее :)

Удачи!

3
ответ дан 30 November 2019 в 21:18
поделиться

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

Самый простой способ, который я нашел, чтобы сделать такую вещь, это создать дерево разбора. Это можно легко сделать, используя два стека, стек операторов и стек результатов. После этого вы можете просто рекурсивно разобрать его с помощью DFS, возможно, используя шаблон посетителя, если вы решите реализовать это на объектно-ориентированном языке.

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

1
ответ дан 30 November 2019 в 21:18
поделиться

Начните с очень простого (игрушечного) языка; позже вы сможете создать более сложный синтаксис.

Вы можете написать интерпретатор для разбора строк типа

integer x
integer y
set x, 2
set y, 5
add x, y // x = x + y
print x

и оценивать каждую строку немедленно. Если хранить строки в векторе, то легко реализовать циклы с помощью команды goto.


Пример, Another World (винтажная игра)
. Script editor:

alt text

5
ответ дан 30 November 2019 в 21:18
поделиться

Я бы начал с простой программы настольного калькулятора, которая может читать такие вещи, как:

5 + 10 * 3

, и печатать ответ. Затем вы можете продвигать его, добавляя переменные, поток управления и даже функции.

6
ответ дан 30 November 2019 в 21:18
поделиться

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

0
ответ дан 30 November 2019 в 21:18
поделиться

Scheme from Scratch - это хорошая серия постов в блоге о реализации Scheme на C. Код очень читабелен, и каждая версия развивает предыдущую таким образом, что легко следовать.

Вот первая часть: v0.1 - Integers.

1
ответ дан 30 November 2019 в 21:18
поделиться

Узнайте о регулярных выражениях, грамматиках и хорошем генераторе парсеров.

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

5
ответ дан 30 November 2019 в 21:18
поделиться

Пусть кто-то другой сделает за вас грязную работу, а именно лексер и синтаксический анализатор. Используйте cup, yacc или bison для обработки синтаксиса. Это позволит вам сосредоточиться на более важных решениях по проектированию языка. Существуют даже примеры определений парсеров для многих языков, которые вы можете использовать в качестве шаблона для своего.

0
ответ дан 30 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

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