Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14

(Почти) компилятор собственного языка программирования

17.09.2018, 15:13. Показов 938. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пока что без дизайнера интерфейсов. Введите последовательность действий и нажмите Ctrl+Enter, и компилятор ее выполнит. Прошу протестировать, от каких выражений программа "падает", а от каких возвращает непонятно что.
Важно:
1. В Дереве действий тип элемента будет различаться по картинке, сейчас вместо картинок используются префиксы:
a::Действие
c::Условие
g::Подусловие (включая "В остальных случаях") / Конец условия / Конец цикла
y::Цикл
k::Ключевая строка (Вернуть, Продолжить цикл, Завершить цикл)
v::Величина
q::Комментарий
Префиксы необходимо вводить перед каждой строкой, включая первую!
2. Если не указать ключевое слово "Вернуть", вы не увидите ничего, кроме пустоты, хотя действия и выполнятся!
3. В конце строки нет точки с запятой.
4. Это не калькулятор, ввести просто "2 + 2" не прокатит!
Бесконечность и неопределенность пока что не сделаны, при делении на 0 получается 0.
Функциональность, которая уже работает (жирным написано то, что необходимо скопировать в текстовое поле без изменений, нежирным - описательные слова, вместо которых нужно вставить то, что они описывают, в квадратных скобках - необязательные элементы, в фигурных - обязателен ровно один из элементов):
- Объявление величин: [Массив([Индекс1, Индекс2[, ...]])] Тип : Имя[ = Начальное значение].
- Присвоение: Имя величины = Значение.
- Условия: {УСЛОВИЕ Условное выражение | ПОДУСЛОВИЕ Условное выражение | В остальных случаях}. Условия должны завершаться строкой "Конец условия".
- Циклы: {ПЕТЛЯ | ПОВТОРИТЬ Выражение | ПОВТПОКА Условное выражение | ФОР Величина ПРИН [Начальное значение, Конечное значение{] | )} ШАГ Значение шага}. Циклы должны завершаться строкой "Конец цикла".
- Ключевые строки: Вернуть Выражение, Продолжить цикл (под вопросом), Завершить цикл
- Комментарии.
- Операции (в скобках число параметров, * означает массив параметров): Выбрать случайное(*), Выполнить строку(1-2), Массив одинаковых(2), Цвет(3), Цепь(2), ЯвлМассив(1), ЯвлНс(1), ЯвлПустота(1), ЯвлЧисло(1), Вставить(3), Добавить(2), Найти(2-3), НайтиК(2-3), Сместить(2), Содержится(2), СодержитсяМ(2), Участок(3), Бц(1), Длн(1), Знаг(1), Клвс(2-3), Клэмп(3), Круг(1), Ксс(1), Лгр(2), Макс(2), Макс3(3), МаксМ(1), Мин(2), Мин3(3), МинМ(1), Модуль(1), Мц(1), НЛгр(1), ОКсс(1), ОСнс(1), ОТгс(1), Пвт(2-3), ПвтК(2-3), ПЧсл(1), Слч(1), Смвкд(1), Снс(1), Сравн(2), Сравнить тексты(2), Тгс(1), ЦСлч(1), Эксп(1), Вкс(2-3), Всбк(2-3), Замена(3), ЗвКвч(1), ПСтр(1), Сдп(2), Смв(1), Спп(2), Ссп(2), УКвч(1), УПрб(1), УПрбК(1), УПрбН(1). Экспериментируйте с параметрами как хотите, чем больше вариантов вы протестируете, тем реже будет падать готовая программа!
- Операторы: = (в присвоении и в условиях), XOR, ИЛИ, И, мир, бир, мч, бч, нр, <=>, ==, <>, !=, <=, >=, <, >, запятая, скл, пс, +, -, *, /, %, рн, встп, xor, или, и, !.
Что НЕ РАБОТАЕТ:
- Звезды.
- Объекты.
- Операторы: +=, -=, *=, /=, ++, --, !! и, возможно, другие.
Пробелы ставятся слева и справа от = при присвоении, справа от запятой, между языковыми терминами и между термином и выражением, в остальных случаях не ставятся.
Вложения
Тип файла: rar DCASTFPart2.rar (176.5 Кб, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.09.2018, 15:13
Ответы с готовыми решениями:

Можно ли создать компилятор для своего языка программирования для .NET
Сейчас вот думаю..Можно ли создать компилятор для своего языка программирования для .NET на языках C#, VB.NET? Интересует только создание...

По русскому названию языка программирования определить английское название этого языка
Задача на перечисляемый тип P=(ада, бейсик, модула2, лисп, паскаль, пл2, фортран); A=(ada, basic, modula2, lisp, paskal, pl1. fortran);

С какого языка стоит начать обучение? С языка программирования Pascal?
Здравствуйте. Хотелось бы больше знать о компьютерной безопасности, в частности, о Dos/DDos-атаках. Не знаю ни одного языка...

14
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.09.2018, 15:22
Можно примеры?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
17.09.2018, 15:31  [ТС]
Можно.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
v::Массив(5, 10) Целое без знака : А
v::Целое без знака : И = 5
y::ПЕТЛЯ
c::УСЛОВИЕ 1=0
k::Завершить цикл
g::ПОДУСЛОВИЕ И=9
a::А[И] = -555
g::В остальных случаях
a::А[И] = (123, 456, -789, 147, 258, -369)[И-5+1]
g::Конец условия
a::И = И+1
c::УСЛОВИЕ И бир 10.5
k::Завершить цикл
g::Конец условия
g::Конец цикла
k::Вернуть А
Попробуйте скомпилировать. Должен быть возвращен массив.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.09.2018, 15:38
А как будет это выглядеть на Вашем языке:
Pascal
1
2
3
4
5
6
7
8
9
10
11
function F(n: integer): integer;
begin
  if n <= 2 then
    Result := 1
  else
    Result := F(n - 1) + (n - 2);
end;
 
begin
  Writeln(F(3));
end.
?

Добавлено через 32 секунды
Etyuhibosecyu, а отступы делать можно после ::?

Добавлено через 2 минуты
Etyuhibosecyu, если можно, то можете с отступами пример переписать? Ничего не понятно.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
17.09.2018, 15:46  [ТС]
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
А как будет это выглядеть на Вашем языке:
С компиляцией операций пока что проблемы. Точнее, она работает, но в данное текстовое поле вводить пользовательские операции нельзя.
Code
1
2
3
4
5
k::Вернуть Выполнить строку("c::УСЛОВИЕ Параметр[1]<=2
k::Вернуть 1
g::В остальных случаях
a::Вернуть _А_(Параметр[1]-1)+_А_(Параметр[1]-2)
g::Конец условия", 3)
Хотя не факт, что сработает.
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Etyuhibosecyu, а отступы делать можно после ::?
Нет, отступы делать нельзя. Но повторяю, эти префиксы временны.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.09.2018, 15:51
Etyuhibosecyu, нехорошо. Очень нехорошо. Проблемы... Решите их и покажите.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
17.09.2018, 15:54  [ТС]
А то, что я написал, компилируется или нет?
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.09.2018, 15:59
Etyuhibosecyu, я не стал проверять. Не вижу смысла.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
17.09.2018, 16:16  [ТС]
Соколиный глаз, не все же программирование упирается в числа Фибоначчи, правда? Когда выйдет DCASTFPart3, проверите, реально вычислить числа Фибоначчи или нет. А сейчас оцените все, что описано в сообщении #1. Вдруг этот язык все же будет использоваться хоть кем-то... И он напишет какой-либо код, а язык упадет... Помогите мне исключить такую ситуацию!
0
Эксперт .NET
 Аватар для Usaga
14299 / 9384 / 1353
Регистрация: 21.01.2016
Сообщений: 35,380
17.09.2018, 16:30
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Попробуйте скомпилировать.
Скомпилировать или выполнить? Результат "компиляции" сохраняется в каком-то виде? Если нет, и оно просто исполняет, то это транслятор.

И нафига эти префиксы на каждой строке? Выглядит криво.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Нет, отступы делать нельзя.
Дайте угадаю почему: никаким синтаксическим разбором строки и не пахнет? Тупо цикл на поиск подстроки с известным транслятору набором команд? Лишний проблем или табуляция и всё разваливается?
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
17.09.2018, 18:11  [ТС]
Сделал вычисление чисел Фибоначчи отдельной операцией - Фибоначчи(1 параметр). Но выкладывать измененную программу не буду, так как не в этом суть программирования.

Добавлено через 58 минут
Сделал еще и рекурсивное выполнение строки операцией Выполнить эту строку(Массив параметров), которая доступна только внутри строки для операции Выполнить строку. Теперь описанный Соколиным глазом в сообщении #4 код выполняется или так:
Code
1
k::Вернуть Фибоначчи(3)
- или так:
Code
1
k::Вернуть Выполнить строку("c::УСЛОВИЕ Параметр[1]<=2" пс "k::Вернуть 1" пс "g::В остальных случаях" пс "k::Вернуть Выполнить эту строку(Параметр[1]-1)+Выполнить эту строку(Параметр[1]-2)" пс "g::Конец условия", 3)
- хотя этот вариант может не пойти.
Выкладывать исправления снова не буду.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
17.09.2018, 20:49
Etyuhibosecyu, я не вижу смысла в языке, где даже функцию своими руками описать нельзя.
0
Эксперт .NET
 Аватар для Usaga
14299 / 9384 / 1353
Регистрация: 21.01.2016
Сообщений: 35,380
18.09.2018, 01:10
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
ыкладывать исправления снова не буду.
Так и оригинальный проект выкладывать не надо было. Он никому кроме вас не нужен.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.09.2018, 03:22
Etyuhibosecyu, хорошо тестируйте свой компилятор перед выкладыванием примеров, так как «Выложу, но не факт, что скомпилируется.» выглядит очень смешно. Вы не в состоянии сами проверить работоспособность кода?

Что хочу видеть в языке:
1) Нормальная работа с массивами, матрицами
2) Функции и процедуры
3) Рекурсия
4) Замыкания
5) Работа с структурами хотя бы на примитивном как в Си уровне без всяких модификаторов доступа и конструкторов
6) И, разумеется, готовая библиотека подпрограмм и структур (не самому же всегда все с нуля писать)

Добавлено через 8 минут
И уберите наконец эти ужасные префиксы. Выглядит убого.

Добавлено через 1 минуту
Выполняйте, не думаю, что есть возражения, Вам же хочется язык сделать нормальный или нет?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
23.09.2018, 15:33
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Что хочу видеть в языке
А еще цель создания языка и круг выполняемых задач.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2018, 15:33
Помогаю со студенческими работами здесь

По русскому названию языка программирования присвоить переменной английское название этого языка
Дан перечень названий языков програм. на русском и англ. языках.По русскому названию программирования присвоить переменной англ. названрие...

Выбор языка программирования для разработки среды программирования
Возникла мысль о создании ЯПа. Ныне популярные ЯПы не универсальны, либо универсальны, но с косяками фичами (напр. LISP - обилие...

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

Интерпретатор собственного языка на Delphi
Методом тыка родил вот такой вот быдлокод. Begin Lines_triger:=0; // Стартовая строка While...

Написать Интерпретатор Программного Языка(собственного)
Здраствуйте! Кто знает C++ помогите пожалуйста с реализацией данного задания!!! Пожалуйста, очень надо. сроки поджимают. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru