Теория синтаксического анализа, перевода и компиляции - Том 1 (943928), страница 114
Текст из файла (страница 114)
(макроструктура) и <определение) могут быть люб ц оч ами терминальных н нетерминальных символов. Однако ыми вст е каждый нетерминал, участвующий в <определении>, р чаться так2ке н в соответствующей <макрострукту е>. должен 2. <константа>, <идентифнкатор> и <метка> — лексические переменные, которые здесь не определяются. П.2. СИНТАКСИС ОПЕРАТОРОВ ЯЗЫКА СНОБОЛ 4 Здесь мы определим синтаксическую структуру операторов Снобола 4, как зто описано у Грисволда н др. !197Ц. Синтаксическое описание состоит из двух частей. Пе рвая часть содер5Ь2 Пхс СИНТАКСИС ОПБРАТОРОВ ЯЗЫКА СНОБОЛ 2 жит контекстно-свободные правила, описывающие синтаксис операторов с использованием лексических переменных, которые описываются во второй части с помощью регулярных определений, рассмотренных в гл.
3. Деление грамматики на синтаксическую и лексическую части здесь довольно произвольно, и в синтаксическом описании не отражены приоритет и ассоциативность операций. Все операции, кроме — 2, ! и РР, предполага. ются ассоциативными „слева направо". Приоритет операций задается следующим соглашением: 1. й 2. ! 3. (пробелы> 4. 4 5. + — 6..7~ 7, г 8. Р 9.
% 10, !АР 11. $ 12. — 1 ? Правила высокого уровня 1 <оператор>— (оператор присваивания>!(оператор сравнения)!<Оператор замены>!<вырожденный оператор)!<оператор конца> 6 (оператор присваивания)- <пеобязат лгетка> <область субъекта> <равно> <область объекта> <область перехода> (коноп) 7 (оператор сравнения>— <необязат метка> <область субъекта> <область образца,' <область перехода> <коноп> ' 8 <оператор замены>— <необязат метка> <область субъекта) (область образца> (равно) <область объекта) (область перехода) (конон) 9 (вырожденный оператор>— <необязат метка> <область субъекта> <область перехода <конон>!<необязат метка> <область перехода> <конон) 11 <оператор конца>— Е5!О <конон>! ЕН1> (пробелы> <метка> <коноп>! Е5!!) <пробелы> ЕЯ) <коноп> 14 <необязат метка> <метка>!е 16 <область субъекта>— <пробелы) <элемент> 17 <равно>— <пробелы> = 18 (область объекта)— <пробелы> (выражение) 19 (область перехода) (пробелы>: <необязат пробелы) (основной переход>!а 21 <основной переход)— <переход> ! приложвнив и 3 синтАксис пл зее Я (переход) (необязат пробелы) <необязат г переход) ) Е <переход) <необязат пробелы> <необязат 5 переход> 24 <переход> (<выраженне>) ~ ( <выраженне> > 26 <необязат 5 переход>— 5 <переход) ) е 28 <необязат г переход>— Р <переход> ) е 30 <конон>- <необязат пробелы>; ~ <необязат пробелы> <констрок> 32 <область образца> <пробелы> <выраженне> 33 <элемент>— (необязат унарные) (основной элемент) 34 <необязат унарные>— (операцня) <необязат унарные) ) е 36 (основной элемент> (идентификатор) ! (лнтерный) !(вызов функции) ) (нмя) ) (<выражение>) 41 (вызов функцни)- <ндентифнкатор> (<спнсок аргум>) 42 <имя>— (идентифнкатор> < (спнсок аргум) $3 (спнсок аргум>— (спнсок аргум), (выражение) ~ (выражение) 45 <выражение> <необязат пробелы> (элемент> <необязат пробелы> ) <необязат пробелы) <операцня> (необязат пробелы> ) <необязат пробелы> 18 <необязат пробелы)- <пробелы) ~ е 10 (операцня>— <элемент> <бинарное> <элемент> ) <элемент> <бннарное) (выраженне> эегуляриые определения лексем <цифра> = 0)1)2)3)4~5(6)7)8)9 <буква) = А!В)С) ...)Л <буквоцифра> = <буква> ) <цнфра> (ндентнфнкатор> = <буква> (<буквоцнфра> ) ) )' <пробелы> = <знак пробела>+ <целое> = (цпфра>+ (вещественное> = <целое>.
<целое> ) <целое>. ) 1 ) е6 )е ) 7 ) ~ ! ~ ) ) © )~) 4 (бинарное> = (пробелы> ) (пробелы> (операцня> (пробелы) ! <пробелы> ее <пробелы> <слнтерное> =- '(<ЕВС)>1С литера> — ') *' ') <длятерное> = "(<ЕВСР)С литера> — ") *" (слитерное> ) (длитерное> ) (целое) ) (вещественное) <буквоцифра> ((ЕВС(>1С литера> — (<знак пробела> 1;))е Лексические переменные <знак пробела> <ЕВСО)С литера> (констрок) ') П.З. СИНТАКСИС ПП 360 В ом аз еле содержится синтаксическое оп не н а не ПЛ 360, данном равд овня азработанного Никлаусом машинного языка высокого урыть, раз Вн том для вычислительных машин ИБМ .
о опи представляет со ой гра нрт б мматнку предшествовання, взятую нз работы [Внрт, 19681. Правила высокого уровни 1 (регнстр> <идентификатор> 2 <идентификатор ячейки)- <ндеитнфнкатор> э) Знак — в этой к следующих строках является метаскмвалом.
а) Кокам строки, пгиложвниа 3 (ндентнфикатор процедуры)— <идентификатор> 4 <идентификатор функции) <идентификатор> 5 <ячейка>— <идентификатор ячейки> ! <яч1>) ! <яч2>) 8 <яч1>- (яч2) (ариф Опер) (число) ! (ячЗ> <число> 10 <яч2>— <ячЗ> (регистр> 11 <ячЗ>- <идентификатор ячейки> ( 12 <унар опер>- аЬз ! пей ! пей аЬз 15 (ариф опер) --' +! — !в!l!++! —— 2! <лог опер>- апб ! ог ! хог 24 <сдвиг)— зЫа ! зйга ! зЫ1 ! зйг1 28 <прнсванвание регистру>- (регистр):= <ячейка) ! <регистр> : = (число> ! (регистр> : = (цепочка) ! <регистр> : = <регнстр> ! (регистр) : = (унар опер) (ячейка) ! <регистр> : = <унар опер> <число> ! <регистр) : =- <унар опер> <регистр) ! <регистр> : = Д <ячейка) ! (присваивание регистру) (ариф опер> <ячейка> ! <присваивание регистру> <ариф опер> <число) ! (присваивание регистру> (ариф опер) (регистр) ! (присваиваиие регистру) Слог опер) <ячейка) ! <присваивание регистру) (лог опер) (число> ! (присваивание регистру> <лог опер> (регистр) ! (присваивание регистру> (сдвиг) (число) ! <присванвание регистру) <сдвиг) <регистр> 44 <функ!>— <функ2> (число> ! <функ2> <регистр> ! <функ2> <ячейка> ! <функ2> <цецочка> 43 <функ2>- <идентификатор функции>) ! <функ1>, 50 <послед случаев>— сазе <регистр> о1 Ьед1п ! <послед случаев> <оператор>1 52 <простой оператор> <ячейка>: = <регистр>!<присваиваиие регистру>!па11! йо1о (идентификатор> ! (идентификатор процедуры) ! <идентификатор функции> ! <функ1> (! <послед случаев> ецио ! <тело блока> епб 6! <отношение>- <!=!>!<=!>=! 67 <ие>— 68 <условие>- (регистр) (отношение) <ячейка) ! (регистр) <отношение> (число> ! (регистр) (отношение) (регнстр) ! (регистр) (отиошение) (цепочка) ! отег11ов ! <отношение> ! (ячейка> ! <не> (ячейка> 76 <состав условие>- <условне) ! <состус пили) (условие) 78 <состус иилн>— <состав условие) апб ! (состав условие) ог 80 <состус то>— <состав условие> 1Ьеп 81 <истин часть> <простой оператор> е1зе 82 (пока> ттЫ1е 83 (услов делай>— <состав условие> Йо 84 <шаг присваивания>- (присваивание регистру) з1ер (число) 85 <граница>— юп111 (регистр) ! нпб1 (ячейка) ! пп111 (число) 88 <делай> до 89 <оператор*>— (простой оператор) ! Н <состус то> <оператор*> ! 11 <состус то) <истин часть> <оператор*> ! <пока> <услов делай) <оператор"> ! 1ог <шаг присваивания) <граннца> <делай> (оператор*) 94 <оператор> <оператор'> ПРИЛОЖЕНИЕ 95 <простой тип> ЗЬог1 1П1ейег ~ 1п!еЕег ~ 1оЕ(са1 ( геа1 ~ 1ОПЕ геа1 ( Ьу(е ~ сЬагас(ег 102 <тип>- <простой тип> ~ аггау <число> <простой тип> 104 (опис1>- <тип) <идентификатор> ! <опис2> <идентификатор) 106 (опис2>— <опис7>, 107 <описЗ> <апис!> 108 <опис4>— <описЗ) (~ <опис5>, 110 <описб>— <опис4) <число> ~ (опис4> <цепочка> 112 <описб>— (описЗ> 113 <опис7>— <опис1> ~ <описб> <число) ~ <описб> <цепочка> ~ <описб>) 117 <опис функ!>- 1нпсПоп ~ <опис фуик7> 119 (опис функ2>— <опис функ1) (идентификатор) 120 <опис функЗ) <опис функ2> ( 121 (опис функ4)— <опис функЗ> <число> 122 <опис функ5>— (опнс функ4), 123 <опис функб>- <опис функ5) <число> 124 <опис фуик7>— <опис функб)) 125 <синоним опис1>— <тип> (идентификатор> зуп ~ (простой тип) гей!з!ег <идентификатор) зуп ( (синоним описЗ> <идентификатор> зуп 128 <синоним опис2)— <синоним опнс1> <ячейка> ~ <синоиим опнс1> <число> ! (синоним опис1> <регистр> 13! (синоним описЗ>— <синоним опвс2>, 132 <голова сегмента> зейгпеп1 5бв ПА, СУ-СХЕМА ДЛЯ ЯЗЫКА РАЬ 133 <заголов проц!) †" ргосебпге ! <голова сегмента> ргосебвге 135 <заголов проц2>— <заголов проц1> <идентификатор> 136 (заголов процЗ>- <заголов проц2> ( 137 <заголов проц4>- (заголов процЗ> <регистр) 138 <заголов проц5>— <заголов проц4>) 139 <заголоа процб>— <засолов проц5>; 140 (описание>- <опис7) ! <опис функ7> ~ <синоним опис2> ! <заголов процб> <оператор*> ! <голова сегмента> Ьазе (регистр) 145 <определение метки>— <идентификатор>: 146 <голова блока> Ьей!и ~ (голова блока) <описание>; 148 <тело блока> <голова блока> ! <тело блока> <оператор>; ( <тело блока> <определение метки) 15! <программа>- <оператор> Лексические переменные (идентификатор> <цепочка> (число) П.4.
СХЕМА СИНТАКСИЧЕСКИ УПРАВЛЯЕМОГО ПЕРЕВОДА ДЛЯ ЯЗЫКА РАЬ Здесь мы приведем схему синтаксически управляемой трансляции для языка программирования РАЬ, созданного Возенкрафтом и Эвансом 119691 и включающего в себя лямбда-исчисление и операторы присваивания. Название языка составлено из первых букв слов Редадоя(с А1догКЬпнс Ьапдиаде (Педагогический Алгоритмический Язык). Опнсывасмая здесь СУ-схема отображает программы, написанные иа слегка модифицированной версии языка Р ЧЬ, в постфиксные польские записи. Эта СУ-схема взята из диссертацви Де Ремера [!9691.