Форум Статьи Контакты
Строительство — возведение зданий и сооружений, а также их капитальный и текущий ремонт, реконструкция, реставрация и реновация.

Coco/R

Дата: 7-11-2020, 08:45 » Раздел: Статьи  » 

Введение

Сосо/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 = ' '|' '. //возможные варианты конца строки goto = "->". //стрелочка Divider = "|". //разделитель продукций COMMENTS FROM "//" TO ' ' //комментарии - будет игнорироваться IGNORE ' '+' ' //список игнорируемых символов, в данном случае табуляция и пробелы PRODUCTIONS //раздел с описанием структуры входного языка компилятора, в данном случае - грамматики) CLN = //начало описания, описывается в виде набора описанных выше токенов. в фигурных скобках, как и выше - значит что кусок может не быть, а может быть от 1 до много раз) //в квадратных скобках (здесь нету..) - либо 0, либо 1 раз) { Unterminal (. Conditions+=t.val; .) goto Product (. Production+=t.val+" "; .) { Divider Product (. Production+=t.val+" "; .) } (. Production+=' '; .) //в (. .) идут вставки на конечном языке (си шарпе), которые без изменения будут перенесены в парсер и сканер {Cr} }. END CLN.//конец описания
(голосов:0)

Пожожие новости
Комментарии

Ваше Имя:   Ваш E-Mail: