Главная Промышленная автоматика.

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.0036