2015-01-18 5 views
1

주로 언어에 대한 인터프리터 작성을 시도하고 있습니다. 파일 또는 문자열을 컴파일하고 구문 오류를 검사 할 수있는 DLL을 통해 API 만 있습니다. . 내가 원하는 것은 구문을 실제로 구문 분석하는 것입니다. 언어의 사용자 설명서 수준 (즉, 실제 문법이 없음) 사양이 있으며 필자는 필자가 작성한 문맥 자유 문법 및 lex yacc를 사용하여 불완전한 파서를 작성했습니다. 하지만 여전히 질식하고있어, 나는 거기에 규칙에 너무 많은 이상한 정규 표현식과 예외 사항을 추가하고있다. 나는 결코 그렇게 할 수 없을 것이라고 생각한다.은 타사 ANTLR 기반 인식기와 상호 작용합니다.

나는 (PE 탐색기)를 dll로 보았고 antlr3에서 생성 한 lexer-parser-recognizer (여러 인식기)와 일치하는 내보내기 항목을 발견했습니다. 필자는 dll (파이썬에서 ctypes 사용)의 함수에 대한 인터페이스를 작성했습니다. 더미 빈 문법으로 시작하여 헤더를 생성 한 다음 antlr3 * .h, LangLexer, LangParser 헤더를 파이썬에 ctypesgen으로 "컴파일"한 다음 예제를 다시 작성하여 on Stack Overflow을 찾았습니다. 나는 진보하고 있지만 문법을 알지 못하고 문법 트리를 어떻게 만들지는 모르겠다. (토큰의 이름은 알지만). 어떤 단서가 있습니까?

+0

왜 langauge 참조 문서에서 문법을 작성할 수 있습니까? (Apparantly DLL 작성자 않았다). DLL 바이너리에서 문법을 쉽게 추출 할 수 있을지는 의심 스럽습니다.이 바이너리는 사용자가 시도하기 시작한 것처럼 들립니다. 확실히 문법이없는 구문 트리를 만들 수는 없습니다. ... Matlab을위한 문법을 ​​만들려고하십니까? –

+0

나는 문법을 만들었지 만 (antlr에서는 아니지만 PLY에서) 문법을 만들었지 만 언어의 단점을 잘 다루지 못했다. (AFAIK에서 다루는 문서에서 실제로 설명조차되지 않은 것들). 다양한 역 추적, 여러 계층의 구문 분석. 외관상으로는 devs 그들 자신조차 dll를 쓰는 문제점이 있었다 (나는 몇몇 인터넷 공개 토론에 도움을 요구해 그 (것)들을 볼 수있다). 이것은 독점적 인 제품에 대한 대기업의 언어입니다. 호기심에 더 관심이 많고 전문 프로그래머가 아닙니다. – rienafairefr

+0

독점적 언어를 비롯하여 생동감있는 파서를 만듭니다. 그것들 (특히 독점적 인 것들)은 항상 그런 단점을 가지고 있습니다. 유일한 좋은 치료법은 언어 전문가가되는 것입니다. 그런 것들에 대한 꽤 좋은 추측을 할 수 있습니다. 결국 문법을 추측하고 파서를 통해 많은 코드를 실행할 수 있습니다. ANTLR이 코드를 생성하는 방법과 코드가 컴파일되는 방식을 이해하는 데 많은 노력을 기울이지 않고도 DLL의 코드에서 문법을 추출 할 것입니다. –

답변

0

글쎄, 그게 교훈이 될거야, 나는 파서에 대한 코드를 작성한 개발자를 찾았고 그에게 문법을 보냈다. 바이너리를 해체하는 것보다 소스로 이동하는 것이 더 좋은 해결책입니다.