0

如何在 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 规则工作,但问题是我得到的令牌不匹配,我没有得到令牌作为文字。

4

1 回答 1

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。

于 2012-05-30T17:47:29.357 回答