Simple BASIC interpriter
Простейший интерпритатор языка BASIC.
Данный поект являеться "чистым" интерпритатором бейсика с нумерованными строками, без какого-либо промежуточного представления.
Поскольку на стримах по его написанию не было особой активности интерпритатор был заброшен на какое-то время, однако, в конечном итоге в один из дней я решил довести проект до MVP. Именно в состоянии вполне рабочего прототипа я выложил этот проект на github.
В классическом бейсике из 80-х каждая строка программы имеет логический номер, обычно программисты нумеровали строки в числе кратные 10, для удобства вставки строк.
По умолчанию бейсик находиться в непосредственном режиме, что позволяет делать какие-то базовые вещи без написания программы, например посчитать выражение PRINT 10\*2
.
Для добавления строки в программу надо перед кодом указать номер строки, например так: 10 PRINT "HELLO WORLD"
.
Для запуска программы используеться комманда RUN
.
Если ваша программа "зациклилась", ее можно остановить комбинацией клавиш CTRL+B
.
Для изменеения строки программы достаточно ввсети ее снова под тем же номером.
Для удаления строки достаточно ввести номер удаляемой строки.
Чтобы понять как с этим работать смотрите хайлайт стрима: https://www.youtube.com/watch?v=Vwb4RhI1Qrw
В папке "BASIC" лежит скомпилированная версия для Windows(лучшей ОС).
Для любителей Linux можно, немного изменив код, получить версию для кросплатформенной IDE Lazarus/FreePascal. Да, придеться постараться, если вы любитель данной ОС. С другой стороны - если вы истинный любитель GNU и т.д. вы должны переписать это на C + GCC, дабы не ныть о begin/end в паскале.
Скачать репозиторий, или архив из Releases, в папке BASIC - лежит уже собранная версия интерпритатора.
Если есть желание "собрать", то надо скачать Delphi Commynity, открыть проект, нажать на "Run". Готово.
- Запустить "BASIC.EXE"
- Ввести
LOAD "<имя файла>"
, напримерload "circle"
- По желанию вывести "текст программы" на экран командой
LIST
- Запустить командой
RUN
10 PRINT "*** FOR TEST ***"
20 FOR i=1 TO 5 STEP 0.5
30 PRINT "i = ";i
40 NEXT i
10 for y=0 to 24-1
20 for x=0 to 60-1
30 val=0.5*sin(1.24*sin(x*0.3+y*0.1)+sin(x*0.02+y*0.37)+3*sin(x*0.15+y*0.08)+1.8*sin(x*0.139+y*0.265))+0.5
100 if val >= 0.0 then if val < 0.25 then print " ";
110 if val >= 0.25 then if val < 0.5 then print ".";
120 if val >= 0.5 then if val < 0.75 then print "*";
130 if val >= 0.75 then if val <= 1 then print "#";
200 next x
210 print
220 next y
LOAD "<name>" - загружает программу по имени "<name>.bas"
SAVE "<name>" - сохраняет программу с именем "<name>.bas"
NEW - создать новую программу
LIST - вывести программу на экран. LIST n1-n2 - вывести программу со строчки по номеу n1 по строчку по номер n2
RUN - запустить программу
PRINT - печатает на экране. "строка" - вывод строки, 123 - вывод числа. var1 - вывод значения переменной var1. Можно разделять ";" - нет перехода к следующему столбцу. "," - переход к следующему столбцу при выводе.
INPUT - вводит зачения. INPUT "вопрос"; a,b - ввод значений в переменные a и b, через запятую, с кастомным сообщением пользователю. Если не указать строку ссобщения будет выведено " ?"
Ля, лень дальше писать, смотрите примеры. Ну или для желающих - создайте пулл-реквест с дополнением документации в этом файле.