|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
Пишем свой интерпретатор языка BASIC20.06.2009, 20:03. Показов 257105. Ответов 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 | |
|
пишем свой троян с нуля Пишем свой класс, спецификатор доступа protected Интерпретатор небольшого языка программирования на С++ Не удается откомпилировать интерпретатор М-языка
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|