3

次のような一連のトークンがあります。

TokenName(alphanum) value(printable) value(printable, optional) value(printable, optional) Literal(';')

例:

Token1 "stringValue with escaped data eg: \" in it";
Token2 12;
Token3 0xaaaa; // and hex string indicated by 0x
Token4 "value1" 2 0xbbcc;

私が除いた結果は次のとおりです。

[
    ['Token1', 'stringValue with escaped data eg: " in it'],
    ['Token2', 12],
    ['Token3', '0xaaaa'],
    ['Token4', ['value1', 2, '0xbbcc']],
]

今、私はこのようなものを持っています:

import pyparsing as p
non_semi = ''.join(c for c in p.printables if c != ';')
semi = p.Literal(';').suppress()

single_value = p.Word(non_semi) + semi
multi_value = p.Group(
    p.Word(non_semi) +
    p.Word(non_semi) +
    p.Optional(p.Word(non_semi)) +
    semi
)

value = single_value | multi_value
assignment = p.Group(p.Word(p.alphanum) + value)

bnf = p.Group(p.OneOrMore(assignment))
bnf.ignore(p.cStyleComment)

しかし、このコードは変更12されず、文字列内の文字int(12)も取得"します。pyparsing はこの値の変換を処理できますか?

編集

わかりました、文字列の扱い方を知っています: QuotedStringは大いに役立ちます

4

1 に答える 1

2

OK、答えが見つかりました:

文字列を扱う場合: QuotedString

int およびその他の変換の処理についてはsetParseAction、トークン def のメソッドがあり、魔女が取ることができます。lambda s, l, t: int(s)param witchはトリックを行います

于 2012-09-07T13:56:48.383 に答える