Используя ваш пример здесь , я бы изменил ваши ActorParser
и NodeParser
определения на это:
public readonly static TokenListParser<Tokens, Node> ActorParser =
from name in NameParser
from colon in Token.EqualTo(Tokens.Colon)
from text in TextParser
select new Node {
Actor = name + colon.ToStringValue(),
Text = text
};
public readonly static TokenListParser<Tokens, Node> NodeParser =
from node in ActorParser.Try()
.Or(TextParser.Select(text => new Node { Text = text }))
select node;
Я чувствую, что есть ошибка с Superpower, так как яЯ не уверен, почему в NodeParser
я должен был поставить Try()
на первый парсер, когда связывал его с Or()
, но он вывел бы ошибку, если бы я его не добавил.
Кроме того, ваша проверка при проверке input[1]
неверна (возможно, это просто проблема копирования-вставки).Следует проверить по "Goodbye A: Hello"
, а не "Hello A: Goodbye"