powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / пятничный интерпретатор c++
42 сообщений из 42, показаны все 2 страниц
пятничный интерпретатор c++
    #39295674
siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне внезапно понадобился интерпретатор/транслятор с-подобного языка.
Цель: выполнять внутри программы с-подобный код, определённый пользователем.

Можно было бы взять готовый движок под, например, lua или использовать jscript/vbscript или взять готовый код интерпретатора и сэкономить время. Но я почему-то так не сделал.

Видимо, потому что:
1. я никогда не писал компиляторы.
2. это хорошая pure программерская задача.
3. имя код интерпретатора на руках, можно добавлять туда различные вещи по желанию. Это не отменяет пункт про готовый код, но для меня лично, я чуть лучше разбираюсь в коде, который сам набрал, чем в коде, который смотрел и с которым разбирался. Да и просто он мне ближе.

я уже успел потратить где-то час на лексический парсер, уже тестировал его, после чего меня выдернуло, и я буду отсутствовать пару дней, пока снова смогу вернуться к работе (пишу с медицинского терминала, который показывает мои ТТХ, но я нашёл у него usb-вход, а врачи пока отсутствуют. шутка), поэтому, если у вас есть опыт, которым можно поделиться, или интерес к теме или ссылки на полезную литературу, накидайте мне это в тему, а то два дня смотреть на мониторчике свои ТТХ меня уже тоскливит.

и верните мне мою чордову возможность слать анонимные посты с моего чордового ip-адреса
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39295681
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно на ANTLR посмотреть
но это только парсер


http://www.antlr.org/
https://github.com/antlr/grammars-v4
https://github.com/antlr/grammars-v4/blob/master/c/C.g4
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39295767
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый Год,

Правильно, на ANTLR ОЧЕНЬ надо посмотреть....
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39295768
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeitи верните мне мою чордову возможность слать анонимные посты с моего чордового ip-адреса

А эт тебя просто забанили...
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39295831
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeitвзять готовый код интерпретатора
Мудрые вещи говорите. Полностью с вами согласен.
https://root.cern.ch/cling
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39295923
siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новый Годможно на ANTLR посмотреть
но это только парсер это ж генератор парсеров! :)
MasterZivА эт тебя просто забанили...интересно, за что? Я за год анонимно поста три отправил только, исключительно с этим ником, когда было лень логиниться. Хотелось бы, чтобы такая возможность вернулась.
Anatoly Moskovskysiebentearbeitвзять готовый код интерпретатора
Мудрые вещи говорите. Полностью с вами согласен.
https://root.cern.ch/cling если цель приобрести дом, то лучше купить готовый дом, а если цель научиться строить, то надо браться за кирпичи :)
спасибо за ссылку.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39295992
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно ANTLR не особо приближает к конечной цели. Что
является выходом ANTLR и что вы с этим выходом будете делать
это еще та проблема.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296075
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeitто надо браться за кирпичи
почему бы не начать с изготовления кирпичей?
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296082
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСобственно ANTLR не особо приближает к конечной цели. Что
является выходом ANTLR и что вы с этим выходом будете делать
это еще та проблема.
нет там никакой проблемы
глянь приложенный файлик, там форматируется кое-какой текстовый файл, прототип на питоне,
на C++ примерно то же самое
на укурный формат файла, который парсится, внимания не обращай

текст, выделенный красным -- это хуки
в них можно, например, складывать данные в глобальные переменные

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
grammar scominit;

options {
    language=Python;
}

@header {
def out (x): sys.stdout.write(x)
}

file    : 
        (scom)* EOF
        ;

scom    : 
        'BEGIN' 'Scominit'  {out ('BEGIN Scominit\n')} 
        'Name' '=' t= ID    {out ('Name = ' + $t.text + '\n')}
        'ClockDomain' '=' '{' t=ID {out ('ClockDomain = {' + $t.text ) } (',' t=ID {out(', ' + $t.text )})? '}'  {out('}\n')}
        (t=HEX {out ( '  ' + $t.text )} t=HEX {out ( '  ' + $t.text + '\n')})*
        'END' {out('END\n')}
        ;

HEX     :  
        ('0x')('0'..'9'|'A'..'F'|'a'..'f')*	
        ;

ID      :   
        ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
        ;

COMMENT :   
        '#'  ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
        ;

WS      :   
        ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
        ;
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296113
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там только 2 файла вручную написаны

Код: plaintext
1.
2.
3.
.
├── edformat
├── scominit
│   ├── scominit.g
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296254
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeitMasterZivА эт тебя просто забанили...интересно, за что? Я за год анонимно поста три отправил только, исключительно с этим ником, когда было лень логиниться. Хотелось бы, чтобы такая возможность вернулась.


У тебя сейчас НЕТ ника. Ты постишь исключительно как аноним, без пользователя.
Для того, чтобы ты мог постить и отслеживаться по логину, тебе нужно всего лишь зарегистрироваться, и далее один раз войти на сайт, затем уже броузер сохранить cookie и ты будешь постить уже не как аноним.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296435
siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилsiebentearbeitто надо браться за кирпичи
почему бы не начать с изготовления кирпичей?Должный уровень абстракции. Я описал это в начале, в третьем пункте.

