Ada_Ru форум

Обсуждение языка Ада

Ada&XML: Сканер и парсер

Оставить новое сообщение

Сообщения

Vadim Godunko
Ada&XML: Сканер и парсер
2006-02-20 13:51:52

Добрый день!

 

Если отвлечься от войны за тип данных символов, то у меня получается следующая архитектура:

 

1. Поставшик даных (поток) - последовательно поставляет данные.

 

2. Сканер потока - производит выделение отдельных лексем из потока. Сканер содержит механизм управления - распознавание тех или иных лексем может отключаться.

 

3. Парсер - управляет сканером и полученный поток лексем преобразует во внешнее API (SAX/STAX/...).

 

Сканер - самый "сложный" компонент. Он состоит из подкомпонентов:

 

1. Буффер ввода - отвечает за хранение загруженной информации до тех пор, пока она требуется сканеру или парсеру.

 

2. Детектор семейства кодировок - делает попытку обнаружения семейства кодировок по данным в буфре сканера и создаёт помошник обработки семейства кодировок.

 

3. Помощник обработки семейства кодировок - осуществляет выделение из буфера интересующих сканер данных. Поскольку реальное преобразование данных осуществляется только по необходимости, в большей части он просто просматривает буфер ввода на наличие интересных сканеру кодовых комбинаций.

 

Детекторы будут следующие:

 

1. UCS-4

2. UTF-16

3. EBCDIC

4. ASCII

 

Помошники:

 

1. UCS-4 BE

2. UCS-4 LE

3. UTF-16 BE

4. UTF-16 LE

5. EBCDIC

6. UTF-8

7. ASCII code set (ISO-8859-x, CP-x)

8..N. различные multibyte

 

PS. И вопрос: У кого-то есть полный список всех подлежащих выделению лексемм?

 

PS. И остаётся открытым вопрос API взаимодействия между сканером и парсером. В частности, как "таскать" текстовую информацию. Может просто как сырой поток данных, накопленный в буфере?

 

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

On Mon, Feb 20, 2006 at 04:51:52PM +0300, Vadim Godunko wrote:

Добрый день!

 

Если отвлечься от войны за тип данных символов, то у меня получается следующая архитектура:

 

[skip]

 

Очень похоже на то что у меня. Но, у меня нет детекторов

(я не делал UTF-16/32, EBCDIC) и буфер у меня конечной длинны.

Если он переполняется, то затираемые данные сохраняются в

лексемах в Unbounded_[Wide_]String.

 

 

PS. И вопрос: У кого-то есть полный список всех подлежащих выделению лексемм?

 

Мне хватило сл. лексем

xml_io-internals.ads: type Token is ...

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

 

PS. И остаётся открытым вопрос API взаимодействия между сканером и парсером. В частности, как "таскать" текстовую информацию. Может просто как сырой поток данных, накопленный в буфере?

 

 

У меня если данные еще в буфере, то они возвращаются как

Buffer [X .. Y], а если уже нет, то

Unbounded_String.To_String (Token.Value)

 

Буфер у меня хранит сырые данные если это String версия и

перекодированные в Unicode если это Wide_String версия.

 

 

--

Vadim Godunko

 

 

--

Maxim Reznik

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти