첫째, 트리에 대한 올바른 읽기 순서 무엇이 확실하지 않다 - 나는 비교 (그것이 일반적으로 거의 모든 함께있는 순서, 원인의 가정 the Wikipedia article on tree traversals) 그러나 나는 그것이 맞다는 것을 절대적으로 확신하지 않는다.. (이것이 틀린 경우 다른 나무가 필요하지만 아이디어는 번역해야합니다.)
예제 트리는 xxyy
을 나타냅니다. 추가로 S
- A
- S
- A
- ... 체인을 가장 하단의 ε
으로 대체하면 xx…yy
의 임의 체인이 생성됩니다.
xy…xy
을 표현하기 위해, 당신은 xSy
또는 ySx
에 A
들과 B
의 확대 대체 것, 즉 : S → SAB
, 다음 B → ε
및 A → xSy
; 다음 계층에서 S → SAB
을 다시 확장하십시오. 대신 이제 A → ε
및 B -> ySx
을 수행하십시오. 필요한 경우 계속하십시오. 예 :
S
/|\
/| \
S A B
//|\ \
ε/| \ ε
x S y
/|\
/| \
S A B
// /|\
ε ε/| \
y S x
|
ε
이 xyxy
일치해야하고, 다시 긴 시퀀스 하단에 확장 할 수 있습니다.
공간 절약을 위해 구문 분석 트리의 루트에서 "척추"라는 가장 긴 경로를 호출합니다. (여기에있는 간단한 예제의 경우 모든 "척추"경로는 편리하게 끝 기호입니다. 따라서 나무에 대한 설명은 고유합니다 (충분히). 일반적으로 '측면 경로'는 더 복잡하므로이 정의는 일반적으로 쓸모가 없습니다. , 잘 작동합니다.)
여기에 그려지는 나무의 경우 "척추"는 SASBSε
(가운데를 읽음)입니다. 임의의 중첩을 위해 확장되면 (SASB)*(SA)?Sε
이됩니다.
위의 그림에서 나무가 "척추"SASASε
이고 임의로 긴 시퀀스가 xxx…yyy
인 경우 (SA)*Sε
이됩니다.
xxyxyy
은 동일한 방식으로 쉽게 설명됩니다. "척추"는 SASASBSε
입니다.일반적
(이 문법) "역 - 대칭"의 임의의 시퀀스 (후반전 반전 전반하고 X/Y 교환 - 즉 x|y
, xyx|yxy
, xxy|xyy
가, ...), 사용자가 구성 할 수있다 첫 번째 절반을 가져다가 x → SA
, y → SB
을 확장하고 중간에 도달하면 Sε
을 추가하여이 '척추' (물론, xxyyyx
과 같은 복잡한 패턴의 경우 실패합니다. 이러한 비대칭 패턴에 대한 트리를 신속하게 찾아내는 방법을 찾는 것은 독자의 연습 과제로 남겨 둡니다.)
Welcome to StackExchange! 컴퓨터 과학 StackExchange http://cs.stackexchange.com/ – lucam
에서 이러한 종류의 질문을 할 수 있습니다. 어떻게 이러한 규칙을 생각해 냈습니까? 파스 트리와 무관하게 어떻게 작동하는지 설명 할 수 있습니까? – rici