如何在ANTLR中编写以下BNF语法?
literal = "{" number "}" CRLF *CHAR8
; Number represents the number of CHAR8s
例如,{6}\r\nLENGTH
应映射到"LENGTH"
字符串。
以下工作会怎样?
literal:
| '{' ('0'..'9')+ '}\r\n'
{
// C# Code for Lexer
Text = Text.Trim();
int n = int.Parse(Text.Substring(1,Text.Length-2));
Text = "";
for(int i=0;i<n;i++){
input.Consume();
}
}
;
我将此作为Lexer规则运行,但问题是我得到了不匹配的令牌,我没有得到令牌作为文字。
答案 0 :(得分:0)
此解决方案正常运行,
literal:
| '{' ('0'..'9')+ '}\r\n'
{
// C# Code for Lexer
Text = Text.Trim();
int n = int.Parse(Text.Substring(1,Text.Length-2));
Text = "";
for(int i=0;i<n+1;i++){
Text += (char) input.LA(1);
input.Consume();
}
}
;
Text += (char)input.LA(1);
缺失了,出于某种原因,我们必须将i从0计算到n + 1.