Анализ конфигурационного файла с помощью пиража

Я пытаюсь использовать pyparsing для анализа файла конфигурации следующей формы

x = "/user/test"
y = 3

Вот мой фрагмент кода

ParserElement.defaultWhitespaceChars = (" \t")
END = StringEnd()
NL = LineEnd().suppress()
assignment = Literal('=')
key_str = CharsNotIn("=")
value_str = Group(~assignment + restOfLine)
line = Group(key_str + assignment + value_str)
lines = ZeroOrMore(line)
lines.ignore(NL)
text = """
y = 3
x = 2
"""

Результат, который я получаю от parseFile, говорит мне, что он анализирует только первую строку. Может ли кто-нибудь помочь мне узнать, что я делаю неправильно?

1 ответ

Похоже, вы на правильном пути. Может быть, вы делаете что-то не так, когда акустически передаете text в грамматику. Добавление в код следующей строки

print lines.parseString(text)

Дает ожидаемый результат

[['y ', '=', [' 3']], ['x ', '=', [' 2']]]

В стороне, как правило, вы не хотите сохранять пробелы при разборе. Обычно важны жетоны. Вот как я проанализирую ваш пример:

EOL = LineEnd().suppress()
EQ = Literal("=").suppress()
val = Word(alphanums)
line = Group(val('key') + EQ + val('val') + EOL)
grammar = OneOrMore(line)
for x in grammar.parseString(text):
 print x.dump()

Выход в этом случае намного приятнее

['y', '3']
- key: y
- val: 3
['x', '2']
- key: x
- val: 2

licensed under cc by-sa 3.0 with attribution.