ВУЗ:
Составители:
форму списка; при отсутствии необязательных элементов - метки и
перехода - в соответствующих позициях помещается символ *;
списком (операторов) является и программа, причем ограничители
";" удаляется:
<программа>::=(<оператор>…)
<оператор>::=({<метка>| *}<правило>{<переход>|
<переход>::=(S<метка>)| (F<метка>)|(<метка>)*})
Таким же образом преобразуются в списки и другие
конструкции языка:
<левая часть>::=<<имя>[<образец>])
<правая часть>::=({<строки>|<имя>}…)
<переменная с длиной>::=(*<имя><число>)
<произвольная переменная>::=(*<имя>)
Строки с помощью подходящих функций переводятся в
списки однолитерных атомов; при этом кавычки (первые и
последние элементы полученных списков) удаляются.
После указанных преобразований левая и правая части
оператора приобретают вид списков, состоящих на первом уровне
из атомов ("имен"строк) и списков ("строк" и "переменных").
На втором этапе работы интерпретатора связь строки
именем осуществляется с помощью ассоциативного списка,
элементами которого являются пары (<имя>.<строка>) и
полученного с помощью функции CONS. (Имена пустых строк
заносить в ассоциативный список не следует, так что строки с
именем Х считается пустой, если в ассоциативном списке нет пары
(Х,<строка>).
6.2 Структура интерпретатора
Основная программа выполняет действия: вводит программу
на SOL; обращается к блоку анализа и печатает сообщение о
результатах его работы при (отладке интерпретатора должна также
распечатать внутреннее представления исходной SOL-
программы) ;.при отсутствии ошибок в программе обращается к
блоку интерпретации; отпечатывает сообщение об окончании
интерпретации программы.
В блоке анализа (осуществляющем анализ исходной
программы и ее трансляцию во внутреннее представление) должны
выявляться все имеющиеся в исходной программе ошибки.
Пример
Во внутреннем представлении программа, рассмотренная
ранее, имеет вид:
27
форму списка; при отсутствии необязательных элементов - метки и перехода - в соответствующих позициях помещается символ *; списком (операторов) является и программа, причем ограничители ";" удаляется: <программа>::=(<оператор>…) <оператор>::=({<метка>| *}<правило>{<переход>| <переход>::=(S<метка>)| (F<метка>)|(<метка>)*}) Таким же образом преобразуются в списки и другие конструкции языка: <левая часть>::=<<имя>[<образец>]) <правая часть>::=({<строки>|<имя>}…) <переменная с длиной>::=(*<имя><число>) <произвольная переменная>::=(*<имя>) Строки с помощью подходящих функций переводятся в списки однолитерных атомов; при этом кавычки (первые и последние элементы полученных списков) удаляются. После указанных преобразований левая и правая части оператора приобретают вид списков, состоящих на первом уровне из атомов ("имен"строк) и списков ("строк" и "переменных"). На втором этапе работы интерпретатора связь строки именем осуществляется с помощью ассоциативного списка, элементами которого являются пары (<имя>.<строка>) и полученного с помощью функции CONS. (Имена пустых строк заносить в ассоциативный список не следует, так что строки с именем Х считается пустой, если в ассоциативном списке нет пары (Х,<строка>). 6.2 Структура интерпретатора Основная программа выполняет действия: вводит программу на SOL; обращается к блоку анализа и печатает сообщение о результатах его работы при (отладке интерпретатора должна также распечатать внутреннее представления исходной SOL- программы) ;.при отсутствии ошибок в программе обращается к блоку интерпретации; отпечатывает сообщение об окончании интерпретации программы. В блоке анализа (осуществляющем анализ исходной программы и ее трансляцию во внутреннее представление) должны выявляться все имеющиеся в исходной программе ошибки. Пример Во внутреннем представлении программа, рассмотренная ранее, имеет вид: 27