構文解析器の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"));
以上です。