2017-08-28 15 views
1

を、私は、ファイルの下に解析する、「故障解析:入力の予期しない終わりに達し、予想=」Spracheを使用してファイルの解析中に例外を取得

first=The_First_Step 
{ 
    { 
     value=First.Value, 
    } 
} 

second=The_Second_Step 
{ 
    { 
     another = Second_Value, 
     more = Yet.More, 
    } 
} 

私は

public static NGSection ParseSections(string ngServerConfig) 
{ 
    return Sections.End().Parse(ngServerConfig); 
} 

internal static Parser<string> ValueText = Parse.LetterOrDigit.AtLeastOnce().Text().Token(); 

internal static Parser<string> Identifier = Parse.AnyChar.AtLeastOnce().Text().Token(); 

internal static Parser<Config> Config = 
     from id in Identifier 
     from equal in Parse.Char('=').Token() 
     from value in ValueText 
     from comma in Parse.Char(',').Token() 
     select new Config(id, value); 

internal static Parser<Section> Section = 
     from id in Identifier 
     from equal in Parse.Char('=').Token() 
     from title in ValueText 
     from lbracket in Parse.Char('{').Token() 
     from inbracket in Parse.Char('{').Token() 
     from configs in Config.AtLeastOnce() 
     from outbracket in Parse.Char('}').Token() 
     from rbracket in Parse.Char('}').Token() 
     select new Section(id, title, configs); 

internal static Parser<NGSection> Sections = 
    from sections in Section.AtLeastOnce() 
    select new NGSection(sections); 

、と文法を書かれています私は例外を受け取っています

解析の失敗:予期しない入力の終了に達しました。期待=(行13、列2);最近消費された:ore } }

ヒントは役に立ちます。

+0

これに "近い"投票はなぜですか?これはソースコード、サンプル入力、エラーメッセージなどのプログラミングに関する質問です...改善のための提案はありますか? –

答えて

1

2つの問題:まず、値に_または.を含めることができます。したがって、LetterOrDigitには該当しません。次のようになります。

internal static Parser<string> ValueText = 
    Parse.LetterOrDigit.Or(Parse.Chars('_', '.')).AtLeastOnce().Text().Token(); 

次に、IdentifierパーサのAnyCharはあまりにも貪欲です。あなたは=を除外する必要があります、またはそれは識別子の一部とみなされます:

internal static Parser<string> Identifier = 
    Parse.CharExcept('=').AtLeastOnce().Text().Token(); 
+0

ありがとう、これは私の問題を解決しました。 –

関連する問題