2010-03-16 2 views
4

내가 다음과 같습니다 간단한 DSL 구문 분석 할 필요가 : 나는 문법 구문 분석 도구와 경험이 없기 때문에ANTLR과 같은 파서를 사용하는 것이 가장 좋습니다.

funcA Type1 a (funcB Type1 b) ReturnType c 

을, 나는 (자바) 기본 파서 자신을 작성 빠를 거라 생각 했어요.

간단한 DSL이라도 ANTLR과 같은 것을 사용하고 적절한 문법 정의를 만드는 것이 더 좋을까요?

+0

구문 분석하려는 'funcA Type1 (funcB Type1 b) ReturnType c'입니까? 아니면 당신의 언어도'2-5 * 4'와 같은 표현을 지원합니까? 그리고'Type x = y'와 같은 할당은 어떨까요? 간단히 말해서, 누군가가 당신의 질문에 적절히 대답하기 위해서는 당신의 언어에 대한 좀 더 상세한 정보가 필요합니다. –

+0

모든 언어 지원은 미리 정의 된 변수와 중첩 된 함수 호출을 통해 작동하는 미리 정의 된 함수입니다. 효과적으로, 위의 코드와 유사합니다. '3 * 2'와 같은 할당이나 기호 연산자가 없습니다. –

답변

3

간단한 답 : 문법이 설명하는 언어를 사용하는 코드를 작성하는 것보다 문법을 설명하는 규칙을 쓰는 것이 더 쉬운 경우.

구문 분석 할 필요가있는 것이 위에서 작성한 것과 정확히 일치하는 경우 수동으로 작성하면됩니다.

좀 더 일반적으로 말해서 나는 대부분 regular language을 손으로 (정규 표현식을 사용하여) 더 빨리 구문 분석 할 수 있다고 말하고 싶습니다.

많은 규칙과 제작물로 context-free language을 구문 분석하는 경우 ANTLR (또는 다른 파서 생성기)을 사용하면 훨씬 쉽게 작업을 수행 할 수 있습니다.

또한 앞으로 더 복잡해질 것으로 예상되는 간단한 언어를 사용하는 경우 ANTLR 문법에 손쉽게 코딩 된 파서로 작성하는 것보다 규칙 설명을 쉽게 추가 할 수 있습니다.

2

사용자 정의 언어를 개발하고 사용할 때 ANTLR과 같은 상용 파서 (생성기)를 사용하는 것이 좋습니다. 파서를 쓰는 것이 목표 일 때 자신의 파서를 작성하는 것이 좋습니다.

파서 작성 경험이 많고 ANTLR을 사용하는 것보다 빠르게 파서를 만들 수 없다면 말입니다. 그러나이 단락 절이 적용되지 않는다는 질문을하는 것으로 추측합니다.

4

문법은 진화하는 경향이 있습니다 (요구 사항과 동일). 가정 양조장 파서는 유지하기 어렵고 바퀴 예를 다시 발명하게됩니다. java에 빠른 파서를 작성할 수 있다고 생각한다면 lex/yacc/compiler-compiler 솔루션을 사용하는 것이 더 빠를 것입니다. 렉서스는 작성하기가 쉬우므로 테스트 또는 유지 관리가 쉽지 않은 자신 만의 규칙 우선 순위 의미를 원할 수 있습니다. ANTLR은 AST를 시각화하기위한 IDE를 제공합니다. 추가 된 장점은 문자열 템플리트를 사용하여 중간 코드를 생성 할 수 있다는 것인데, 이는 완전히 다른 측면입니다.

관련 문제