2012-07-27 20 views
1

我有反諷一些棘手的問題,我不明白...C#反諷分析器 - 儘管一切都不會分析文件似乎是正確的

第一解析我在我的應用程序成功運行時做的。

string src = "" // this is the file to parse 
Grammar g = new CSharpGrammar(); 
LanguageData language = new LanguageData(g); 
Parser parser = new Parser(language); 
ParseTree parseTree = parser.Parse(src); 
ParseRoot = parseTree.Root; 

然後我按照提示將LanguageData變量移動到全局上下文。還是一切都好。但是現在我想在自定義函數中調用反諷分析器,用Irony提供的c#語法v3.5解析多個文件(LINQ查詢對我來說並不重要,所以這似乎足夠了)。同樣的做法:

Parser parser = new Parser(language); 
ParseTree parseTree = parser.Parse(file); 
ParseRoot = parseTree.Root; 

但現在parseroot是和保持 「零」。我完全不知道爲什麼。我剛纔也檢查瞭解析器錯誤,在那裏我發現了一個我無法理解的錯誤。

"Syntax error, expected: statement, member declaration, namespace" 

但我的文件看起來像這樣:

using System; 
using Microsoft.SharePoint.WebControls; 

namespace WebParts.Layouts.Ordering 
{ 
    public partial class ConfirmDelete : LayoutsPageBase 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      lblMsg.Text = "Are you sure you want to delete the entry?"; 

      if (!IsPostBack) 
      { 
       BtnYes.Attributes.Add("onclick", "OnYes(); return false;"); 
       BtnNo.Attributes.Add("onclick", "OnNo(); return false;"); 
      } 
     } 
    } 
} 

我希望你能看到什麼是錯我的代碼...我越來越絕望這個東西......

+1

這將是有啓發性的知道你想達到的目的,當解析c# ,你能告訴我們嗎? – 2012-07-27 08:45:42

+0

「然後我按照提示將LanguageData變量移動到全局上下文中。」請詳細解釋。 – mathieu 2012-07-27 08:57:06

+0

的目的是爲了進一步調試目的,將項目(名稱空間,類,方法,屬性,成員)的代碼結構寫入sql數據庫。 – 2012-09-10 09:58:17

回答

1

你必須提供一個文件名作爲解析器的第二個參數.Parse:

static void Main(string[] args) 
{ 
    Grammar g = new CSharpGrammar(); 
    LanguageData language = new LanguageData(g); 
    Parser parser = new Parser(language); 
    ParseTree parseTree = parser.Parse("", "class1.cs"); 

    var r = parseTree.Root; 
} 
相關問題