[C#] проект "компилятор", третий шаг

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

[C#] проект "компилятор", третий шаг

Сообщение tyomitch » 22.10.2005 (Сб) 15:35

Приспичило мне компилятор писать. Почитал, что пишут по этой теме, и решил, что это здорово интересно.
Одно из требований - писать под .net; но т.к. КК для VB.net я так и не нашёл, решил писать на C#. Надеюсь, здесь всё равно есть те, кому это интересно :-)

То, что есть сейчас - вычислитель выражений (4 действия и скобки). GSerg-у, наверное, было бы интересно довести объём его функциональности до своего Expression evaluator, потому что в моём всё гораздо проще и прозрачнее, и запутаться негде.
И вообще, думаю что это всем подряд интересно. Извиняюсь только, что "не на том языке."


В архиве небольшой DOC-файл, который со временем, в идеале, вырастет в типа-статьи о создании компиляторов.
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось tyomitch 29.10.2005 (Сб) 20:53, всего редактировалось 2 раз(а).
Изображение

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 22.10.2005 (Сб) 17:14

Я недавно писал компилятор(если это можна так назвать, так как код транслиловался в asm), правда на VB6, и для VB6.
Интересная тема. У меня работал парсинг выражений, со скобками, функциями и т.д., if then else, for, ф-ции, вызов API ну и собственно все.
Код не то что ужасный, а очень ужасный, правда рабочий.
Жаль щас нету под руками.
Кстати Тёмыч не знаеш случайно примеры написания компилятора на VB6?
الفيجوال بيسك الرابح

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 22.10.2005 (Сб) 23:00

Уважаю tyomitch за его идеи и видел его проекты.
Но считаю, что в наше время написание компилятора - равно мастурбации.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2005 (Сб) 23:06

kerish, когда тебе понадобится написать вычислитель выражений - будешь городить непроходимую логику на десять страниц кода?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 22.10.2005 (Сб) 23:09

tyomitch, перейди на VB6. Так неинтересно.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.10.2005 (Сб) 23:10

|kerish| писал(а):Но считаю, что в наше время написание компилятора - равно мастурбации.


Ну-ка, ну-ка. Поясни :)

Создатель
Постоялец
Постоялец
 
Сообщения: 422
Зарегистрирован: 21.04.2004 (Ср) 3:32
Откуда: Новосибирск

Сообщение Создатель » 23.10.2005 (Вс) 7:08

BV писал(а):tyomitch, перейди на VB6. Так неинтересно.


Очень даже интересно. .NET FOREVER! :lol:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.10.2005 (Чт) 16:03

Сегодня, с помощью напильника и такой-то матери, заставил работать "второй шаг" проекта - интерпретатор НедоБейсика.

Прилагаются исходники на C# и тестовый пример.
Чтобы запустить интерпретатор, нужно в командной строке передать имя файла с программой. (неужели это неочевидно?)

Третьим шагом должен стать компилятор.
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 27.10.2005 (Чт) 18:42

не видел. будет ли ехе'шник в итоге?
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.10.2005 (Пт) 16:29

d3drm писал(а):не видел. будет ли ехе'шник в итоге?

Пока нет.


Ещё раз хочу подчеркнуть важные отличия данного подхода от традиционных спагеттиподобных любительских интерпретаторов:
* минимум кода на ЯП - 30 строк в управляющей программе и 280 в классах-символах; (для сравнения, в Expression evaluator - 222 строки)
* строгая и явная структура классов-символов, облегчающая поддержку и развитие языка;
* формальная грамматика языка не зависит от выбранного ЯП и легко может быть использована другим КК.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.10.2005 (Сб) 20:58

В качестве рецензии:
GSerg писал(а):С одной стороны, это самый быстрый компилятор, который видел, который к тому же создаёт самые мелкие файлы.
С другой стороны, чё-то мне в нём не нравится :)


Тут - компилятор (который даёт exe-шник в итоге - специально для d3drm)
Язык маленько изменён: для совместимости с настоящим Бейсиком список вывода разделяется ';'. Кроме того, добавлены массивы.
Исправленный тестовый пример со второго шага, +бонус: два генератора простых чисел, включены в архив.

Сейчас генерируется .net-сборка, т.е. я работаю с MSIL. Четвёртым шагом должна стать генерация кода для реального процессора.

Заложено несколько милых фич, типа оптимизации выражений, состоящих из констант, на этапе компиляции. Исходники доступны по запросу (по числу запросов я собираюсь измерить народный интерес к данному проекту :-))
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось tyomitch 30.10.2005 (Вс) 15:04, всего редактировалось 2 раз(а).
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.10.2005 (Сб) 23:27

Файл с исходником.
А что ты обычно скармливаешь компилятору?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.10.2005 (Вс) 12:07

[edit]Уже есть, и притом не один.[/edit]
Последний раз редактировалось tyomitch 30.10.2005 (Вс) 13:40, всего редактировалось 1 раз.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.10.2005 (Вс) 12:21

Угадывалка в 3 кб. Интересно, интересно. :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.10.2005 (Вс) 13:39

Апдейт :arrow:
По просьбам трудящихся, тестовые примеры вложены.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 01.11.2005 (Вт) 16:17

tyomitch
GM
Оказывается я не один этим занимался, НЕ ТЕМ, ЧТО НАПИСАЛ |kerish|!
Только было это давно, еще под ДОС:
http://tuapse-mikle.narod.ru/RIFF.rar
Есть даже рабочие демки!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.05.2006 (Вт) 9:43

По просьбам трудящихся, исходники Nedo выложены на http://tyomitch.sky.ru/NedoSrc.rar
Изображение


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

    TopList