парсинг
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
парсинг - 2005-12-07 20:24:26
|
|
|
буржуазия
Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
|
Леди и джельтльмены, кто сталкивался с этим скиньте примерчики плз, или сайты с примерамиалгоритмом, хачу познать парсер :)
|
|
|
парсинг - 2005-12-07 20:25:16
|
|
|
буржуазия
Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
|
парсить мне надо для расчета выражений типа такиого: 4*5*3-2*(3+4/5)/10*100*х , то бишь пользователь может ввести любое выражение :)
|
|
|
парсинг - 2005-12-08 19:34:50
|
|
|
буржуазия
Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
|
Нда….Я думал тут конкретные пацаны собрались…. Ну что ж,придётся умереть и не узнав о этой штуке…=)
|
|
|
парсинг - 2005-12-08 21:03:30
|
|
|
Lex_Voodoo
Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
|
Вообще, никогда с этим не сталкивался, но помойму тут и думать нечего 1. Есть набор разрешенных символов. Проверяем все выражение на валидность 2. В порядке приоритета операций ищем выражения удовлетворяющие соответствующему regexp'у, например в твоем случае скобки имеют наивысший приоритет, значит это будет что-то типа ([(]{1}[0-9,*+\()-/]+[)]){1}, соответственно в \\1, если он не NULL, имеем это выражение. 3. Далее парсим "внутрь" пока не доходим до ([0-9]+)([,*+\-/]{1})([0-9]+)Определяем для каждого \\2 заранее заданное действие и выполняем его с \\1 и \\3 4. Запихиваем все это в грамотный цикл
Вот, собственно, все. Не знаю, может спецы по информатике предложат более красивый способ, я бы написал так.
|
|
|
парсинг - 2005-12-12 14:07:47
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
надо взять препроцессор-генератор парсеров. такие есть для C/C++/Java, мож для ещё чего… И дальше написание такого парсера сведётся практически к формальной записи грамматики. А ежели интересует теория гугл://теория+трансляторов
|
|
|
|
|