User Tools

Site Tools


lang:vasic:scanner

Лексический анализатор языка Васик

Анализатор написан на языке Ди. Исходные тексты последней версии можно посмотреть здесь.

Класс 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 12:39 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki