Light-industry-up.ru

Экосистема промышленности

Color 100, color yama, color method, color js

10-05-2024

Перейти к: навигация, поиск

Введение

Сосо/R — программа генерации компиляторов или интерпретаторов языка. Программа читает файл с атрибутивной грамматикой исходного языка, в форме РБНФ (Расширенная форма Бэкуса — Наура) и генерирует ряд файлов для этого языка:

Лексический анализатор работает как конечный автомат. Синтаксический анализатор использует методику нисходящего рекурсивного спуска. Использование Сосо/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 (англ.). Архивировано из первоисточника 3 марта 2012.
  • Ada Coco/R - Руководство пользователя (рус.). Архивировано из первоисточника 3 марта 2012.

Color 100, color yama, color method, color js.

Целебес, Категория:Бассейн Вишеры (приток Камы).

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06