MasterZivУ тебя сейчас НЕТ ника. Ты постишь исключительно как аноним, без пользователя.
Не, ты невнимательно, наверно, прочитал. У меня есть ник (CEMb), но я не могу отправлять мои чордовы анонимные посты под siebentearbeit-ом (седьмой труд, нем.) потому что с моего чордова ip-адреса запрещены анонимные посты. Я хотел узнать, почему.
Чтобы не было разрыва логики: я сейчас не на работе, а анонимные посты запрещены для моего рабочего компа.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296470
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeitЯ хотел узнать, почему.
Чтобы не было разрыва логики: я сейчас не на работе, а анонимные посты запрещены для моего рабочего компа.
ИМХУ похоже кто-то с твоей работы сильно достал модераторов sql.ru раз IP забанили. Поставь frigate или что-нибудь подобное. Ну а если надо справедливость восстановить, то пиши сюда .
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296472
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeit
MasterZivУ тебя сейчас НЕТ ника. Ты постишь исключительно как аноним, без пользователя.
Не, ты невнимательно, наверно, прочитал. У меня есть ник (CEMb), но я не могу отправлять мои чордовы анонимные посты под siebentearbeit-ом (седьмой труд, нем.) потому что с моего чордова ip-адреса запрещены анонимные посты. Я хотел узнать, почему.
Чтобы не было разрыва логики: я сейчас не на работе, а анонимные посты запрещены для моего рабочего компа.

Потому что "тебя на работе" забанили по IP-адресу или по кукам или ещё как-то.
Если ты зарегистрируешься, то тебя сразу станут банить или не банить по пользователю сайта, а не по вторичным признакам, и ты сможешь постить откуда угодно, даже из забаненой сети/компьютера.
Либо используй ник CEMb, либо создай новый, siebentearbeit.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296653
siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... интересно, сколько народу ходит с моей работы в sql.ru :)
А, ну и вспомнил, что четверть-полгода назад анонимные посты работали...
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39296681
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
siebentearbeit,
Tiny C Compiler
там всё как ты любишь: и парсер ручными дедовскими методами, и запуск сразу, и многоархитектурность
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39297823
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan), вот это довольно прикольная штука, судя по описаниям, спасибо.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298176
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

ага, gcc-testsuite-3.2 даже почти проходит
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298193
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КМК С++ это самый неудачный выбор для транслируемого языка.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298252
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКМК С++ это самый неудачный выбор для транслируемого языка.Ты имел ввиду интерпретируемого?
Да нет, не думаю. Если не заморачиваться с библиотеками (и чтением пре-компилированных объектников из них), то интрепретатор для С++ ничем не будет отличаться от всех ныне существующих традиционно скриптовых языков.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298261
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Все равно, как выяснилось, ТСу достаточно С, а С++ он в теме написал для красного словца
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298263
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто подумайте сколько фич связанных с оптимизацией заложены в С++
и сколько из них враз станут ненужны. И зачем тогда С++ ? Может лучше Lua?
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298281
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПросто подумайте сколько фич связанных с оптимизацией заложены в С++
и сколько из них враз станут ненужны. А при чем здесь оптимизация? Все будет зависеть от того как ты свой интерпретатор напишешь.
Впрочем, на ЯП с функциями ты классически чистый интерпретатор в принципе сделать не сможешь, а значит и место под оптимизатор у тебя в нем обязательно будет. Ну а уж потратишь ты время на обучение оптимизатора или забьешь это уже будет целиком на твоей совести.

maytonИ зачем тогда С++ ? Может лучше Lua?Ну так а привычка к синтаксису? Вот если тебя разбудить среди ночи и потребовать написать алгоритм. На каком языке ты его спросонья писать будешь? Вот! Потому и берут некоторые люди С++ в качестве базы для своего макроязыка.
Впрочем и желание попонтоваться тоже солидный фактор.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298316
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВсе равно, как выяснилось, ТСу достаточно С, а С++ он в теме написал для красного словца Вовсе даже для зелёного
Это был план максимум.
Цель общая такая: есть программа с кнопками. Вводим текст, нажимаем кнопку, текст исполняется. Идём дальше, в интерпретатор добавляем ключевые слова, которые имеют некий смысл макроса, и интерпретатор начинает их понимать и выполнять.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298342
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb, White Owl, mayton

по моему опыту оптимизатор это не особо главная часть интерпретируемого языка, можно хоть заоптимизироваться
но если у тебя не будет отладчика, то почти любой алгоритм больше 15 строчек превращается в проблему

по этому я в одном своём большом проекте использовал ActiveScripting от MS и не заморачивался по поводу скорости
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298417
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ActiveScripting от MSчто это? c-подобный скриптовый язык с возможностью системных вызовов?

Кстати, tcc таки статически слинковать не получилось... :[
И скомпилированный код оно почему-то не может разместить в памяти(tcc_relocate)... что я делаю не так...
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39298781
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbkealon(Ruslan)ActiveScripting от MSчто это? c-подобный скриптовый язык с возможностью системных вызовов?
Active Scripting
CEMbКстати, tcc таки статически слинковать не получилось... :[
И скомпилированный код оно почему-то не может разместить в памяти(tcc_relocate)... что я делаю не так...
что бы работал запуск, целевая платформа должна совпадать с платформой компилятора


там очень дурной хитрый способ компиляции, вот такие дефайны у меня заданы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#define TCC_TARGET_PE 
#define TCC_TARGET_X86_64 
#define LIBTCC_AS_DLL
//#define CONFIG_TCC_BCHECK
//#define CONFIG_TCC_BACKTRACE
//#define TCC_TARGET_I386_x
#define MEM_DEBUG
#define CONFIG_TCC_ASM

//#define INC_DEBUG

естественно эти же дефайны должны быть при использовании dll-ки
можно монолит сделать, но могут быть сюрпризы
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39299079
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbkealon(Ruslan)ActiveScripting от MSчто это? c-подобный скриптовый язык с возможностью системных вызовов?

Кстати, tcc таки статически слинковать не получилось... :[
И скомпилированный код оно почему-то не может разместить в памяти(tcc_relocate)... что я делаю не так...
TCC по факту - умеет линковать (и запускать) маш.код прямо в памяти, это не интерпретатор, а компилятор.

Другое дело, что при ошибке высыпется весь процесс
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39299226
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglTCC по факту - умеет линковать (и запускать) маш.код прямо в памяти, это не интерпретатор, а компилятор.

ну да, даже какую-то версию Linux из исходников запускает
SiemarglДругое дело, что при ошибке высыпется весь процесс
ну так хотели же по православному, только хардкод :-)
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39299294
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)там очень дурной хитрый способ компиляции, вот такие дефайны у меня заданыа на что это влияет? Т.е. где-то должны же быть #ifdef-ы, но я их не вижу о_о
SiemarglTCC по факту - умеет линковать (и запускать) маш.код прямо в памяти, это не интерпретатор, а компилятор.это всё хорошо, но есть же вроде в виндах защита от запуска кода из области данных? Если она включена, это всё работать не будет?
kealon(Ruslan)ну так хотели же по православному, только хардкод :-)хотели сначала чтобы хоть как-то работало, а потом уже хардкор :)
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39299304
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbа на что это влияет? Т.е. где-то должны же быть #ifdef-ы, но я их не вижу о_о
ага, по всему коду разбросаны - как в анекдоте:
"молодец, нашёл"
основные:
TCC_TARGET_??????
LIBTCC_AS_DLL
CEMbэто всё хорошо, но есть же вроде в виндах защита от запуска кода из области данных? Если она включена, это всё работать не будет?

VirtualProtect
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39299306
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)TCC_TARGET_??????
LIBTCC_AS_DLLподнимите мне веки, не вижу о_о
kealon(Ruslan) VirtualProtect блин... я не знал, что можно типа защиты менять
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39300981
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglTCC по факту - умеет линковать (и запускать) маш.код прямо в памяти, это не интерпретатор, а компилятор.

Другое дело, что при ошибке высыпется весь процесс
всё может быть, и на интерпретируемом языке можно в ногу выстрелить
AddVectoredExceptionHandler
и трейсишь что да как
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301072
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan), прошу помощи, где эти дефайны должны быть? :(
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301075
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbно есть же вроде в виндах защита от запуска кода из области данных?
есть - при выделении памяти (VirtualAlloc) указывается - можно ли читать, писать, исполнять.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301354
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbkealon(Ruslan), прошу помощи, где эти дефайны должны быть? :(в config.h перед компиляцией
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301583
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglв config.h перед компиляцией
что такое config.h? Его нет ни в доке, не сорсах, что я скачал по ссылке, ни на гитхабе.
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301636
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbSiemarglв config.h перед компиляцией
что такое config.h? Его нет ни в доке, не сорсах, что я скачал по ссылке, ни на гитхабе.
создай его просто в папке исходников (он под юниксами с помощью configure создаётся)

вроде обязательный параметр в нём:
Код: plaintext
#define TCC_VERSION "0.9.26" 

и ещё тонкость, по факту там всего два "модуля" libtcc.c и tcc.c остальные файлы фактически включаются (#include) в них в зависимости от опции #define LIBTCC_AS_DLL (определена - в libtcc.c, нет - в tcc.c и libtcc.c включается в него)
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301644
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan), спасибо, а откуда берутся все эти знания?
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301664
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,
смотришь исходники Зри в корень (С) Кузьма Прудков
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39301713
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan), ну вот я так и хотел, но исходники не нашёл :(
...
Рейтинг: 0 / 0
пятничный интерпретатор c++
    #39302356
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbkealon(Ruslan), ну вот я так и хотел, но исходники не нашёл :(
Для начала бери эту https://github.com/TinyCC/tinycc

Еще я находил всего одну ветку с существенными отличиями (исправленный fastcall + оптимизация массива токенов), но для начала пофиг
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / пятничный интерпретатор c++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]