1
Урочище Флуда / Re: Логи jabber-конференции не работают
« : Июнь 18, 2015, 07:12:30 pm »
Всё, основные логи теперь тут: http://oberspace.dyndns.org/log/oberon@conference.jabber.ru/
Онлайн компилятор Oberon-07/11
Путеводитель по Оберон-проектам.
Логи jabber-конференции.
Онлайн исходники BlackBox: тут:WeBB и на github
Исходники Project Oberon V4 на github.
Сборник решений задач книги "Современное программирование с нуля!" тут. А обсуждение здесь.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Добавляю свой вопрос: А зачем вам язык с лексемами зависящими от контекста?Чтобе легко лепить eDSL'и, очевидно.
Это, хм, очень странно. Казалось бы из ББ все это должно делаться как раз проще - там и RTTI есть искаропки (не нужно огород городить макросами) и вообще... Лучше в случае краха иметь побольше информации прямо в ББ. А то если какая-кака в Сишной части, то ББ ведь просто сложится.Мне интересно другое (может это где-то описано, и я проглядел) - сможет ли ББшный вариант...Так нет ББ-шного варианта. ББ обёртка зовёт длл написанную на Си.
Ммм... курсовая работа студента?Кстати, код на самом деле написан весьма аккуратно. Читается легко (на мой вкус) и понимается тоже. Ведь return из середины это не абсолютное зло :-) То есть в этом плане я проблем не вижу и разобраться в этом коде мне весьма просто.
А С-шный код Ткачёву "понравится". Зашибись по полной программе: кругом дефайны, ретурны из середины процедуры, break, continue и т. п. говнокод.
Ммм... курсовая работа студента?
А С-шный код Ткачёву "понравится". Зашибись по полной программе: кругом дефайны, ретурны из середины процедуры, break, continue и т. п. говнокод. Удивляюсь как только автор не побоялся выкладывать ссылку на такое "изделие" на Оберонкоре. Его же там четвертуют.![]()
![]()
Выложил свой проект - коммуникационное ПО для Оберона/BlackBox и С на
http://sourceforge.net/projects/ta1/.
1. TA позволяет строить распределенные системы на основе моделей клиент-сервер и издатель-подписчик, а также системы обмена сообщений низкого уровня. TA может заменить клиент-серверные технологии CORBA, DCOM и DDS-технологию издатель-подписчик.
2. TA построена исключительно на неблокирующем режиме сетевого взаимодействия, поэтому не страдает подвисаниями, характерными для COM (да и CORBA) и не требует отдельных тредов, блокируемых во время ожидание прихода данных.
3. TA имеет тип протокола обмена SRPS для локальных сетей и SOAP/HTTP - для глобальных. На физическом уровне в локальных сетях возможно использование протоколов: UDP multicast, UDP, TCP, ICMP, Shared Memory. Возможен обмен через DLL, а в C-Unix версии - через SO, Unix Domain Sockets и MSGQ. Множество поддерживаемых протоколов может расширяться.
4. TA - пилотный проект. Есть 2 варианта: TA для BlackBox и TA для C. Первая протестирована для Винды, хотя частично работает и в Wine. Вторая - тестироваана и для Linux.
5. TA распространяется в исходных текстах по лицензии LGPL.
Превед!Ну, вообще говоря, обычно от парсера мы хотим несколько бОльшего. Если это часть компилятора - то нам нужно распозновать отдельные конструкции языка, нам нужно восстановление после ошибок, нам нужна точная и внятная диагностика ошибок для прикладного программиста.Здравствуй капитан очевидность.
Вот только научить всему этому парсер на аналитической грамматике намного проще.
Вон посмотри на тот ужОс в который превращается разбор простейших арифметических выражений.
Там ты не получишь ни нормального АСТ. Ни нормального восстановления после ошибок. Ни нормальных сообщений об ошибках.
Ибо ни один пользователь языка не поймет что term'ы м factor'ами.
[00:16:51] <vlad2> А вот как расшифровывается "term" применительно к примерам всяких грамматик?
[00:38:11] <valexеy> vlad2: terminal ?
[00:38:25] <valexеy> там есть терминалы и нетерминалы
[00:38:31] <valexеy> а еще бывают лексемы
[00:38:39] <valexеy> ну и правила вывода
[00:38:41] <valexеy> вроде бы все.
[00:38:46] <valexеy> больше ничего там нет
[00:38:54] <valexеy> а, ну еще аксиома грамматики.
[00:38:57] <valexеy> теперь точно все :-)
[00:39:14] <vlad2> Не, не терминал.
[00:39:43] <vlad2> Пытаюсь сочинить EBNF. Пока глухо.
[00:41:10] <valexеy> Э? А чо там сочинять то?
[00:41:58] <valexеy> откуда ты вообще этот терм выкопал?
[00:42:01] <valexеy> давай контекст
[00:44:30] <valexеy> Терм — кормовая единица, выражаемая в количестве «чистой», или физиологически полезной животному, энергии. В США один терм приравнен к 1 Мкал.
[00:44:38] <valexеy> :-)
[00:47:38] <vlad2> Терм во всяких примерах. Вобщем избавился я от него
[00:47:49] <vlad2> Сочиняю грамматику для выражений.
[00:47:55] <vlad2> Вроде получилось.
[00:48:40] <valexеy> В каких это примерах?
[00:49:07] <vlad2> Например, в Compiler Construction
[00:49:23] <valexеy> В переводном или в исходном?
[00:49:50] <vlad2> syntax = {production}.
production = identifier "=" expression "." .
expression = term {"|" term}.
term = factor {factor}.
factor = identifier | string | "(" expression ")" | "[" expression "]" | "{" expression "}".
[00:49:56] <vlad2> В исходном, конечно.
[00:50:00] <vlad2> Вот что тут term?
[00:50:05] <valexеy> а, ну это ж тупо так один из нетерминалов назван
[00:50:12] <valexеy> term = factor {factor}.
[00:50:17] <vlad2> _Почему_ так?
[00:50:19] <valexеy> очевидно же :-)
[00:50:22] <vlad2> Как переводится то?
[00:50:26] <valexеy> Потому что так захотелось создателю :-)
[00:50:36] <valexеy> У меня сестра их вообще называет навроде A12
[00:50:38] <valexеy> :-)
[00:50:45] <vlad2> просто оно реально confusing с терминалами нетерминалами.
[00:51:02] <valexеy> ну, блин. это ж Вирт! :-)
[00:51:26] <vlad2> Кстати, если попробуешь представить себе этот синтаксис - тоже фигня какая-то поулучается.
[00:52:40] <valexеy> нихачу представлять!
[00:52:52] <vlad2> factor {factor} превращается в последовательность всякой херни (без операторов). К чему такой пример?
[00:54:00] <valexеy> К тому, что Вирт там избавлялся от левой рекурсии (на которой рекурсивный спуск, да и вообще почти любой парсер который идет сверху-вниз, кроме GLL, сдохнет).
[00:55:05] <valexеy> Это стандартный прием ухода от левой рекурсии, в ахульмане он описан.
[00:55:36] <valexеy> А у Вирта, НЕ описан. Ибо грамматикам он не учит. А учит по готовой Им даденой грамматике строить компилятор одного вида :-)
Ессно опускают. Ибо сделать это качественно для порождающих грамматик задача не реальная. Вот и не хотят позориться.Но собственно ты пока так и не ответил на вопрос - если у меня есть произвольная порождающая грамматика (в EBNF) всегда ли существует эквивалентная ей (в плане языка) аналитическая грамматика?
Но когда мы пишем парсер, у нас нет задачи, сгенерировать все тексты на языке.Ну, вообще говоря, обычно от парсера мы хотим несколько бОльшего. Если это часть компилятора - то нам нужно распозновать отдельные конструкции языка, нам нужно восстановление после ошибок, нам нужна точная и внятная диагностика ошибок для прикладного программиста.
У нас есть задача взять строку и сказать принадлежит ли она языку.
А если они конфликтуют с другими литералами?А что тут не понятного? Написал using syntax Xml; и у тебя в языке появились XML литаралы.А если делать парсер который может изменять свою грамматику во время разбора текста (чем я и занимаюсь) то он может быть только безлексерным.А можно какой-нибудь примерчик, а то не понятно.
Если нужно разобрать что-то простое, причем пишешь ты на чем-то вроде Си и работать должно оно на сильно ограниченных ресурсах (реально ограниченных, то есть мегабайт в распоряжении скорее всего не будет), ужель вместо рекурсивного спуска будешь использовать что-то более брутальное?Иногда полезный.Только если занимаешься онанизмом (более мягкое слово подобрать не могу) с алгоритмами, которые пытаются делать парсер, по языку который описывает генератор.
Это тот самый парсер про который говорил VladD2 на Application Developer Days-3 (в своем долгом спиче про Nemerle-2)?Где можно прочитать/посмотреть/пощупать?https://github.com/rampelstinskin/ParserGenerator
Это устаревшая версия. Сейчас, в пока закрытом режиме, идут работы по доведению её до промышленного качества.
Ну, например из полезного там еще есть алгоритм избавления от левой рекурсии в грамматике.Это вредный алгоритм.
Алгоритм парсера должен поддерживать левую рекурсию. Мой поддерживает.Где можно прочитать/посмотреть/пощупать?
Ну, например из полезного там еще есть алгоритм избавления от левой рекурсии в грамматике.А по тему - в АхУльмане многого (из по крайней мере актуального-современного) нет. Но и многое есть. Как справочник он хорош. Только не надо им ограничиваться.На весь толмуд там полезного десяток страниц про регулярные выражения и трансформации ДКА. Больше ничего полезного там нет.