晴耕雨読

working in the fields on fine days and reading books on rainy days

[C#] 構文解析器Spracheで複数の選択肢を読み取る (Or)

構文解析器のSpracheで複数の選択肢 (Or) を読み取るためのメソッド一覧について説明します。

Or()

第1引数のParserでマッチしたときはその結果読み取った結果を返します。それ以外は、第2引数のParserで読み取りを試みます。

  • Parser<T> Or<T>(this Parser<T> first, Parser<T> second)
Parser<string> keyword = Parse.String("return")
    .Or(Parse.String("function"))
    .Or(Parse.String("switch"))
    .Or(Parse.String("if"))
    .Text();

Assert.Equal("return", keyword.Parse("return"));
Assert.Equal("if", keyword.Parse("if"));

XOr()

XOrは最初のParserが1文字以上一致したときに、それ以降のParserで読み取りを試みません。

  • Parser<T> XOr<T>(this Parser<T> first, Parser<T> second)
var parser = Parse.String("foo")
    .XOr(Parse.Identifier(Parse.Letter, Parse.LetterOrDigit));

Assert.Equal("bar", parser.Parse("bar"));
//  unexpected 'a'; expected o
Assert.Throws<ParseException>(() => parser.Parse("far"));

以上です。

参考資料