Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||||||||||||||||||||||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||||||||||||||||||||||
Пишем свой интерпретатор языка BASIC20.06.2009, 20:03. Показов 242293. Ответов 464
Метки нет (Все метки)
Благодаря форуму и Evg в частности интерпретатор развивается, потихоньку превращаясь в простенький интерпретатор QBASIC.
Некоторые из самых старых версий сохранились в теме и ссылки на них будут добавлены в это сообщение,а также ссылки на другие темы,связанные с этой. Репозиторий с проектом находится тут, там же есть возможность в браузере посмотреть историю ревизий (английский в логах весьма примитивен,комментарии и рекомендации можете писать в личку),а также скачать самый последний архив репозитория в формате .tar.gz Если кто-то пользуется Subversion,скачать исходники можно так: Код
svn co https://basin.svn.sourceforge.net/svnroot/basin basin Технический приём для формирования согласованных данных 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 Пишем свой strlen Пишем свой чекер пишем свой троян с нуля |
05.01.2013, 23:07 | 461 |
Мне кажется, что проблема под виндами может быть исключительно с библиотекой SDL, всё остальное - стандартный Си++. Насчёт commit'а - надо у #pragma'ы спрашивать и вкуривать в настройки sourceforge, как там формируются svn-пользователи. #pragma учится, но, судя по профилю, форум посещает. Но для подстраховки спроси его в личку
0
|
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6
|
|
10.01.2013, 18:13 | 462 |
Добрый день.
Решил оживить тему ещё одним вопросом про написание интерпретатора. У меня есть компилятор, который формирует байт код, и ВМ, которая его читает из файла. Я не могу сообразить как к моей ВМ с байт кодом прикрутить работу с остальным миром (окнами и файловой системой). А то получается она работает в сферическом вакууме. Вариант предложенный здесь (выделить отдельную лексему) не подходит. Хочется сделать реализацию на подобие Java, .NET. Хотелось бы услышать идею реализации. Заранее спасибо всем откликнувшимся.
0
|
10.01.2013, 18:46 | 463 |
В любой реализации байт-кода на самом нижнием уровне должен быть выход на родную операционную систему. Потому что 100%-ых байт-кодов не бывает. В случае java есть какая-то одна (а может несколько библиотек), в процессе исполнения которых вместо байт-кода начинают запускаться родные коды на host'овой машине.
Как технически реализована библиотека - не знаю. Маловероятно, что в язык была внесена какая-то конструкция. Скорее всего библиотека как-то реализована на Си и вокруг неё ручками сделан обвес для виртуальной машины
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
10.01.2013, 20:39 | 464 |
В джвае такие вещи реализуются через вызовы нативного кода из динамических библиотек. Некоторый метод джава объявляется как native, что говорит виртуальной машине, что он реализован на С/С++/Ассемблере и расположен в динамической библиотеке. Сигнатура метода на языке С++ может быть сгенерирована из файла класса утилитой javah, программист реализует тело метода, компилирует его в динамическую библиотеку, в программе на джава (например, в области статической инициализации класса, содержащего нативный метод) эта библиотека загружается стандартными средствами (через System.load()), и вуаля - метод можно вызывать.
Думаю, в .NET это реализовано идейно так же. Как видно, без нативного кода не обойтись. Виртуальная машина - всего лишь программа, и доступ к внешнему миру из неё можно получить только так же, как из любой другой программы - через системные вызовы ОС. Их же, в свою очередь, сам программист помещает в разделяемые библиотеки, при этом они должны иметь строго согласованную с ВМ сигнатуру, чтобы ВМ могла их вызвать (фактически, всё это напоминает плагины).
5
|
Nameless One
|
||||||
13.04.2013, 10:51
Пишем свой интерпретатор языка BASIC
#465
|
||||||
0
|
13.04.2013, 10:51 | |
Пишем свой класс, спецификатор доступа protected Интерпретатор небольшого языка программирования на С++ Не удается откомпилировать интерпретатор М-языка Интерпретатор музыки стандарта BASIC PLAY на С++ Написать интерпретатор программного языка -помощь Интерпретатор/компилятор ассемблер-подобного языка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |