pyparsing에서 Forward()
요소를 이해하려고합니다. 나는이 간단한 BNF가 있다고 가정 :재귀 적 쓰기 Parsarsing을 사용하는 파서
identifier =
"a..z,$,_" < "a..z,$,_,0..9" >
package_name =
identifier
/(package_name "." identifier)
와 난 그냥 java
결과 또는 전혀 재귀에서 반환하거나 얻을 java.lang.String
같은 간단한 패키지를 구문 분석하려고합니다.
from pyparsing import alphas,alphanums, Word, Forward, ZeroOrMore, Group, Literal
identifier=Word(alphas+"$_",alphanums+"$_")
dot=Literal(".")
package_name = Forward()
definition = package_name+dot+identifier
package_name << Group(identifier+ZeroOrMore(definition))
package_name.parseString("java.lang.String")
from pyparsing import alphas,alphanums, Word, Forward, ZeroOrMore, Group, Literal
identifier=Word(alphas+"$_",alphanums+"$_")
dot=Literal(".")
package_name = Forward()
definition = identifier^package_name+dot+identifier
package_name << definition
package_name.parseString("java.lang.String")
재귀 제한
에 도달합니다 [] [ '자바'] 인쇄하는 방법이 Forward
자리 작업을 수행합니다 나는 이런 식으로 그것을 시도?
왜'package_name = ZeroOrMore (identifier + dot) + identifier'를 쓰지 않는가? 제 생각에 당신이하고있는 일은 재발이라는 것입니다. * ZeroOrMore와 관련이 있습니다. 원래 BNF에는 ZeroOrMore가 없습니다. 그러나 모두 재귀를 피하는 것이 더 간단합니다. – BrenBarn
다른 방법으로 할 수 있다는 것을 알고 있습니다. 'delimitedList (identifier, delim = ".")'와 비슷하지만'Forward' 재귀 ParserElement를 이해하고 싶습니다. 'package_name << definition'조차도 작동하지 않습니다. –