Скачиваний:
8
Добавлен:
01.05.2014
Размер:
79.14 Кб
Скачать

Приложение 1. Полный синтаксис языка в форме Бэкуса-Наура.

<программа>::=[<глобальное_описание>] 'void main(){'[<локальное_описание>] <оператор> '}'

<глобальное_описание>::={<описание_константы>|<описание_переменной>}

<описание_константы>::='const'<описание_простой_константы>||'const'

<описание_вектора_константы>

<описание_простой_константы>::=[<простой_тип>]<идентификация_простой_константы>

{','<идентификация_простой_константы>}';'

<идентификация_простой_константы>::=<идентификатор>'='<арифметическое_выражение>

<описание_вектора_константы>::='vector'<идентификация_вектора_константы>{','

<идентификация_вектора_константы>}';'

<идентификация_вектора_константы>::=<идентификатор>'['<целое_без_знака>']={'

<арифметическое_выражение>{','<арифметическое_выражение>}'}'

<описание_переменной>::=<описание_простой_переменной>|

|<описание_переменной_вектора>

<описание_простой_переменной>::=<простой_тип><идентификация_простой_переменной>

{','<идентификация_простой_переменной>}';'

<идентификация_простой_переменной>::=<идентификатор>['='

<арифметическое_выражение>]

<описание_переменной_вектора>::='vector'<идентификация_переменной_вектора>

{','<идентификация_переменной_вектора>}';'

<идентификация_переменной_вектора>::=<идентификатор>'['[<целое_без_знака>]']'['={'<арифметическое_выражение>{','<арифметическое_выражение>}]

<локальное_описание>::={<описание_константы>|<описание_переменной>}

<простой_тип>::='int'|'float'

<идентификатор>::=<буква> {<буква>|<цифра>}

<буква>::='_'|'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|

|'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'

<цифра>::='0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'

<арифметическое_выражение>::=[<знак>]<терм>|<арифметическое_выражение><знак><терм>

<терм>::=<множитель>|<терм><*_или_/><множитель>

<*_или_/>::='*'|'/'

<множитель>::='('<арифметическое_выражение>')'|<константа>|<оператор_длина_вектора>|<переменная>|<логическое_выражение>

<константа>::=<константа_без_знака>

<знак>::='+'|'-'

<константа_без_знака>::=<имя_константы>|<число_без_знака>

<имя_константы>::=<идентификатор>

<число_без_знака>::=<целое_без_знака>['.'<целое_без_знака>]['E'<знак>

<целое_без_знака>]

<целое_без_знака>::=<цифра>{<цифра>}

<оператор>::=[<метка>':']<непомеченный_оператор>

<метка>::=<идентификатор>

<непомеченный_оператор>::='{' {<оператор>} '}'|';'|<оператор_присваивания> |<условный_оператор>|<оператор_вывода>|<оператор_ввода>|<оператор_цикла>

|<оператор_безусловного_перехода>

<переменная>::=<идентификатор>|<оператор_элемента_вектора>

<оператор_присваивания>::=<переменная>{'='<переменная>}'='<арифметическое_выражение>';'

<условный_оператор>::='if('<условное_выражение>')'<оператор>

['else'<оператор>]

<оператор_вывода>::='printf('<сообщение>| {','<сообщение>} ');'

<сообщение>::={<строка>|<арифметическое_выражение>}

<строка>::=' " '{<символ>}' " '

<символ>::=<любой_символ>

<оператор_ввода>::='scanf(' <идентификатор> {','<идентификатор>} ');'

<оператор_цикла>::='for(' [<оператор_присваивания> {','<оператор_присваивания>} ] ';' [<условное_выражение> {',<условное_выражение>' } ] ';'[<оператор_присваивания> {','<оператор_присваивания>} ] ')' <оператор>';'

<оператор_безусловного_перехода>::='goto' <метка>';'

<оператор_длина_вектора>::='length('<арифметическое_выражение>')'

<оператор_элемента_вектора>::=<идентификатор>'['

<арифметическое_выражение>']'

<условное_выражение>::=<условное_выражение>'||'<конъюнкция>|

<конъюнкция>

<конъюнкция>::=<конъюнкция>'&&'<выражение>|<выражение>

<выражение>::='!'<выражение>|'('<условное_выражение>')'|<выражение>

<логическая_операция><условное_выражение>|<условное_выражение>

<логическая_операция>::='>'|'<'|'=='|'!='|'>='|'<='

  1. Описание лексического анализатора.

Вход лексического анализатора: последовательность литер.

Выход лексического анализатора: последовательность лексем. Каждая лексема состоит из двух полей:

  1. поле, хранящее класс лексемы.

  2. поле, хранящее номер лексемы внутри класса.

Соседние файлы в папке Курсовая работа2