Blank Title

## Создание грамматики

Осуществить ввод исходной грамматики можно несколькими способами:
1. Открыть файл с проектом, если проект был создан ранее и содержит грамматику. Для этого можно использовать пункт меню “File->Open Project…” , кнопку на панели инструментов или комбинацию клавиш Ctrl+O. Появится диалоговое окно изображенное на рисунке 1, в котором необходимо выбрать файл с расширением .osa.

Рисунок 1– Окно выбора проекта

2. Открыть файл с грамматикой, если грамматика была создана ранее и
сохранена в открываемый файл. Открыть файл можно через пункты меню “File”: Open Unicode File…- открыть файл с кодировкой Unicode (клавиши
Ctrl+Alt+U), Open ANSI File…- открыть файл с кодировкой ANSI (клавиши
Ctrl+Alt+A), Open ASCII File …- открыть файл с кодировкой ASCII (клавиши Ctrl+Alt+C). Появится диалоговое окно изображенное на рисунке 2, в котором можно выбрать файл грамматикой, файлы с кодировками Unicode, ANSI, ASCII имеют расширения .gru, .gra и .grm соответственно.

Рисунок 2– Диалоговое окно

3. Ввести описание грамматики с клавиатуры. Для этого необходимо
создать новый проект (или файл) в системе ОСА. Ввод грамматики осуществляется в редакторе, который находиться на вкладке “Грамматика”, изображенной на рисунке 3.

Рисунок 3- Вкладка “Грамматика”

Введенную грамматику можно сохранить как новый проект или как файл. Для этого можно использовать меню “File->Save Project …” (клавиши Ctrl+S) или “File->Save Project As…” (клавиши Ctrl+Shift+S). Эти операции могут быть вызваны через панель инструментов.
Для описания грамматики используется специализированный способ записи правил в форме Бэкуса-Наура. Грамматика состоит из правил, к примеру:
<Begin>::= “begin” <Body><R> ; “end”
Правило состоит из левой и провой части:
<Begin> - левая часть “begin” <Body><R> ; “end” – правая часть
чтобы различать части правила необходим разделитель “::=”.
В левой части всегда должен быть единственный нетерминальный символ, в примере это <Begin>. Правая часть может содержать как одно- и многосимвольные терминалы, так и нетерминальные символы. Многосимвольные терминалы должны заключаться в двойные кавычки. В качестве терминальных символов нельзя использовать символы: ‘,’, ‘:’, ‘(‘, ‘)’, ‘|’, но они могут присутствовать в многосимвольных терминалах и в нетерминальных символах. Для ввода двух или более правил с одинаковой левой частью удобно использовать следующий способ записи правил:
<Begin> ::= “begin <Body><R> ; “end” | <End> | <Return> “return”
такая запись эквивалентна записи:
<Begin> ::= “begin <Body><R> ; “end”
<Begin> ::= <End> | <Return> “return”
<Begin> ::= <Return> “return”
В некоторых случаях такая запись правил грамматики может быть очень удобна, к примеру:
<Char> ::= a|b|c|…..|z вместо:
<Char> ::= a
<Char> ::= b
<Char> ::= c
….
<Char> ::= z
Каждое правило или конструкция должны быть записаны в одну строку, т.е. следующая запись правил недопустима:
<Begin> ::= “begin <Body>
<R> ; “end”
Если правило должно быть аннулирующим, то оно может записывать так:
<Rule>::= $ | … | $ или просто <R>::= $. Будет ошибкой писать так
<Rule>::= $<Rule2> и.т.д.