Обязанности токенайзера
От: korzhik Россия  
Дата: 10.08.04 10:18
Оценка:
Здравствуйте,

в программе читается текстовый файл простого формата.
В нём есть два вида лексем:
1. команды
2. аргументы команд

Есть два класса:
1. tokenizer — разбивает строки на лексемы
2. parser — парсит команды

у меня есть функция is_command(), которая определяет является ли лексема коммандой
вот я и думаю куда эту функцию правильнее поместить в токенайзер или парсер?
Re: Обязанности токенайзера
От: A_Gura Россия http://a-gura.livejournal.com
Дата: 10.08.04 10:58
Оценка: 6 (1)
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте,


K>в программе читается текстовый файл простого формата.

K>В нём есть два вида лексем:
K>1. команды
K>2. аргументы команд

K>Есть два класса:

K>1. tokenizer — разбивает строки на лексемы
K>2. parser — парсит команды

K>у меня есть функция is_command(), которая определяет является ли лексема коммандой

K>вот я и думаю куда эту функцию правильнее поместить в токенайзер или парсер?

Если работа с tokenizer'ом происходит последовательно, то было бы лучше иметь метод, который возвращает тип лексемы на каждом шаге
(что-нибудь типа getTokenType()). В данном случае неудачная идея делать команды типа isCommand(), т.к. могут появиться иные типы токенов, и на каждый придется делать по методу.

Если не последовательно, то это уже наверное и не tokenizer получается, а парсер .
В общем при таком подходе, я бы сделал некоторое представление (класс), которое по команде getCommands() возвращало бы коллекцию команд.
А у каждой команды сделал бы метод getParameters().
... << RSDN@Home 1.1.3 stable >>
Работать надо над собой...
Re[2]: Обязанности токенайзера
От: korzhik Россия  
Дата: 10.08.04 11:07
Оценка:
Здравствуйте, A_Gura, Вы писали:

A_G>Если работа с tokenizer'ом происходит последовательно, то было бы лучше иметь метод, который возвращает тип лексемы на каждом шаге

A_G>(что-нибудь типа getTokenType()). В данном случае неудачная идея делать команды типа isCommand(), т.к. могут появиться иные типы токенов, и на каждый придется делать по методу.

это правильно. так и сделаю

A_G>Если не последовательно, то это уже наверное и не tokenizer получается, а парсер .

A_G>В общем при таком подходе, я бы сделал некоторое представление (класс), которое по команде getCommands() возвращало бы коллекцию команд.
A_G>А у каждой команды сделал бы метод getParameters().
то есть получается типа DOM?
не мне это не подходит
Re: Обязанности токенайзера
От: V.Petrovski Беларусь  
Дата: 10.08.04 11:28
Оценка: 21 (1)
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте,


K>в программе читается текстовый файл простого формата.

K>В нём есть два вида лексем:
K>1. команды
K>2. аргументы команд

Уж больно высокоуровневые получились лесемы.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[2]: Обязанности токенайзера
От: korzhik Россия  
Дата: 10.08.04 11:40
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Здравствуйте, korzhik, Вы писали:


K>>Здравствуйте,


K>>в программе читается текстовый файл простого формата.

K>>В нём есть два вида лексем:
K>>1. команды
K>>2. аргументы команд

VP>Уж больно высокоуровневые получились лесемы.


поясните пожалуйста, я не понял
Re[3]: Обязанности токенайзера
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 11.08.04 09:18
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, V.Petrovski, Вы писали:


VP>>Здравствуйте, korzhik, Вы писали:


K>>>Здравствуйте,


K>>>в программе читается текстовый файл простого формата.

K>>>В нём есть два вида лексем:
K>>>1. команды
K>>>2. аргументы команд

VP>>Уж больно высокоуровневые получились лесемы.


K>поясните пожалуйста, я не понял


лекс. анализатор должен разбирать терминальные символы (такие как число, имя, операторные скобки),
а уж что команда, и тем более аргументы команд должен синт. анализатор
Пример (математическое выражение)
cos(1), последовательность лексем: имя, левая скобка, число, правая скобка; на основании этих лексем
парсер решает, что это вызов функции.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.