Задача A. Вирт

Автор:А. Ким   Ограничение времени:1 сек
Входной файл:input.txt   Ограничение памяти:256 Мб
Выходной файл:output.txt  
Максимальный балл:8  

Условие

Лексемы языка программирования Вирт задаются следующим набором регулярных выражений (для экранирования метасимволов использован символ '\', например регулярное выражение - '\*\)' задает последовательность символов '*)'):

Цифра, буква, символ и экспонента являются вспомогательными символами и не являются лексемами языка.

Помимо лексем выводимых из этих правил в лексику языка также входят ключевые слова, знаки операций и разделители, списки которых представлены ниже:

Требуется написать программу, которая будет распознавать лексемы данного языка.

Программа должна пытаться составить текущую лексему из как можно большего числа символов, например в строке '....' следует сначала распознать '..', а затем '.'.

В процессе распознавания может встретиться одна из следующих ошибок.

Код ошибки  — описание ошибки:

Формат входного файла

Входной файл содержит N строк ASCII символов.

Формат выходного файла

Для каждой лексемы, за исключением пробельных символов и комментариев, в порядке их появления во входном файле, выведите сообщение в формате 'Номер строки\tНомер столбца\tТип лексемы\tЛексема'

Номер строки/столбца - позиция первого символа лексемы во входном файле. Нумерация строк и столбцов начинается с 1. Символ табуляции переводит курсор в ближайшую следующую позицию с номером P: P = 4n + 1

Для "значимых" типов лексем выведите \tЗначение в формате, описанном ниже.

Тип лексемы и формат вывода Значения:

Сообщения для каждой лексемы выводить на новой строке.

В случае обнаружения ошибки выведите сообщение в формате 'Номер строки\tНомер столбца\tКод ошибки' и завершите работу программы (выводить успешно распознанные лексемы до встречи ошибки нужно)

Для ошибок типа BadNL, Номер строки равен номеру строки, на которой началась строка.

Ошибка типа BadCC, должна возникнуть после считывания всего кода символа.

Ограничения

1 ≤ N ≤ 1000

Примеры тестов

Входной файл (input.txt) Выходной файл (output.txt)
1
42 + 14.88
1	1	integer	42	42
1	4	op	+
1	6	real	14.88	1.4880E+01
2
'new line in str
'
1	17	BadNL

0.094s 0.018s 13