2012-09-07 75 views
3

我有令牌的這樣的序列:檢測可變型在pyparsing

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有很大幫助

回答

2

OK,我發現我的答案:

對於處理字符串:QuotedString

對於int和其他轉換的處理,有一個令牌def的方法setParseAction,女巫可以採取例如。 lambda s, l, t: int(s)帕拉姆女巫將做詭計