Coco/R
| Coco/R | |
|---|---|
| Тип | Parser/scanner generator |
| Автор | Hanspeter Mössenböck and others |
| Аппаратная платформа | Cross-platform |
| Лицензия | GNU GPL |
| Сайт | ssw.jku.at/Research/Projects/Coco/ |
Введение
Сосо/R — программа генерации компиляторов или интерпретаторов языка. Программа читает файл с атрибутивной грамматикой реализуемого языка, описанной в форме РБНФ (Расширенная форма Бэкуса — Наура, EBNF) и генерирует ряд файлов:
- исходники лексического анализатора; работает как детерминированный конечный автомат.
- исходники синтаксического анализатора; использует метод нисходящего рекурсивного спуска.
- информационные файлы (журнал, таблица лексем языка).
Использование Сосо/R является очень простым. Создаваемый программой код является быстрым и лёгким для понимания.
Сама программа уже реализована на множестве языков, и генерирует исходники компилятора так же на множестве языков. Существуют версии Сосо/R, создающие исходники на Java, C++, C#, Delphi, Pascal, Ada, Modula-2, Modula-3, Oberon, Component Pascal и других языках.
Разработка своего языка заключается в разработке файла грамматики языка. В грамматику языка добавляется специального вида комментарии (. .), в которых заключен код для выполнения дополнительных действий. Как правило, это код для занесения данных в таблицы идентификаторов, генерации кода или его интерпретации.
Версия Сосо/R для языка С#
Входной файл для Сосо/R имеет расширение .ATG и содержит наборы символов языка, лексемы и продукции языка, описывающие структуру компилируемого языка и вставки на языке С#.
Сосо/R генерирует классы сканера и парсера на языке C# (Scanner.cs, Parser.cs) Так же автоматически создаётся обработчик ошибок (он входит в состав Parser.cs), что впоследствии позволяет выводить при анализе программ пользователя список ошибок с указанием их мест. Таким образом, программа автоматизированной генерации компиляторов Сосо/R значительно облегчает процесс создания компиляторов.
Пример
В данном случае Сосо/R описывает грамматики вида:
- S -> aU | bV
- U -> bV | bS | e
- V -> a | b
COMPILER CLN //название языка
public System.Windows.Forms.TextBox text; //имя текст-бокса в нашем компиляторе на языке, на котором он пишется (C#)
public string Production=""; //переменная в программе компилятора с продукциями
public string Conditions="";
public string dd; //промежуточная строка
CHARACTERS //раздел, в котором описываются допустимые символы, разбитые на группы
Blet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ". //большие буквы
Slet = "abcdefghijklmnopqrstuvwxyz". //маленькие..))
TOKENS //токены, они же лексемы. Структурные единицы, из которых состоит описываемый входной язык компилятора
Unterminal = Blet. //например, нетерминалы могут быть любой буквой и группы, описанной выше как Blet, т.е. все большие буквы
Product = Slet {Blet|Slet}. //аналогично, продукции состоят из одной маленькой буквы и далее энное колво больших и маленьких букв (эн от 0 до бесконеч)
Cr = '\r'|'\n'. //возможные варианты конца строки
goto = "->". //стрелочка
Divider = "|". //разделитель продукций
COMMENTS FROM "//" TO '\n' //комментарии - будет игнорироваться
IGNORE '\t'+' ' //список игнорируемых символов, в данном случае табуляция и пробелы
PRODUCTIONS //раздел с описанием структуры входного языка компилятора, в данном случае - грамматики)
CLN = //начало описания, описывается в виде набора описанных выше токенов. в фигурных скобках, как и выше - значит что кусок может не быть, а может быть от 1 до много раз)
//в квадратных скобках (здесь нету..) - либо 0, либо 1 раз)
{
Unterminal (. Conditions+=t.val; .)
goto
Product (. Production+=t.val+" "; .)
{
Divider
Product (. Production+=t.val+" "; .)
}
(. Production+='\n'; .) //в (. .) идут вставки на конечном языке (си шарпе), которые без изменения будут перенесены в парсер и сканер
{Cr}
}.
END CLN.//конец описания
Ссылки
- The Compiler Generator Coco/R (англ.). Дата обращения: 20 января 2021. Архивировано 7 марта 2009 года.
- Ada Coco/R - Руководство пользователя. Архивировано из оригинала 3 марта 2012 года.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.