OberonCore
https://forum.oberoncore.ru/

Coco/R. Пример-проба: примитивный Си
https://forum.oberoncore.ru/viewtopic.php?f=61&t=2485
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Четверг, 25 Март, 2010 23:10 ]
Заголовок сообщения:  Coco/R. Пример-проба: примитивный Си

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 КБ]
Скачиваний: 1164

Требуются
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 рулит

Автор:  Info21 [ Четверг, 25 Март, 2010 23:25 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Евгений Темиргалеев писал(а):
P.S. i21sysIn рулит
Рулит "текст как интерфейс", хорошо прочувствованный.

Автор:  Alexey Veselovsky [ Среда, 14 Апрель, 2010 12:30 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Цитата:
Операторы ввода >> и вывода <<

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

Автор:  Comdiv [ Среда, 14 Апрель, 2010 13:02 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Не в С, а в примитивном С.

Автор:  Alexey Veselovsky [ Среда, 14 Апрель, 2010 23:06 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Comdiv писал(а):
Не в С, а в примитивном С.

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

Автор:  Евгений Темиргалеев [ Среда, 14 Апрель, 2010 23:19 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Alexey Veselovsky писал(а):
Где можно почитать спеку на "примитивный С" ?
viewtopic.php?p=45074#p45074

Автор:  Alexey Veselovsky [ Суббота, 01 Май, 2010 03:42 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Я правильно понимаю, что это не только парсер, но ещё и интерпретатор? Причем интерпретация идет сразу в процессе парсинга. Т.е. без промежуточного какого-то представления (байткода).

Автор:  Евгений Темиргалеев [ Суббота, 01 Май, 2010 08:26 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Да.

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

Автор:  Alexey Veselovsky [ Суббота, 01 Май, 2010 14:36 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Евгений Темиргалеев писал(а):
Да.

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

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

Автор:  Alexey Veselovsky [ Суббота, 01 Май, 2010 15:15 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

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

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

Автор:  Alexey Veselovsky [ Суббота, 01 Май, 2010 20:37 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Не очень понятно что вот это означает:
Код:
ctrl = CHR(1)..CHR(31).
noCtrl = ANY - ctrl.

Автор:  Александр Ильин [ Суббота, 01 Май, 2010 21:18 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Alexey Veselovsky писал(а):
Не очень понятно что вот это означает:
ctrl - управляющие символы. noCtrl - остальные.

Автор:  Евгений Темиргалеев [ Воскресенье, 02 Май, 2010 14:26 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Alexey Veselovsky писал(а):
А, если не секрет, сколько ушло времени на написание этого интерпретатора?
часа два на придумывание грамматики и проч., запись "чистой грамматики" на Coco
где-то через неделю-две решил реализовать (идеи в голове промеж делом поварились) - ушло 4-5 часов

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

Автор:  Alexey Veselovsky [ Понедельник, 03 Май, 2010 18:59 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Попробовал собрать. Запустил Coco/R, он мне сгенерировал исходник для парсера. Однако хотя содержимое и похоже на odc файл, BB упорно эти сгенереные файлы открывает как просто текст, в результате компилятор спотыкается при попытке это дело скомпилировать. Я конечно сейчас из этого сделаю нормальный файл, однако это обход проблемы а не решение.

Вложения:
PrimcP.odc [13.39 КБ]
Скачиваний: 991

Автор:  Александр Ильин [ Понедельник, 03 Май, 2010 20:05 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

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

Автор:  Евгений Темиргалеев [ Понедельник, 03 Май, 2010 22:51 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

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

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

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

Автор:  Alexey Veselovsky [ Понедельник, 03 Май, 2010 23:00 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

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

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

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

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

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

Автор:  Comdiv [ Суббота, 28 Апрель, 2012 12:42 ]
Заголовок сообщения:  Re: Coco/R. Пример-проба: примитивный Си

Может кто-нибудь находил или писал грамматики для нормального C? На оф.сайте нашлась грамматика ANSI C для С#.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/