Автор Тема: Компилятор Coco/R онлайн  (Прочитано 4263 раз)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Компилятор Coco/R онлайн
« : Ноябрь 19, 2014, 01:32:59 pm »
Намедни, в ходе экспериментов с компилятором Coco/R, подумал:
каким образом можно дать на веб-сайте возможность динамически создавать компилятор на основе грамматики ATG при помощи Coco/R и тут же экспериментировать с входными данными?

Я представляю такую цепочку действий:

  • На входе, в текстовом поле: грамматика ATG

COMPILER Spreadsheet
(* Grammar for a very simple spreadsheet *)

IGNORE CHR(9) .. CHR(13)
IGNORE CASE

COMMENTS FROM "(*" TO "*)"

CHARACTERS
  letter     = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
  digit      = "0123456789" .

TOKENS
  identifier = letter .
  number     = digit { digit} .

PRODUCTIONS
  Spreadsheet = { Command } "QUIT" .
  Command     = [ Expression ]
                ("UP" | "DOWN" | "LEFT" | "RIGHT" | "HOME" | "GOTO" Cell |
                "ENTER" ) .
  Expression  = [ "+" | "-" ] Term { "+" Term | "-" Term } .
  Term        = Factor { "*" Factor | "/" Factor | "%" Factor } .
  Factor      = number | Cell | "(" Expression ")" .
  Cell        = identifier number .

END Spreadsheet.
    [/li]
  • Кнопка "Создать компилятор".
    При нажатии на сервер отправляется запрос с телом грамматики. Сервер запускает Coco/R, проверяет на наличие ошибок
    и возвращает ответ:
    a) позиции ошибок для исправления, если таковые имеются
    b) созданные Scanner(.Mod) + Parser(.Mod), если ошибок нет
  • При получении результатов с сервера:

    a) Ошибки в грамматике помечаются.
    b) Компилятор собирается прямо в браузере при помощи OberonJS. Сообщение об успешности сборки и готовности к работе.
  • Следующий этап заключается в экспериментах над входом для свежего компилятора в режиме онлайн.

    В следующее поле вводится вход (некоторый синтаксис, понимаемый собранным компилятором), который тут же способен интерпретировать его как программу.

Что можно добавить:
возможность вносить изменения в созданные сканер и парсер прямо в текстовых полях, затем отдельной операцией собирать компилятор и тогда тестировать новый синтаксис.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Coco/R онлайн
« Ответ #1 : Ноябрь 19, 2014, 02:58:16 pm »
Я бы посоветовал сделать вообще без сервера - COCO/R, насколько я помню, написан практически на себе самом, то есть не так сложно сделать его порт на Oberon, и затем запускать его прямо в браузере.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Компилятор Coco/R онлайн
« Ответ #2 : Ноябрь 19, 2014, 04:17:49 pm »
Я бы посоветовал сделать вообще без сервера - COCO/R, насколько я помню, написан практически на себе самом, то есть не так сложно сделать его порт на Oberon, и затем запускать его прямо в браузере.
Тоже об этом думал. На самом деле порт на Оберон не нужно делать, он уже есть - https://github.com/romiras/coco-r-oberon - написан на ОС Оберон. Поэтому нужно сначала обеспечить инфраструктуру текстового интерфейса, эмулирующую Oberon v4. Или же реализовать без этих средств.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Компилятор Coco/R онлайн
« Ответ #3 : Ноябрь 19, 2014, 05:35:21 pm »
Я бы посоветовал сделать вообще без сервера - COCO/R, насколько я помню, написан практически на себе самом, то есть не так сложно сделать его порт на Oberon, и затем запускать его прямо в браузере.
Тоже об этом думал. На самом деле порт на Оберон не нужно делать, он уже есть - https://github.com/romiras/coco-r-oberon - написан на ОС Оберон. Поэтому нужно сначала обеспечить инфраструктуру текстового интерфейса, эмулирующую Oberon v4. Или же реализовать без этих средств.
Там же еще и язык древний.
Y = λf.(λx.f (x x)) (λx.f (x x))