Мой язык, приглашают остановиться


Я написал язык в C, окрестили приглашают остановиться. Код может быть найден здесь.

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

Лишь некоторые критики (агрессивные, пожалуйста) было бы чудесно!

функции.ч: функции для работы в стеке -> у меня вот все команды, на самом деле

приглашают остановиться.с: Главное REPL для переводчика -> есть функция main() и функцию eval (), который интерпретирует каждое "слово"

gechoc.З.: основные функции eval петля для компилятора -> имеет функцию main() и функцию eval (), который интерпретирует каждое "слово" и fprintfs >эквивалент Код C

заголовок.ч: шаблон для компиляции -> включает в себя необходимые заголовки и сам включается во время записи .файл c

стек.ч: стек реализация -> операции со стеком: пуш, поп, показывают, что такая вещь

structdef: определения структуры (например, режимов и константы) -> имеет определенный режим структуры, постоянные структуры определенными

структуры.ч: структуры -> содержит режим, константы, переменной структуры определено

usefunc.ч: получает все необходимые заголовки и определяет некоторые вещи -> одна загвоздка-все включает и директивы препроцессора



351
-1
c
задан 5 сентября 2011 в 05:09 Источник Поделиться
Комментарии
2 ответа

Ладно, вот несколько вещей, которые я заметил после беглого просмотра кода:

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

Ваши заголовочные файлы также нет #включают в себя охранников. Вы должны исправить это.


Вы также должны всегда компиляции кода с поддержкой предупреждений. Это будет предупреждать вас о следующих ошибок:


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

  • В приглашают остановиться.с у вас есть переменная ТМП , которые вы никогда не используете. В gechoc.с у вас есть переменная сообщение , что вы также никогда не использовать.

  • В обоих ивала функции никогда не возвращают значение, даже если функции объявлены возвращать тип int. Поскольку вы никогда не используете их возвращаемое значение либо, я предполагаю, что они просто должны быть аннулированы.

Вы также должны знать, что ваш код не будет компилироваться, если вы включите строгого соответствия стандарту ANSI (независимо от того, С90 или С99) на счет через несколько нестандартные расширения, например типа bool тип данных (я не буду перечислять их все здесь - вы можете просто попробовать скомпилировать с -Анси , и вы можете увидеть ошибки для себя).


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

Также оценку функции компилятор не должен на самом деле называться ивала. Это на самом деле ничего не оценивает, он просто генерирует код. Следовательно, она должна называться что-то вдоль линий что codegen или generate_code.


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

4
ответ дан 5 сентября 2011 в 06:09 Источник Поделиться

Похоже, что у вас есть некоторые из основ развития языка, так Молодец для первого запуска.

Я бы сказал, что вы хотите, чтобы избежать вещи, как RES_SIZE и VAR_SIZE константы. Откуда эти цифры взялись? Они разработаны, чтобы быть пригодным для системы, что вы работаете на? Что о чужой системе? Что примерно через пять лет? Насчет системы, работающей на чей-нибудь телефон? Как правило, лучше распределять ресурсы, как вы нуждаетесь в них, и не каких-либо произвольных ограничений, сколько угодно можно. Когда системные ресурсы закончатся, вы вернетесь сообщения об ошибках из функций, таких как вилка или malloc, а затем вы знаете, что из ресурсов.

Можно подумать, они только там, пока вы не поставите правильную систему распределения, но вы действительно помните, чтобы вернуться и исправить их все? Лучше всего это сделать прямо в первую очередь.

Вы читали какие-то книги по развитию языков. Есть множество из них, и некоторые из них очень хороши и легко читаются. Если вы берете неделю отпуска программирования, и вместо того, чтобы читать что-то вроде книга дракона (http://dragonbook.stanford.edu/), вы вернетесь с гораздо более четкое представление о том, что ты делаешь.

Удачи.

4
ответ дан 5 сентября 2011 в 01:09 Источник Поделиться