2011-04-25 4 views
0

나는 ParseActions이 결과 코드 구문을 구성하려고 할 때 내 코드를 약간 어색하게 만든다고 생각합니다 (pyparsing에서 ParseResults).이 기술은 pyparsing에서 ParseResults를 생성하는 데 사용할 수 있습니까?

내가 지금하고있는 일은 Group 요소가 반환하는 일치하는 토큰 그룹을 저장하는 전역 변수를 갖는 것입니다. 그런 다음 결과를 toks 사전에 다시 삽입합니다. 이거 괜찮아 ?

내 스케치 문법 :

grammar = ZeroOrMore(Or(ExprA, ExprB, ExprC)) 

ExprA 즉, 등 ExprB 임의의 순서로 인터리브 할 수 있습니다. 하지만 한 종류의 모든 식을 ParseResults의 한 사전 항목으로 그룹화하려고합니다. 내 기술에 대해 어떻게 생각하니? 전역 변수를 사용하는 것은 좋지 않습니다. 왜냐하면 다중 스레드가 문제가되기 때문입니다. 다른 선택의 여지가 있습니까?

답변

1

setResultsName을 listAllMatches = True와 함께 사용하는 것에 대해 생각해 보셨습니까?

from pyparsing import * 

aExpr = Word("A", nums) 
bExpr = Word("B", nums) 
cExpr = Word("C", nums) 

grammar = ZeroOrMore(aExpr.setResultsName("A",listAllMatches=True) | 
        bExpr.setResultsName("B",listAllMatches=True) | 
        cExpr.setResultsName("C",listAllMatches=True)) 


results = grammar.parseString("A1 B1 A2 C1 B2 A3") 
print results.dump() 

인쇄 :

['A1', 'B1', 'A2', 'C1', 'B2', 'A3'] 
- A: ['A1', 'A2', 'A3'] 
- B: ['B1', 'B2'] 
- C: ['C1'] 
여기 데모입니다
관련 문제