2013-03-08 3 views
1

У меня есть простой pyparsing грамматику, которая соответствует чисел, разделенных пробелами:pyparsing: как получить местонахождение маркера?

from pyparsing import * 
NUMBER = Word(nums) 
STATEMENT = ZeroOrMore(NUMBER) 
print(STATEMENT.parseString("1 2 34")) 

Данный 1 2 34 тестовую строку она возвращает 3 строки, которые анализируемые маркеры. Но как найти расположение каждого токена в исходной строке? Мне нужно это для подсветки синтаксиса «своего рода».

ответ

2

Добавить парсинга действие на номер:

NUMBER.setParseAction(lambda locn,tokens: (locn,tokens[0])) 

Разбор действия могут быть переданы маркеры, которые были разобранные для данного выражения, расположение в разборе, и исходная строка. Вы можете передать функции setParseAction с любым из этих подписей:

fn() 
fn(tokens) 
fn(locn,tokens) 
fn(srctring,locn,tokens) 

Для ваших потребностей, все, что вам нужно, это место и проанализированные маркеры.

После добавления этого разбора действий, ваши результаты разбора выглядеть так:

[(0, '1'), (2, '2'), (4, '34')] 
Смежные вопросы