RSS    

   Реферат: Программирование на языках высокого уровня

Далее программа исключает слова, которые стоят между двумя одинарными кавычками. Чаще всего это текст, который печатается стандартной процедурой WRITE. Проверяется условие, если символ в переменной ch является символом " ' ", то тогда начинается цикл, образованный операторами REPEAT и UNTIL. В этом цикле программа считывает из файла в переменную ch символы до тех пор пока символ в переменной ch снова не будет равен символу " ' ". Далее цикл завершается, и переменная ch будет содержать символ " ' ".

Далее аналогичным способом программа исключает комментарии, встречающиеся в тексте программы, т. е. текст стоящий между двумя фигурными скобками. Проверяется условие, если символ в переменной ch является символом " { ", то тогда начинается цикл, образованный операторами REPEAT и UNTIL. В этом цикле программа считывает из файла в переменную ch символы до тех пор пока символ в переменной ch не станет равен символу " } ". Далее цикл завершается, и переменная ch будет содержать символ " } ".

Далее программа производит проверку символа в переменной ch и если он равен одному из символов: " ", '!', " ' ", "#", "$", "%", "&", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "@", "[", "], "\", "^", "`", "|", "~", "(", ")", код символа #10, код символа #13, "}", то это означает что слово в тексте, если оно было перед этими символами закончилось. И переменной a (признак конца слова) присваивается значение true. Если же символ в переменной ch не равен ни одному из этих символов, это означает, что это значащий символ, то переменная a останется равной false, и программа добавит этот символ в переменную st, содержащую текущее сформированное программой слово. Слово это будет содержаться в переменной строкового типа st. И если а будет равно true, то тогда начнется проверка этого слова. Если это окажется идентификатором, то оно запишется в список L, а если оно уже есть в списке, то тогда число вхождений этого слова в программе, которое содержится в этом же списке, увеличится на 1.

Если а равно true, то начинается блок программы, проверяющий текущее значение слова в переменной st.

1) Если переменная st содержит слово "BEGIN", то тогда переменным c (признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) присваивается значение false, e (признак считывания раздела программы, после встречи слова LABEL) присваивается значение false.

2) Если переменная st содержит одно из слов: "TYPE", "VAR", "CONST", "PROCEDURE", "FUNCTION", то тогда переменным c (признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) присваивается значение true, e (признак считывания раздела программы, после встречи слова LABEL) присваивается значение false, и переменной st присваивается пустая строка, т. к. она содержала одно из слов "TYPE", "VAR", "CONST", "PROCEDURE", "FUNCTION", а они не являются идентификаторами.

3) Если переменная st содержит слово "LABEL", то тогда переменным c (признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) присваивается значение false, e (признак считывания раздела программы, после встречи слова LABEL) присваивается значение true, и переменной st присваивается пустая строка, т. к. она содержала слово "LABEL", а оно не являетя идентификатором.

4) Если переменная st содержит одно из слов: "AND", "XOR", "NOT", "OR", "DIV", "MOD", "SHL", "SHR", "NIL", "OBJECT", "ARRAY", "FILE", "OF", "RECORD", "SET", "BYTE", "SHORTINT", "WORD", "INTEGER", "LONGINT", "STRING", "BOOLEAN", "REAL", "DOUBLE", "EXTENDED", "COMP", "CHAR", "END", "TEXT", то переменной st присваивается пустая строка, т. к. она содержала одно из этих слов, а оно не является идентификатором.

5) Если переменные с (признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) равно true, e (признак считывания раздела программы, после встречи слова LABEL) равно false, что соответствует разделу описательной части программы, и не разделу описания меток, и первый символ в строке равен цифре, то тогда переменной st присваивается пустая строка, т. к. она содержит слово, находящееся в описательной части программы и начинающееся с цифры, т. е. цифру. А цифры в описательной части программы, если они не являются метками, то и не являются идентификаторами.

6) Если переменные с (признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) равно false, e (признак считывания раздела программы, после встречи слова LABEL) равно false, что соответствует разделу программы стоящей между словами BEGIN и END, и первый символ в строке равен цифре, а текущее значение переменной ch не равно символу " : ", то тогда переменной st присваивается пустая строка, т. к. она содержит слово, находящееся в части программы, стоящей между словами BEGIN END, и начинающееся с цифры, т. е. цифру. А цифры в части программы, стоящей между словами BEGIN END, после которых не стоит символ " : " не являются метками и не являются идентификаторами.

7) С помощью оператора WHILE образуется цикл: в то время как указатель L не равен значению nil, то есть список L уже содержит какие-то слова из текста программы и число вхождений каждого из этих слов, и переменная st не равна пустой строке проверяется условие. Если значение в поле s динамической переменной структуры Recspisok, адрес которой содержится в указателе L равно слову содержащемуся в переменной st, то выполняется следующие действия. Значению в поле k динамической переменной структуры Recspisok, адрес которой содержится в указателе L увеличивается на единицу (k – тип word). Значению переменной st присваивается значение пустой строки, переменной b (признак наличия текущего слова в списке L) присваивается значение true. Указатель L принимает значение ссылки содержащейся в данном элементе списка, на который указывает указатель L. Иначе указатель L принимает значение ссылки содержащейся в данном элементе списка, на который указывает указатель L. И таким образом проверяется следующий элемент списка L и т. д. весь список L, на содержание текущего слова в списке. Если оно уже существует в списке L, то число вхождений этого слова в тексте программы увеличивается на 1, если оно не содержится в списке, то тогда будет выполнятся следующая часть программы, образованная операторами IF и THEN. И это слово включается в список L.

8) Проверяется условие: если переменная b (Признак наличия текущего слова в списке L) равна значению false, что соответствует отсутствию слова, содержащегося в переменной st в списке L, и переменная st не равна пустой строке, и переменная с (признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) равна значению true, что соответствует то выполняется следующее. Указатель L принимает значение указателя Fst, имеющего адрес первого элемента списка L. Далее с помощью стандартной процедуры NEW резервируется память в ЭВМ под динамическую переменную, адрес которой будет содержать указатель Fst. В поле s динамической переменной, адрес которой содержится в указателе Fst присваивается значение слова, содержащегося в переменной st. Количество вхождений этого слова в тексте программы, содержится в поле k динамической переменной, на которую указывает указатель Fst. В данное поле записывается значение 1. И в поле ссылки данной динамической переменной, адрес которой содержится в указателе Fst записывается значение адреса указателя L, который имел значение адреса первого элемента списка L. А далее указатель L принимает значение адреса указателя Fst. Переменной st присваивается значение пустой строки. А иначе, если условие не выполняется, то переменной st присваивается значение пустой строки.

На этом часть проверки слова заканчивается. Она начиналась с проверки значения переменной a. И если а не равно true, то тогда в конец слова, содержащегося в переменной st добавляется символ, содержащийся в переменной ch.

Далее проверяется условие: если символ в переменной ch равен коду #26, что соответствует концу файла, то происходит выход из цикла, образованного операторами REPEAT и UNTIL, если же символ не равен этому коду, то тогда программа переходит к началу этого цикла. В результате чего формируется список L, содержащий все идентификаторы программы и число их вхождений в тексте программы.

Далее формируется новый список (Est), который будет содержать эти слова в алфавитном порядке.

С помощью процедуры NEW в памяти ЭВМ резервируется место под динамическую переменную, адрес которой будет содержаться в указателе FEst (указатель, содержащий адрес первого элемента списка Est). В поле s динамической переменной, адрес которой содержится в указателе Fest присваивается значение поля s динамической переменной, адрес которой содержится в указателе L. В поле k динамической переменной, адрес которой содержится в указателе Fest присваивается значение поля k динамической переменной, адрес которой содержится в указателе L. В поле p динамической переменной, адрес которой содержится в указателе Fest присваивается значение nil.

Страницы: 1, 2, 3, 4, 5, 6


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.