Занятие 3 по курсу МПК — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Комплект для разработки парсеров и сканеров)
Строка 3: Строка 3:
 
*GPPG - генератор парсеров (синтаксических анализаторов)
 
*GPPG - генератор парсеров (синтаксических анализаторов)
  
===Комплект для разработки парсеров и сканеров===
+
===Комплект GPLex+GPPG для разработки парсеров и сканеров===
 
Комплект для практического занятия [http://pascalabc.net/downloads/CompilerConstruction/GPPG_Pack.zip скачиваем отсюда]. Состав:
 
Комплект для практического занятия [http://pascalabc.net/downloads/CompilerConstruction/GPPG_Pack.zip скачиваем отсюда]. Состав:
 
*LexProjects.sln - файл решения, содержащее проект Lex1.csproj
 
*LexProjects.sln - файл решения, содержащее проект Lex1.csproj

Версия 12:10, 4 апреля 2011

  • GPLex - генератор сканеров (лексических анализаторов)
  • GPPG - генератор парсеров (синтаксических анализаторов)

Комплект GPLex+GPPG для разработки парсеров и сканеров

Комплект для практического занятия скачиваем отсюда. Состав:

  • LexProjects.sln - файл решения, содержащее проект Lex1.csproj
  • Lex1.csproj - файл демонстрационного проекта для GPLex
  • gplex.exe - исполняемый файл генератора сканеров
  • gppg.exe - исполняемый файл генератора парсеров (он нам понадобится на следующем занятии)
  • ShiftReduceParser.dll - внешняя сборка, необходимая для работы сгенерированного компилятора
  • gplexx.frame - файл, включаемый в генерируемый файл лексического анализатора
  • mymain.cs - основная программа, содержащая создание сканера и сканирование всех лексем в файле
  • my.lex - файл, содержащий правила для генерации лексического анализатора
  • a.txt - файл программы, подаваемой на вход сгенерированному лексеру

Компиляция проекта

  • Выполняем команду gplex.exe /noparser my.lex
При этом генерируется файл my.cs, содержащий код лексера. Ключ /noparser означает, что генерируется лексер без парсера.
  • Открываем и компилируем .sln

Формат .lex-файла

Определения
%%
Правила
%%
Пользовательский код

Пользовательский код содержит описания полей и методов, включаемых в генерируемый класс Scanner.

Класс Scanner

  • Основной метод - int yylex() - возвращает номер следующей лексемы (токена)
  • Свойства
string yytext - текст лексемы
int yyline - номер строки лексемы
int yycol - номер столбца лексемы
int yyleng - длина лексемы

Задание

  1. Откомпилировать лексический анализатор и запустить его для файла a.txt
  2. Сделать имя файла, обрабатываемого лексическим анализатором, параметром командной строки
  3. Подсчитать количество, среднюю, минимальную и максимальную длину всех идентификаторов
  4. Найти сумму всех целых и сумму всех вещественных в файле
  5. Дана программа, в которой встречаются ключевые слова begin end. Определить, правильно ли они расставлены
  6. По данному тексту слов составить таблицу
слово   список его вхождений в текст в формате (строка,столбец), (строка,столбец)