Учимся писать компилятор [закрыто]

Вот мое решение в Javascript - очень похоже на JPot, но короче (и, возможно, немного быстрее):

value = new Date(parseInt(value.substr(6)));

"value.substr (6)" вынимает "/ Date ( ", а функция parseInt игнорирует символы не числа, которые встречаются в конце.

EDIT: Я намеренно исключил основание (второй аргумент parseInt), см. мой комментарий ниже . Также обратите внимание, что даты ISO-8601 предпочтительнее этого старого формата, поэтому этот формат обычно не должен использоваться для новой разработки. См. отличную библиотеку Json.NET для отличная альтернатива, которая сериализует даты с использованием формата ISO-8601.

Для ISO-8601 отформатированных дат JSON просто передайте строку в конструктор Date:

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support

699
задан 20 revs, 10 users 47% 28 February 2014 в 23:45
поделиться

36 ответов

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

Я бы добавил книгу Oberon , которая содержит полный исходный код удивительно быстрого и простого компилятора Oberon Project Oberon .

Alt text

10
ответ дан 22 November 2019 в 21:37
поделиться

Если у вас мало времени, я рекомендую Никлауса Вирта "Строительство компилятора" (Addison-Wesley. 1996), маленькую брошюру, которую вы можете прочитать за день, но она объясняет основы (включая как реализовать лексеры, парсеры рекурсивного спуска и ваши собственные виртуальные машины на основе стека). После этого, если вы хотите глубоко погрузиться, нет никакого способа обойти книгу Дракона, как предлагают другие комментаторы.

20
ответ дан 22 November 2019 в 21:37
поделиться

Я удивлен, что это не было упомянуто, но Дональд Кнут Искусство компьютерного программирования изначально было написано как своего рода учебник по написанию компилятора.

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

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

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

Как сделать вы думаете, что C ++ был создан?

1
ответ дан 22 November 2019 в 21:37
поделиться
  • Начните с того, что убедитесь, что вы можете ответить на большинство вопросов с пометкой C ++ здесь, в Stack Overflow.
  • После этого вы должны убедиться, что понимаете, как работают другие компиляторы, и понимаете [части] их исходный код.
  • Вы заметите, что вам нужен ассемблер, и начнете изучать ассемблер, пока не сможете ответить на многие вопросы с помощью этого тега.
  • Если вы зашли так далеко, то обнаружите, что прошло несколько лет и осознайте, насколько велик такой проект, и, возможно, улыбнитесь своему собственному вопросу тогда (если эта страница все еще существует в то время) ...
0
ответ дан 22 November 2019 в 21:37
поделиться

Отсутствует в списке: Сборка мусора: Алгоритмы автоматического управления динамической памятью, Джонс и Линс.

(Предполагая, что вы пишете систему исполнения компилятора и , и что вы реализуете язык со сборкой мусора.

3
ответ дан 22 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

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