lang:vasic:scanner
Table of Contents
Лексический анализатор языка Васик
Анализатор написан на языке Ди. Исходные тексты последней версии можно посмотреть здесь.
Класс scanner_t
Класс scanner_t реализует последовательное чтение входного файла и преобразование его в поток лексем типа lexeme_t.
Атрибуты и методы | Описание |
---|---|
scanner_t (string filename) | Конструктор, открывает указанный файл на чтение. |
void forward () | Метод, читает следующую лексему и устанавливает атрибут token. |
lexeme_t token | Атрибут, содержит последнюю прочитанную лексему. При достижении конца файла равен null. |
string filename | Атрибут, содержит имя обрабатываемого файла. |
Пример использования класса scanner_t:
scanner_t scanner = new scanner_t ("program.vasic"); for (;;) { scanner.forward (); if (! scanner.token) break; if (scanner.token.type < 0) { writefln ("%s:%d:%d: %s", scanner.filename, scanner.token.line, scanner.token.column, scanner.token.source); break; } scanner.token.print (0); }
Класс lexeme_t
Атрибуты и методы | Описание |
---|---|
int type | Целое число, обозначающее тип лексемы. |
int line, column | Номера строки и колонки, задающие позицию лексемы. |
string source | Строка, содержащая исходный текст лексемы. |
string text | Строка, содержащая имя (строчными буквами) для идентификатора или метки, а также значение для строки-литерала. |
double number | Значение для числа-литерала. |
void print () | Метод, печатает содержимое лексемы (на стандаартный вывод). |
Коды типа лексемы:
-1 | Неопознанная лексема, текст ошибки находится в source |
LEX_NUMBER | Число-литерал, значение находится в number |
LEX_STRING | Строка-литерал, значение находится в text |
LEX_NAME | Идентификатор, имя (строчными буквами) находится в text |
LEX_LABEL | Метка, имя (строчными буквами) находится в text |
LEX_LE | <= |
LEX_GE | >= |
LEX_NEQ | <> |
Символы +, - и т.д. | Символы операций и прочие |
lang/vasic/scanner.txt · Last modified: 2015/08/26 19:39 by 127.0.0.1