Coco/R | это... Что такое Coco/R? (original) (raw)

Coco/R

Сосо/R — автоматизированный генератор компиляторов. На вход Сосо/R подаётся файл с описанием структуры языка, который будет входным языком компилятора. Обычно это файл с расширением .ATG, в котором описаны символы, допускаемые языком, лексемы, состоящие из этих символов, продукции языка, описывающие структуру компилируемого языка, вставки на языке, на котором будет писаться компилятор (обычно С#).

Сосо/R генерирует классы сканера и парсера на языке, на котором пишется компилятор, для синтаксического анализа, которые затем добавляются в основную программу. (Scanner.cs, Parser.cs) Так же автоматически создаётся обработчик ошибок (он входит в состав Parser.cs), что впоследствии позволяет выводить при анализе программ пользователя список ошибок с указанием их мест. Таким образом, программа автоматизированной генерации компиляторов Сосо/R значительно облегчает процесс создания компиляторов.

Пример

В данном случае Сосо/R описывает грамматики вида:

S -> aU | bV

U -> bV | bS | e

V -> a | b

COMPILER CLN //название языка

public System.Windows.Forms.Textextox text; //имя текст-бокса в нашем компиляторе на языке, на котором он пишется (Си-шарп) 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.//конец описания

Ссылки

Wikimedia Foundation.2010.

Полезное

Смотреть что такое "Coco/R" в других словарях: