Главная Промышленная автоматика. 13 <выражение>-н- <арифмет выражение) <операция отношения) <арифмет выражение) <арифмет выражение) 15 <арифмет выражение)-> <арифмет выражение) <опер типа слож) <терм) <терм> 17 <терм)-> <терм) <опер типа умнож) <первичное) <первичное> 19 <первичное) - <переменнан) <константа) (<выраженне)) [ <блок) 23 <переменная) -*- <идентификатор)1<идентификатор) (<список выражений)) 25 <список выражений) -* <список выражений), <выражение) <выражение> 27 <операция отношеиня)-* <К1 = >> 33 <опер типа слож) - 35 <опер типа умнож)-*- Механизм расширения 37 <оператор) - <макроопределение) <макроструктура) 39 макроопределение)-- <макроопределение оператора) ] <макроопределение функции) 41 <макроопределение оператора)-> smacro <макроструктура) define <определение> endmacro 42 <макроопределение функции)-»- fmacro <макроструктура) define <определение) endmacro 43 <первичное> -+ <макроструктура) Замечания 1. <макроструктура) и <определение> могут быть любыми цепочками терминальных и нетерминальных символов. Однако каждый нетерминал, участвующий в <определении), должен встречаться также и в соответствующей <макроструктуре). 2. <константа), <идентификатор) и <метка) -лексические переменные, которые здесь не определяются.. П,2. СИНТАКСИС ОПЕРАТОРОВ ЯЗЫКА СНОБОЛ 4 Здесь мы определим синтаксическую структуру операторов Снобола 4, как это описано у Грисволда и др. [1971]. Синтаксическое описание состоит из двух частей. Первая часть содер- п.2. СИНТАКСИС ОПЕРАТОРОВ ЯЗЫКА СНОБОД 4 жит контекстно-свободные правила, описывающие синтаксис операторов с использованием лексических переменных, которые описываются во второй части с помощью регулярных определений, рассмотренных в гл. 3. Деление грамматики на синтаксическую и лексическую части здесь довольно произвольно, и в синтаксическом описании не отражены приоритет и ассоциативность операций. Все операции, кроме -i, 1 и »», предполагаются ассоциативными „слева направо". Приоритет операций задается следующим соглашением: 1. & 2. I 3. <пробелы> 4. @ 5. +- 6. # 7. / 8. * 9. % 10. ! *» II. $ 12. -1 ? Правила высокого уровня I <оператор) -»- <оператор присваивания)<оператор сравнения)!<оператор замены) I <вырожденный оператор) j <оператор конца) 6 <оператор присваивания)-»- <иеобязат метка) <область субъекта) <равно> <область объекта) <область перехода) <коноп> 7 <оператор сравнения) <необязат метка) <область субъекта) <обласТь образца; <область переходаХконоп) 8 <оператор замены)-» <необязат метка) <область субъекта) <область образца) <равно) <область объекта) <область перехода) <коноп) 9 <вырожденный оператор)-* <необязат метка) <область субъекта) <область перехода; <коноп) I <необязат метка) <область перехода) <коноп) И <оператор конца)-*- END <KOHon)END <пробелы) <метка) <коноп) END <пробелы) END <коноп> 14 <необязат метка)- <метка) е 16 <область субъекта)-»- <пробелы> <элемент) 17 <равно)-* <пробелы> = 18 <область объекта)- <пробелы) <выражение) 19 <область перехода)-»- <пробелы>: <необязат пробелы) <основной переход) ]е 21 <основной переход)-»-<переход) 5<переход> <необязат пробелы) <необязат F переход)! f <переход) <необязат пробелы) <необязат S переход) 24 <переход) -> «выражение)) < <выражение) > 26 <необязат S переход)-*- 5<переход) е 28 <необязат F переход)- F<переход) е 30 <коноп) <необязат пробелы); 32 <область образца)- <необязат пробелы) <констрок> <пробелы) <выражение) 33 <элемент) -j- <необязат унарные) <основной элемент) 34 <необязат унарные)-» <операция) <необязат унарные) е 36 <основной элемент)-> <идентификатор) <лнтерный) <вызов функции) <имя) «выражение)) 41 <вызов функции)-J- <идентификатор) «список аргум)) 42 <имя)-> <идеитификатор) < <список аргум) > 43 <список аргум)-» <список аргум), <выражение) <выражение) 45 <выражение) -» <необязат пробелы) <элемент) <необязат пробелы) <необязат пробелы) <операция) <необязат пробелы) <необязат пробелы) 48 <необязат пробелы)-»- <пробелы) I е 50 <операция) - <элемент) <бинарное) <элемент) <элемент) <бинарное> <выражение) Регулярные определения лексем <цифра) = 012345671819 <буква> = Л\В\С\ ... \Z <буквоцифра) = <буква> I <цифра) <идентификатор) = <буква) «буквоцифра) П.З. СИНТАКСИС ПЛ 360 <;пробелы) = <знак пробела)" <целое) <цифра)+ <веш.ественное) = <целое). <целое) 1 <целое). <операцня)- <,пробелыу 1 <,про6елыу <операция) <пробелы) ) <пробелы} ** <пробелы) <слитерное)= «EBCDIC литера) - ) *) <длитерное) = "«EBCDIC литера)-") *" <литерное)~ <слитерное) <длитерное) <целое) <вещественное) <метка)= <буквоцифра) (<EBCDIC литера) -«знак пробела) ];)) - END Лексические переменные <знак пробела) <EBCDIC литера) <констрок) 2) П.З. СИНТАКСИС ПЛ 360 в данном разделе содержится синтаксическое описание ПЛ 360, машинного языка высокого уровня, разработанного Ннклаусом Виртом для вьшислительных машин ИБМ 360. Это описание представляет собой грамматику предшествования, взятую из работы [Вирт, 1968]. Правила высокого уровня 1 < регистр)-* <ндентифпкатор) 2 <идентификатор ячейки)-»- <идеитификатор) 1) Знак - в этой н следующих строках является метасимволом. 2) Конец строки. Приложение 3 <идентификатор процедуры) <идентификатор) 4 <идентификатор функции)-! <идентификатор> 5 <ячейка)- 8 <яч1) 10 <яч2) <ндентификатор ячейки) <яч1)) <яч2)) <яч2) <ариф опер) <число) <ячЗ) <число> <ячЗ) <регистр) И <ячЗ> - <идентификатор ячейки) { 12 <унар опер)-» abs I neg I neg abs 15 <ариф опер)- 21 <лог опер)-> and 1 or I xor 24 <сдвиг)-»- shla I shra shil shrl 28 <присваивание регистру)- <регистр> <ячейка) <регнстр) := <число) ) <регистр) := <цепочка> <регистр> := <регистр) <регистр> := <унар опер) <ячейка) [ <регистр) <унар опер) <число) <регистр> := <унар опер) <регистр> <регистр) := @ <ячейка) <присваивание регистру) <ариф опер) <ячейка) <присваивание регистру) <ариф опер) <чнсло) <присваивание регистру) <ариф опер) <регистр> <присванваиие регистру) <лог опер) <ячейка) <присваивание регистру) <лог опер) <число) <присваивание регистру) <лог опер) <регистр) <присваивание регистру) <сдвиг) <число) <присваивание регистру) <сдвиг) <регистр) 44 <функ1)- <функ2) <число) I <функ2) <регистр) <функ2) <ячейка) <функ2> <цепочка) 48 <функ2)- <идентификатор функции)) <функ1), 50 <послед случаев) case <регистр) of begin ] <послед случаев) <оператор); ij.a, иим lui дои 52 <простой оператор)-»- <присваивание регистру) null <идентификатор процедуры) <ячейка) : = <регистр) goto <идентификатор) ------. <идентификатор функции) <функ1) ( <послед случаев) end <тело блока) end 61 <отношение>-*- < = 1>1< = 1>=1- = 67 <не>- 68 <условие)-»- <регистр> <отношение) <ячейка) ,[ <регистр) <отношение) <чнсло> <регистр) <отношение) <регистр) <регистр> <отношение) <цепочка) overflow I <отношение) ] <ячейка) I <не) <ячейка) 76 <состав условие)- <условие) 1 <состус пили) <условие) 78 <состус иили)-ь <состав условие) and <состав условие) or 80 <состус то) -* <состав условие) then 81 <нстин часть)->- <простой оператор) else 82 <пока)- wliile 83 <услов делай)-* <состав условие) do 84 <niar присваивания)--» <присваивание регистру) step <число) 85 <граница>-ь until <регистр) I until <ячейка) ] until <число> 88 <делай)-ь 89 <оператор*) <простой оператор) if <состус то) <оператор*) if <состус то) <истин часть) <оператор*) ] <пока) <услов делай) <оператор*) for <шаг присваивания) <граница) <делай) <оператор*) 94 <оператор)~* <оператор*> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 [93] 94 95 96 97 98 99 100 101 0.0019 |