2012-05-15 3 views
0

Visual Studio에서 antlr을 사용하는 방법을 배우기 시작했으며 기본적인 예제가 작동하지 않습니다! 여기 ANTLR C# 예외 발생 없음

은 내가 사용하고있어 문법입니다 : 여기
grammar T; 

options { 
    language=CSharp3; 
    TokenLabelType=CommonToken; 
} 
@lexer::namespace {CoolTool.CoolProject.Compiler} 
@parser::namespace {CoolTool.CoolProject.Compiler} 

/* 
* Parser Rules 
*/ 

compileUnit 
    : 'a' AFTER 
    ; 


AFTER 
    : 'after' 
    ; 

WS 
    : (' '|'\r'|'\t'|'\u000C'|'\n'); 

는 렉서와 문법을 인스턴스화하는 C# 코드입니다

using System; 
using Antlr.Runtime; 
namespace CoolTool.CoolProject.Compiler 
partial class TParser 
    { 
     public static void Main(String[] args) 
     { 
      TLexer lexer = new TLexer(new ANTLRStringStream("$$%$%")); 
      CommonTokenStream tokens = new CommonTokenStream(lexer); 
      TParser parser = new TParser(tokens); 

      parser.compileUnit(); 

      Console.WriteLine("OK"); 

     } 
    } 
} 

문제는 그 난에 전달 상관없이 렉서/파서, 나는 어떤 오류도 내지 않는다. 나는 "$$"에 대해 NoViableAltException을 얻지 못하는 이유를 완전히 혼동하고 있습니까?

아무도 도와 줄 수 있습니까?

덕분에, 아미르

+0

I는 C# v3의 목표와 경험이없는 (또는 VS, 그 문제에 대한!),하지만 비주얼 스튜디오는 아마 STDERR에 당신이보고 있지 탭에 보내는 무엇입니까 인쇄 무엇입니까? ANTLRWorks를 사용하면 디버거를 통해 문법을 실행할 때 오류가 발생합니다. –

답변

0

나는 #이 생성 된 C 소스 제비가 어떤 상황에서 오류가 발생 정확하게 기억한다면 당신은 오류가 발생 있는지 확인하기 위해 반환 된 객체를 조회 할 필요가있다.

일부 오류는 트랩 할 추가 코드를 추가해야 할 수도 있습니다.

2 년 전에 Antlr을 사용할 때도 비슷한 문제가있었습니다.

이전 코드를 찾을 수 있는지 확인합니다.

0

나는 antlr3.4를 사용하고, 처리 예외를 다음과 같이 :

 ICharStream input = new ANTLRStringStream(_expressionString); 
     ExpressionLexer lex = new ExpressionLexer(input); 

     CommonTokenStream tokens = new CommonTokenStream(lex); 
     ExpressionParser parser = new ExpressionParser(tokens); 
     AstParserRuleReturnScope<CommonTree, CommonToken> r = parser.expression(); 

     if (lex.HasError) 
     { 
      throw new ExpressionException(lex.ErrorMessage); 
     } 
     if (parser.HasError) 
     { 
      throw new ExpressionException(parser.ErrorMessage); 
     } 

당신 ANTLR 버전 조금 오래된,하지만 난 어쩌면 같은 예외를 생각