OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 22 Сентябрь, 2019 22:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: Coco/R. Пример-проба: примитивный Си
СообщениеДобавлено: Четверг, 25 Март, 2010 23:10 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
1) Игнорируются пробелы и упр. литеры 01X..1FX
2) Идентификаторы, целые, вещественные, строки без числовых кодов символов.
3) Объявления переменных int и double
4) Оператор присваивания
5) Операторы ввода >> и вывода <<

Код:
   TOKENS
      ident = (letter | "_") {letter | "_" | digit}.
      int = "0" {digit8}
         | digit {digit}
         | "0" ("x" | "X") digit16 {digit16}.
      float = digit { digit } "." { digit }
         [ ("e" | "E") [ "+" | "-" ] digit {digit} ].
      string = '"' { noQuoteAndEsc | "\" (noCtrl | eol) } '"'.

   PRODUCTIONS
      PrivPrimc = { Entry } EOF.
      
      Entry = [ Decls | Stat ] ";".
      
      Decls = ("double" | "int") Def {"," Def}.
      Def = ident ["=" Expr].
      
      Expr = SimpleExpr { (">" | "<" | ">=" | "<=" | "==" | "!=") SimpleExpr }.
      SimpleExpr = Factor { ("+" | "-") Factor }.
      Factor = Unary { ("*" | "/" | "%") Unary }.
      Unary = [ "+" | "-" ] (ident | int | float | "(" Expr ")").
      
      Stat = Inp | Out | Assign.
      Inp = ">>" ident { ">>" ident }.
      Out = "<<" (Expr | string) { "<<" (Expr | string) }.
      Assign = ident "=" Expr.

Вложение:
Комментарий к файлу: Tools->Decode
Primc.txt [15.44 КБ]
Скачиваний: 740

Требуются
1) i21sysIn: http://www.inr.ac.ru/~info21/software.htm, базовый комплект
2) Coco: http://www.zinnamturm.eu/downloadsAC.htm#Coco

1) Primc.atg компилировать кокой
2) Перетащить из конца PrivPrimcP описания ошибок в PrivPrimc.GetMsg
3) дальше - см. командеры в конце PrivPrimc.atg (компиляция, выполнение)

Тестировал мало, может какие ошибки остались...

P.S. i21sysIn рулит


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Март, 2010 23:25 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8174
Откуда: Троицк, Москва
Евгений Темиргалеев писал(а):
P.S. i21sysIn рулит
Рулит "текст как интерфейс", хорошо прочувствованный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Апрель, 2010 12:30 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Цитата:
Операторы ввода >> и вывода <<

Я таки дико извиняюсь, но когда операторы << и >> стали операторами ввода и вывода в Си?
Это операторы побитового сдвига вроде как всегда были, есть и будут ;-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Апрель, 2010 13:02 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 889
Откуда: Киев
Не в С, а в примитивном С.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Апрель, 2010 23:06 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Comdiv писал(а):
Не в С, а в примитивном С.

Где можно почитать спеку на "примитивный С" ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Апрель, 2010 23:19 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Alexey Veselovsky писал(а):
Где можно почитать спеку на "примитивный С" ?
viewtopic.php?p=45074#p45074


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Май, 2010 03:42 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Я правильно понимаю, что это не только парсер, но ещё и интерпретатор? Причем интерпретация идет сразу в процессе парсинга. Т.е. без промежуточного какого-то представления (байткода).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Май, 2010 08:26 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Да.

"Однопроходной интерпретатор" :) хотелось сделать работающую игрушку с минимальными усилиями...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Май, 2010 14:36 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Евгений Темиргалеев писал(а):
Да.

"Однопроходной интерпретатор" :) хотелось сделать работающую игрушку с минимальными усилиями...

Жаль что язык не тьюринг-полный, а то можно было бы идти за нобелевской премией :-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Май, 2010 15:15 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Евгений Темиргалеев писал(а):
хотелось сделать работающую игрушку с минимальными усилиями...

А, если не секрет, сколько ушло времени на написание этого интерпретатора?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Май, 2010 20:37 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Не очень понятно что вот это означает:
Код:
ctrl = CHR(1)..CHR(31).
noCtrl = ANY - ctrl.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Май, 2010 21:18 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2311
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
Не очень понятно что вот это означает:
ctrl - управляющие символы. noCtrl - остальные.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 14:26 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Alexey Veselovsky писал(а):
А, если не секрет, сколько ушло времени на написание этого интерпретатора?
часа два на придумывание грамматики и проч., запись "чистой грамматики" на Coco
где-то через неделю-две решил реализовать (идеи в голове промеж делом поварились) - ушло 4-5 часов

если память не изменяет... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 03 Май, 2010 18:59 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Попробовал собрать. Запустил Coco/R, он мне сгенерировал исходник для парсера. Однако хотя содержимое и похоже на odc файл, BB упорно эти сгенереные файлы открывает как просто текст, в результате компилятор спотыкается при попытке это дело скомпилировать. Я конечно сейчас из этого сделаю нормальный файл, однако это обход проблемы а не решение.


Вложения:
PrimcP.odc [13.39 КБ]
Скачиваний: 566
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 03 Май, 2010 20:05 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2311
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
Однако хотя содержимое и похоже на odc файл, BB упорно эти сгенереные файлы открывает как просто текст
Поправка: содержимое является корректным odc-файлом и BB его правильно открывает, но внутри odc-файла почему-то присутствует копия заголовка какого-то другого odc-файла. Доказательство прикладываю.
Вложение:
PrimcP.odc [13.44 КБ]
Скачиваний: 586
Это ваш файл, в котором я псевдозаголовок выделил жирным и просто сохранил (Ctrl+S). Раз при последующем открытии есть выделение жирным, значит это не "просто текст", а именно корректный odc.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 03 Май, 2010 22:51 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Alexey Veselovsky писал(а):
Попробовал собрать. Запустил Coco/R, он мне сгенерировал исходник для парсера. Однако хотя содержимое и похоже на odc файл, BB упорно эти сгенереные файлы открывает как просто текст...
Если ББ читает файлы как просто текст, то для файлов данного типа не зарегистрирован конвертер. В этом случае ББ использует первый конвертер в списке, который "хавает всё", а это (в стандартном Config) - чтение простого текста.

Когда так открывается заготовка парсера .frm, получается показанный результат.

Есть предположение, что Вы проглядели пункт 4 в разделе "установка" из Coco/Docu/Quick-Start


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 03 Май, 2010 23:00 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Евгений Темиргалеев писал(а):
Alexey Veselovsky писал(а):
Попробовал собрать. Запустил Coco/R, он мне сгенерировал исходник для парсера. Однако хотя содержимое и похоже на odc файл, BB упорно эти сгенереные файлы открывает как просто текст...
Если ББ читает файлы как просто текст, то для файлов данного типа не зарегистрирован конвертер. В этом случае ББ использует первый конвертер в списке, который "хавает всё", а это (в стандартном Config) - чтение простого текста.

Когда так открывается заготовка парсера .frm, получается показанный результат.

Есть предположение, что Вы проглядели пункт 4 в разделе "установка" из Coco/Docu/Quick-Start

Да, просмотрел. Спасибо.

PS. Пятый пункт весёлый: "5. Exit and restart BlackBox"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Апрель, 2012 12:42 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 889
Откуда: Киев
Может кто-нибудь находил или писал грамматики для нормального C? На оф.сайте нашлась грамматика ANSI C для С#.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB