|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
Пишем свой интерпретатор языка BASIC20.06.2009, 20:03. Показов 253942. Ответов 464
Метки нет (Все метки)
Благодаря форуму и Evg в частности интерпретатор развивается, потихоньку превращаясь в простенький интерпретатор QBASIC.
Некоторые из самых старых версий сохранились в теме и ссылки на них будут добавлены в это сообщение,а также ссылки на другие темы,связанные с этой. Репозиторий с проектом находится тут, там же есть возможность в браузере посмотреть историю ревизий (английский в логах весьма примитивен,комментарии и рекомендации можете писать в личку),а также скачать самый последний архив репозитория в формате .tar.gz Если кто-то пользуется Subversion,скачать исходники можно так:
Технический приём для формирования согласованных данных https://www.cyberforum.ru/c-linux/thread46096.html Вопрос по svn (Subversion) Создание системы тестирования ПО. Вопрос про разные реализации бэйсиков Можно ли выразить порядковый номер элемента массива через индексы? [C++] Какие флаги указать линкеру для компиляции программы? Как можно определить переменную в файле configure.in,чтобы её можно было использовать в Makefile? Странный SIGSEGV, или что зависит от порядка написания интерфейса класса https://www.cyberforum.ru/c-linux/thread61324.html Альтернативная версия интерпретатора от Evg на C Это простая реализация разбора выражений, написанная Evg на C: Представление выражения в двоичном дереве ***************** Первое сообщение: ***************** Задание(Страуструп,из книги,по готовому коду): Введите программу калькулятора и заставьте её работать.Например,при вводе
LexicalAnalyzer.h
LexicalAnalyzer.cpp
main.cpp
Анализатор-то работает,но конечное значение не вычисляется.Более того,если вводим
Добавлено через 2 часа 5 минут 30 секунд Пришлось решать влоб с дебаггером.У Страуструпа опечатка (или намеренная ошибка,что более вероятно ) Вот в этом куске кода в функции get_token():
Добавлено через 16 минут 19 секунд И ещё опечатка была
31
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 20.06.2009, 20:03 | |
|
Ответы с готовыми решениями:
464
Пишем свой интерпретатор языка BASIC
Пишем свой чекер |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 26.10.2010, 17:55 | |
|
2
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 26.10.2010, 18:04 | |
|
niXman, К подам да. аллокация/деаллокация, инициализация только соответственно.
2
|
|
|
|
||||||
| 26.10.2010, 18:10 | ||||||
|
как показывают эксперименты, к POD`ам аллокатор применяется как указателю на тип при деаллокации. иначе никак.
2
|
||||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||||||||
| 27.10.2010, 01:30 [ТС] | ||||||||
.Меня именно интересовал способ выделения/очистки вручную,так как хотелось посмотреть на значения переменных,напечатать их и т.д.niXman, отдельное спасибо за предложение с шаблоном. пример
Добавлено через 3 часа 0 минут Evg,мне начинает казаться,что с добавлением функций программа зашла в тупик,ибо слишком много проблем всплывает на поверхность сейчас В их числе старый механизм провязки инструкций в список,который по уму надо полностью переделать,так как с добавлением SUB пришлось идти на ухищрения для связывания отдельных списков,и поэтому сейчас нельзя в начале программы писать определение функции. Так же нужно делать какой-то новый механизм добавления вызовов CALL,так как существующий опирается на уже существующие функции,то же самое с метками выхода из функции (RETURN),которые сделаны для связи листов инструкций. Я уже не говорю о работе с памятью,полного разделения run-time от построения дерева(которое тоже не до конца сделано), доработка тестовых печатей (сама система примитивна,и должна быть переделана) ... Я столько возился с этим кодом,что уже предвижу большой для меня объём работы (а времени не хватает).Не по теме: Весьма полезный опыт,хотя и долгий :) в итоге - планировать,планировать,планировать - а потом писать код. Поэтому у меня есть пару предложений по этому поводу: 1) Оставить всё как есть,"законсервировать",и можно будет двигаться дальше,получив полезный опыт. 2) Переписать всё заново. ![]() Evg ,на самом деле я был бы непрочь взглянуть на твой вариант реализации с функциями (если он есть,конечно),а то я глядел на исходные коды gcc,и просто ничего там не понял,вот бы поглядеть на хорошо написанную программу интерпретатора в самом простом варианте с функциями.
1
|
||||||||
|
|
|||||||
| 27.10.2010, 01:40 | |||||||
|
ты об этом?:
3
|
|||||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 27.10.2010, 01:56 [ТС] | |
|
Да,я это имел в виду
1
|
|
|
|
|||
| 27.10.2010, 13:10 | |||
|
Я предлагаю идти по второму пункту. Потому что это тоже большой полезный опыт. Любая программа по мере своего развития рано или поздно сталкивается с тем, что нужно полностью переделывать отдельные компоненты или полностью менять архитектуру программы. Чем раньше ты научишься это делать, тем проще будет в будующем. К тому же такой опыт поможет тебе при написании программ изначально закладываться на будущую переделку и писать коды таким образом, чтобы они проще поддавались переделке. Многие коммерческие фирмы идут по первому пункту. Практика показывает, что почти всегда это заканчивается закрытием проекта или банкротством Всё, что я сделал - это потому, что была неделя условно свободного времени перед отпуском и неделя условно свободного времени где-то внутри рабочего года. А больше я ничего и не делал с тех пор
2
|
|||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|||
| 27.10.2010, 22:51 [ТС] | |||
![]() В-общем,я достаточно отчётливо уяснил важность планирования при написании программ,хотя бы намекающих на дальнейшее развитие. Как развить этот навык,я не знаю,ты говоришь,что это приходит с опытом,а может,это талант особый,-ну дальше видно будет. В ближайшем будущем у меня будет немного времени,и я хотел бы посвятить его тому,чтобы дочитать Beej's Guide to Network Programming (возможно поэкспериментировать немного,ибо это очень интересная тема),немного про устройство Linux,и,может быть,дочитать уже наконец бедного Страуструпа. А то я чувствую,что в кодинге у меня даже некоторые привычки образоваться успели,а теория как была,так почти и осталась на том же уровне,когда я прекратил её изучать. ![]()
1
|
|||
|
|
||
| 27.10.2010, 23:09 | ||
|
3
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 24.11.2011, 17:18 | |
|
Мне бы азы теории для совсем чайника. Хотя бы термины. Например, понятие "алфавит" совпадает с обыденным? А если нет, то что это такое? Можете дать для примера готовый алфавит, например, c++?
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 24.11.2011, 20:35 | |
|
Алфавит в общем случае - это любое конечное множество символов. Т.е. для ЯП алфавит языка - это множество символов, которые могут в том или ином виде встречаться в исходнике (отдельный случай - это комментарии). Пример для С++
Теория (и практика) с самых азов: http://ru.wikipedia.org/wiki/К... нструменты
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 25.11.2011, 07:00 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Эйси. Теперь такой вопрос. Опередлил я алфавит, пытаюсь слепить свою кривоподелуху на тему компиляторов (первая пробу клавы приличным компилом точно не будет). Есть нечто, кторое должно стать кривокомпилятором, а потом может быть и компилятором, есть файл исходника. Решено отталкиваться от c++, а в первом примере нет ничего что вышло бы за рамки c++. Есть функция, есть указатель на имя файла с исходником. Надо ли грузить его целиком в оперативу, или работать с диска? Ещё. Подводные камни байт-кода в роли внутреннего представления. Преимущества и недостатки шитого кода в роли целевого языка. Подводные камни обратной польской нотации в роли внутреннего представления арифметических, строковых, адресных и логических выражений. Строки будут поддерживать только конкатенацию, доуступ к символу и функции, но просто для единобезобразия с остальными выражениями.
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 25.11.2011, 14:30 | |
|
taras atavin, ну хоть немного же теорию надо читать!
Рекомендую 2 книги - простые и доступные: Вирт: http://www.ozon.ru/context/detail/id/4803779/ Свердлов: http://www.ozon.ru/context/detail/id/3056680/
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||
| 25.11.2011, 15:13 | ||||||||
1
|
||||||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||
| 25.11.2011, 15:50 | |||
|
Evg, так он же спросил про стартовый нетерминал, нет?
Добавлено через 40 секунд Или ты про "готовый алфавит"?
0
|
|||
|
|
|
| 25.11.2011, 16:36 | |
|
Если брать язык типа простого бэйсика, которий реализовал #pragma, то каждый statement начинается с ключевого слова. С точки зрения разбора это просто. Типа, если слово LET, то разбираем правило statement_let, если слово FOR, то разбираем правило statement_for. А в си это не совсем так. Поэтому он хочет понять, как с этим разбираться
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 25.11.2011, 16:44 | ||
|
0
|
||
| 25.11.2011, 16:44 | |
|
Помогаю со студенческими работами здесь
420
пишем свой троян с нуля Пишем свой класс, спецификатор доступа protected Интерпретатор небольшого языка программирования на С++ Не удается откомпилировать интерпретатор М-языка
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|