답변

1

BNF가 이미 CNF에 있다는 원래의 대답은 잘못되었습니다. here (PDF)에 설명 된대로 컨텍스트없는 문법을 CNF로 변환 할 수 있습니다. 변환 과정은 Sipser 두 번째에 나와 있습니다. 106-109 페이지에 액세스 할 수 있습니다. 이 프로세스를 자동화하는 기존 소프트웨어가 있는지는 알 수 없습니다 (단, 쓰기 쉽다).

+0

죄송하지만 잘못된 것입니다. BNF는 일반 CFG의 표기법이므로 "모든 CFG는 촘스키 정규형에 있음"이라고 말하는 것과 같습니다. 여기서 핵심은 Chomsky Normal Form이 모든 비 터미널 제작물에 RHS에 단 두 개의 비 터미널이 있어야한다는 것입니다. – arnsholt

+0

나는 고쳐졌다. 나는 다음을 읽는다 : "촘스키 정규형의 모든 문법은 문맥 자유이며, 반대로 모든 문맥 자유 문법은 촘스키 정규형과 동등한 것으로 효율적으로 변형 될 수있다." 잘못된 결론에 도달했습니다. –

3

글쎄, 촘스키 노멀 양식과 배 커스 - 나 우어 양식은 실제로 같은 종류의 개념이 아니기 때문에 그렇게 생각하지 않습니다. 그러나 당신이 우리에게 도움이 될 수 있도록이 소프트웨어가 필요한 것을 말하면됩니다.

이제부터 물어 보니, Chomsky Normal Form에 BNF 문법을 정규화하는 코드가 필요하다고 가정합니다. 내가 아는 한, 그러한 소프트웨어는 존재하지 않지만 실제로는 계산 상 가능하다고 가정 할 때 일부 존재할 수 있습니다.

그러나 실제로 필요한 것이 무엇인지 구체적으로 설명하면 해당 작업에 대한 유용한 조언을 드릴 수 있습니다.

편집 : 내 책에서 조금 파기 한 후, 임의의 CFG를 Chomsky Normal Form으로 변환하는 알고리즘을 공식화하는 것이 가능하다는 것이 밝혀졌습니다. 나는 실제 알고리즘이나 그 복잡성을 가지고 있지 않다.

+0

당신의 수정안 (편집)에 Wikipedia 링크에서 읽은 것보다 CNF가 BNF의 제한적인 사례라고 생각합니다. 모든 CNF 문법은 BNF에 있습니다. BNF에서 임의의 CFG를 CNF로 변환하는 것은 아마도 매우 간단하지는 않지만 (도입 된 많은 비 터미널), 가능할 것 같다. –

+2

일종. CNF는 CFG에 대한 제한이며 BNF는 CFG를 인코딩하는 방법입니다 (N은 Normal가 아닌 Naur입니다). 그러나 CFG를 인코딩하는 다른 방법이 있습니다 (예 : Wikipedia 기사의 화살표 표기법). BNF (및 그 자손)는 컴퓨팅에서이를 수행하는 가장 일반적인 방법입니다. – arnsholt

+0

http://qntm.org/chomsky는 CFG에서 CNF 로의 변환 (PHP에서)을 구현합니다. –

1

JFLAP 당신이 찾고있는 것을 할 수 있습니다.

저는 아직 사용하지 않았지만 오토마타 교수가 추천 한 제품입니다.

"JFLAP이란 무엇인가?" 페이지에서 "CFG -> CNF"로 변환 할 수있는 것처럼 보입니다.

+0

마지막으로 JFLAP을 사용했을 때 DFS 트리를 그릴 때 편리합니다. – Woot4Moo