2013-07-23 8 views
1

Antlr을 처음 사용했습니다. CSS 파서를 구현하려고합니다. 처음에는 구문 분석기를 생성하기 위해 this 문법을 사용하고 있습니다. 가이드 : this tutorial를 팔로우하고 있습니다. C#에서 Antlr 3.4를 사용하여 코드를 생성합니다 (다음으로 Antlr 4.0을 사용하여 시도 할 것입니다).맞춤 설정, 분류, Antlr의 오류 수집

나는 몇 가지 문제에 직면하고 있으며 인터넷에서 자원을 찾을 수 없어서 분명히 이해할 수 있습니다.

문제 나는 데 :

  1. 는 다른 유형 (오류, 경고)에서 사용자 정의 오류 메시지를 생성합니다. 이것은 Antlr에서 제공됩니까? 이를 달성하는 방법을 이해할 수있는 자료를 제공해주십시오.

  2. 다음 자습서에서는 구문 분석 및 렉싱에서 예외를 잡을 수있었습니다. 하지만이 코드를 추가하고 잘못된 CSS 내용을 테스트했지만 문법에서 내가 시도한 어떤 오류도주지 않습니다.

    partial class CSS3Lexer 
    { 
        public override void ReportError(RecognitionException e) 
        { 
         base.ReportError(e); 
         Console.WriteLine("Error in lexer at line " + e.Line + ":" + e.CharPositionInLine + e.Message); 
        } 
    } 
    
  3. 내가 데이터 구조 (오류 유형, 메시지가 오류 개체의 목록, 위치) 내가 그들을 사용할 수 있도록하는 어떤 종류의 오류 (파서와 렉서 오류)의 목록을 수집 할 다른 일을 위해서. 이렇게하는 더 의미있는 방법이 있을까요?

나는 더 우아한 디자인에 도달 할 수 없기 때문에 내 접근 방식에 대한 제안을 받고 싶습니다.

+1

참고로, 코드 블록은 목록 항목 내에 배치 되었기 때문에 제대로 포맷되지 않았습니다. 이 경우 여분의 4 개의 들여 쓰기 공간 (총 8 개)이 필요합니다. –

+0

@BartKiers는 그것을 잘 알고 있습니다. 감사!! –

답변

2

ANTLR의 내장 오류보고 메커니즘은 매우 단순하며 특정 오류에 오류 범주 또는 번호를 제공하는 방법을 제공하지 않습니다. 종종 구문 분석시 발생하는 모든 구문 오류에는 동일한 오류 번호가 부여됩니다. 예를 들어, ANTLR 4 도구는 구문 분석기 오류를 오류 50으로보고합니다.

초기 구문 분석이 완료되고 구문 분석 트리 (ANTLR 4) 또는 AST (ANTLR 3)가 사용 가능하면 의미 분석을 계속 수행 할 수 있습니다. 거기에서 식별 된 오류는 전반적인 영향에 따라 오류 또는 경고로 간주 될 수 있습니다. 이 용도로 사용하는 데이터 구조는 오류/경고를 특정 UI 구성 요소에보고해야하는 Visual Studio 또는 NetBeans 확장 프로그램과 같이 응용 프로그램마다 다르지만 그렇지 않은 경우 사용자가 이해할 수있는 방식으로 정의 할 수 있습니다.