저는 preg_match_all을 사용하여 간단한 파서를 만듭니다. 단 몇 문장 만 파싱하므로 성능은 중요하지 않습니다. Context free grammer를 통해 파싱하는 파서를 만들 수 있습니까?PHP preg_match_all을 사용하여 간단한 CFG 파서를 어떻게 구현할 수 있습니까?
S -> NP VP
PP -> P NP
NP -> 'the' N | N PP | 'the' N PP
VP -> V NP | V PP | V NP PP
N -> 'cat'
N -> 'dog'
N -> 'rug'
V -> 'chased'
V -> 'sat'
P -> 'in'
P -> 'on'
여기서 내가 해결할 수없는 문제는 루프입니다.
예를 들어, PP -> NP -> PP가 될 수있는 곳의 루프를 볼 수 있습니까?
이 문제를 해결할 수있는 푸시 다운 오토 마타처럼 작동하는 PHP가 있습니까?
예시 입력 '고양이 개 쫓아'
예제 출력 :
(S (NP 제 (N 고양이)) (VP (V 쫓아) (NP 제 (N 개))))
예 입력 :
출력 예 (들) :
(S (NP 제 (N 고양이)) "고양이는 깔 개 쫓아 ' (VP (S (NP 제 (N 고양이가)) 이 (VP (V가 쫓아
))() NP 제 (N 개) (PP (에 P) (NP 제 (N 양탄자를))) (V 추격)) (NP the (N 개)) (NP (N 개))))
출력이 얼마입니까? 문장이 문법에서 유효한지 아닌지, 또는 일종의 데이터 구조를 반환해야만 하는가? –
데이터 구조 반환이 필요합니다. – user482594
주어진 입력에 대해 원하는 결과의 예를 들려 줄 수 있습니까? –