我有一個antlr的問題。 我有以下簡單的語法:解析ANTLR錯誤
grammar bxk;
options
{
language=CSharp3;
}
// start rule
start
: root* EOF
;
root
: ROOT_ID CT_ID ((rd=rootDefinition) | END)
;
rootDefinition
: '{'
('scope' ASSIGN s=STRING END)?
('major' ASSIGN i=STRING END)?
('minor' ASSIGN i=STRING END)?
('revision' ASSIGN i=STRING END)?
'}'
;
CHAR : ('a'..'z'|'A'..'Z') ;
ROOT_ID : 'ROOT_'(CHAR | DIGIT | SPECIAL)+ ;
CT_ID : 'ct_'(CHAR | DIGIT | SPECIAL)+ ;
DIGIT : '0'..'9';
SPECIAL : '_' ;
END : ';';
STRING : CHAR (CHAR | DIGIT | SPECIAL)*;
WS : (' '|'\t' | '\n' | '\r' | '\u000C')+ {Skip();} ;
就是這樣。現在,當我生成C#代碼,我有幾個錯誤: funktion'開始'是私人的,我必須永遠改變公共。 此外,當我改變公衆和將解析follwing:
ROOT_base ct_s {
scope=aliejfoac;
}
Internaly的NoViableAltException發生。 如果我在分號後面添加一個空格,它將正常運行。但我只能在Visual Studio中看到Debbug模式中的異常。
另一個問題,我有ist syntay錯誤不顯示。我添加了:
catch [RecognitionException re] {
ReportError(re);
throw new Exception(re.ToString() + "\non line " + re.Line + " and row " + re.CharPositionInLine.ToString());
}
現在,如果發生語法錯誤,將會顯示一個異常。
最後我遇到了問題Skip()
。當我寫它Skip()
它適用於生成的代碼,而不是解釋器。當我寫skip()
它只適用於解釋器而不是生成的代碼。
任何人都可以幫我解決我的問題嗎?
感謝您的幫助。哦,我有forgott編寫的ASSIGN令牌。但它仍然不起作用。只有在我添加空間後。 – user1469116
@ user1469116,就像我說的:用Java測試它,我無法重現這一點。問題可能在於Visual Studio插件或C#目標(我無法幫到你)。 –