2012-03-10 25 views
1

所以,我試圖解析一些簡單的C#代碼來學習如何使用反諷。我使用了反諷樣本中包含的C#語法,並使用了這裏的樣本程序集加載代碼。如果有任何關於反諷的文檔,似乎很少。以下是我正在試圖解析完整的源代碼:反諷不會解析C#使用反諷提供的C#語法

using System; 

namespace N 
{ 
    class Test 
    { 
     public int A(int x) 
     { 
      return x+1; 
     } 
    } 
    class Test2 
    { 
     public string hello = "world"; 
     private int _T = 0; 
     private Test _actor = new Test(); 
     public void B() 
     { 
      Console.WriteLine(hello+": "+_actor.A(_T++)); 
     } 
    } 
} 

而且解析代碼:

string src = File.ReadAllText("testcs.cs"); 
LanguageData language = new LanguageData(g); 
Parser parser = new Parser(language); 
ParseTree parseTree = parser.Parse(src); 
ParseTreeNode root = parseTree.Root; 
Console.WriteLine((root==null?"Parse tree unsuccessful!":"Parse tree created!")); 

...其中g是諷刺C#語法。有沒有人在使用Irony的語法解析C#之前遇到過這些問題?對不起,我無法提供更多信息。沒有任何例外

回答

1

當我嘗試你的代碼時,解析確實是不成功的。並且錯誤(在parseTree.ParserMessages中)位於第一行的末尾,並顯示錯誤消息Invalid character: ''.,其中引號之間的字符爲\r

嗯,看起來\r不考慮空格,所以我們需要修改語法。在語法中,有一個方法SkipWhitespace(),其中包含switch中的空白字符列表。如果您只是在那裏添加case '\r':,解析應該成功。

+0

似乎已經工作了,謝謝!這很有趣,因爲我之前嘗試過:src.Replace('\ n','').Replace('\ r','')作爲源文本,並且也失敗了。 – user548376 2012-03-10 22:02:43