2016-07-12 6 views
2

나는 오래 전 누군가 다른 사람이 만든 yacc 파일을 가지고 있습니다. 이 파일은 사용자 지정 언어를 설명합니다. 내 목표는 자바 응용 프로그램에서 내 사용자 지정 텍스트 영역에 대한 파서를 만들려면 해당 yacc 파일을 사용하는 것입니다. 최종 목표는 구문이 올바르지 않을 때 오류를 표시하는 것입니다. 현재 (내가 구현 한 yacc 파일이 아닌) 강조 표시를 처리하는 RSyntaxTextArea를 사용하고 있지만 가능한 모든 오류를 감지 할 수있는 파서를 만드는 것이 훨씬 어렵습니다. 어떻게 든 내 자바 응용 프로그램에서 내가 직접 가지고 yacc에 파일을 사용할 수 있다면yacc 파일을 사용하여 Java의 텍스트 영역에서 구문 오류를 감지합니다.

  1. 최선의 시나리오는 다음과 같습니다

    내가 볼때

    나는 세 가지 옵션이 있습니다.

  2. 두 번째로 좋은 경우는 Java에서 쉽게 사용할 수있는 형식으로 yacc 파일을 구문 분석 할 수있는 방법이 될 것입니다. 필자는 yacc 파일에서 Java 클래스를 생성하는 BYACC/J를 찾았지만 구문 오류 (누락 된 함수, 변수 등)로 가득 차서 너무 잘 풀리지 않았습니다.

  3. 세 번째 옵션은 YACC와 자바에서 사용할 수있는 또 다른 파서 생성기를 배우고 그 모든 것을 다시 작성하는 것입니다. 새로운 것을 배우는 것은 결코 나쁜 일이 아닙니다. 그러나 시간이 끝나지 않고 "컴파일러 컴파일러"가 다소 가파른 학습 곡선을 가진 것처럼 보이기 때문에 YACC를 사용할 방법이 없다면 시간을 투자하고 싶을 것입니다. 정의를 직접. JavaCC, Jacc, CUP, ANTLR4 및 기타 다른 많은 잠재 옵션이 있음을 발견 했으므로 가능한 한 yacc에 가깝게 구현 시간을 줄이기 위해 하나를 선택하고 싶습니다. . 도움이 될 것입니다.

답변

0

들소 can generate Java parsers (이하 "yacc를 호환"파서 생성기는 가장 일반적으로 실수 "yacc에"이라고도 함). 그렇게 말하면서, 나는 결코 그것을 시도하지 못 했으므로 어떤 문제에 빠질 지 전혀 모른다.

"yacc"문법은 대상 언어의 의미 규칙을 포함합니다. 기존 문법이있는 경우 의미 규칙이 C로 작성됩니다. Yacc 문법은 스캐너의 존재 여부에 따라 달라지며 스캐너는 흔히 flex (또는 Java의 경우 JFlex, 매우 비슷한 방식으로 작동합니다)으로 생성됩니다.

동일한 문법 구문을 사용하는 Java 기반 솔루션을 사용하려면 기존 yacc 문법의 모든 의미 작업을 다시 작성하고 함께 제공되는 스캐너를 다시 작성해야합니다. BYacc/J의 경우도 마찬가지입니다. 당신은 단지 파서 생성기에 C-targetted yacc 문법 파일을 제공 할 수없고 작동하는 자바 파서를 얻을 것으로 기대한다.

그래서 yacc/bison/flex가 어떻게 작동하는지 알아야합니다.

참고 : Bison (및 친구들)은 구문 상 올바른 프로그램을 구문 분석하도록 설계되었습니다. 분명히 구문 오류를 감지 할 수 있지만 구문 오류를 복구하여 구문 분석을 계속하는 것은 훨씬 까다 롭습니다. 구문 하이라이팅의 경우 가능한 한 여러 가지 오류를 감지 할 수 있어야합니다. 따라서 기존의 yacc 문법은 시작일뿐입니다.