GPLex + GPPG: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) |
Mikst (обсуждение | вклад) |
||
Строка 19: | Строка 19: | ||
:При этом генерируется файл my.cs, содержащий код лексера. Ключ /noparser означает, что генерируется лексер без парсера. | :При этом генерируется файл my.cs, содержащий код лексера. Ключ /noparser означает, что генерируется лексер без парсера. | ||
*Открываем и компилируем .sln | *Открываем и компилируем .sln | ||
===Формат .lex-файла=== | |||
Определения | |||
%% | |||
Правила | |||
%% | |||
Пользовательский код | |||
Пользовательский код содержит описания полей и методов, включаемых в генерируемый класс Scanner. | |||
===Класс Scanner=== | |||
* Основной метод - int yylex() - возвращает номер следующей лексемы (токена) | |||
* Свойства | |||
string yytext - текст лексемы | |||
int yyline - номер строки лексемы | |||
int yycol - номер столбца лексемы | |||
int yyleng - длина лексемы |
Версия от 21:32, 8 марта 2010
Практическое занятие 1
- 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 - длина лексемы