2012-03-10 9 views
1

アイロニーの使い方を学ぶために、簡単なC#コードを解析しようとしています。私は、Ironyサンプルに含まれている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#を解析することで誰もこのような問題を経験しましたか?申し訳ありません、これ以上の情報は提供できません。 exeはありません

答えて

1

あなたのコードを試したところ、実際には解析に失敗しました。そして、エラー(parseTree.ParserMessages)は、エラーメッセージInvalid character: ''.で最初の行の最後にあり、引用符間の文字は\rです。

ええと、\rは空白と見なされないので、文法を変更する必要があります。文法では、方法SkipWhitespace()があり、それはswitchの空白文字のリストを含んでいます。そこにcase '\r':を追加するだけで、解析は成功するはずです。

+0

ありがとうございました!私はこれを前に試したので、面白いです:src.Replace( '\ n'、 '').Replace( '\ r'、 '')をソーステキストとして使用しましたが、これも失敗しました。 – user548376

関連する問題