我剛剛進入antlr語法,我以爲我有一個非常簡單的。我遇到的問題是這種[1 + 2]解析到antlr語法忽略應該導致錯誤的字符
- PLUS(+)
- INT_LITERAL(1)
- INT_LITERAL(2)
正確這是好的,但[a1 + 2]也解析成
- 加號(+)
- INT_LITERAL(1)
- INT_LITERAL(2)
而不是給我,就像我所期望的一個錯誤。
在此先感謝。
grammar MyExpressions;
options {
language=CSharp3;
TokenLabelType=CommonToken;
ASTLabelType=CommonTree;
output=AST;
k=10;
}
@lexer::namespace{Expressions}
@parser::namespace{Expressions}
/*
* Parser Rules
*/
public root: LBRACKET! expression^ RBRACKET!;
expression: binaryOperation;
binaryOperation: (term PLUS^ term);
term: INT_LITERAL;
/*
* Lexer Rules
*/
PLUS: '+';
LBRACKET: '[';
RBRACKET: ']';
INT_LITERAL: '1'..'9'+;
WS: ' ';
我通過添加這對我的語法解決了該問題: @lexer ::成員{ 公共覆蓋無效DisplayRecognitionError(串[] tokenNames, RecognitionException E){ 串HDR = GetErrorHeader(E); string msg = GetErrorMessage(e,tokenNames);
throw new SyntaxException(hdr,msg);
}
}
@parser::members {
public override void DisplayRecognitionError(string[] tokenNames,
RecognitionException e) {
string hdr = GetErrorHeader(e);
string msg = GetErrorMessage(e, tokenNames);
throw new SyntaxException(hdr,msg);
}
}
SyntaxException是我爲我的應用程序創建的自定義異常。
我是新來的整個antlr事物和DSl創造一般。我在哪裏可以看到分詞器錯誤? – CodeHulk
我查看了詞法分析器和解析器上的NumberOfSyntaxErrors屬性,它們都爲0。我也重載了DisplayRecognitionError方法,但是我沒有從中得到任何結果。 – CodeHulk