Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

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

         |
|f      |text   |Файловая переменная, содержащая текст программы       |

    Также в программе используется метка lb.
Идентификаторы в языке Pascal  –  это  имена  констант,  переменных,  меток,
типов, процедур, функций и полей в записях.  Идентификаторы  могут  состоять
максимум из 63 символов. Идентификатор всегда начинается буквой, за  которой
могут следовать буквы и цифры,  а  также  символ  подчеркивания.  Пробелы  и
специальные символы алфавита не могут входить в идентификатор.
    Специальные символы:
    + - * / = ' . : ; < > [ ] ( ) { } ^ @ $ # ! ~ %
    К специальным символам относятся также следующие пары символов:
    <> <= >= := (* *) (. .)

    Вначале  программы  указателю  Fst  присваивается  значение  nil.  Этот
указатель,  содержит  адрес  первого  элемента  списка  L,   который   будет
содержать все имена  идентификаторов  программы,  а  также  число  вхождений
идентификаторов в программе.
    Далее программа печатает на  экран  строку  "File  >:  ".  После  этого
требуется ввести путь к файлу, содержащего текст  программы,  и  его  имя  и
нажать клавишу "Enter". Этот путь и имя файла считываются в  переменную  st.
Далее файловая переменная f  связывается  с  именем  файла,  содержащимся  в
переменной st, в результате обращения к стандартной процедуре ASSIGN.  Далее
программа инициирует файл для чтения с помощью стандартной процедуры  RESET.
При выполнении  этой  процедуры  дисковый  файл  подготавливается  к  чтению
информации. В результате специальная переменная-указатель, связанная с  этим
файлом, f будет указывать на начало файла, т. е. на компонент  с  порядковым
номером 0. После этого переменной st присваиваем пустую строку.
    Далее организуется цикл с помощью операторов REPEAT  и  UNTIL,  который
выполняется до тех пор  пока  переменная  типа  char  сh  не  станет  равной
символу EOF (код #26). В этом цикле программа  будет  считывать  символы  из
текстового файла и записывать их в переменную  ch.  Если  перед  выполнением
чтения указатель файла достигнет  конца  очередной  строки,  то  результатом
чтения будет символ CR (код #13), а если достигнут конец файла, то –  символ
EOF (код #26). В результате работы этого цикла  весь  текстовый  файл  будет
считан и сформирован список идентификаторов, а также число  их  вхождений  в
тексте программы на языке Pascal.
    Вначале цикла указатель L, который имеет адрес  произвольного  элемента
списка L, принимает значение указателя  Fst.  Затем  переменным  а  (признак
конца слова) и b (Признак наличия текущего слова в списке  L)  присваивается
значение false. Далее с  помощью  стандартной  процедуры  READ  из  файловой
переменной f считывается символ, на который  указывает  указатель  файла,  в
переменную ch. В первом цикле это будет первый символ текстового файла.  При
помощи  стандартной  процедуры  UPCASE  программа  из  преобразует   символы
латинского алфавита от "а" до "z" в прописные буквы. Если же  это  прописная
буква или любой другой символ, то  в  результате  преобразования  ничего  не
изменится.
    Далее программа исключает слова, которые стоят между  двумя  одинарными
кавычками. Чаще всего это текст, который печатается  стандартной  процедурой
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, адрес которой содержится
1234
скачать работу

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

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