MIPS解析器使用C#Pidgin,无法解析一系列内容

MIPS解析器使用C#Pidgin,无法解析一系列内容,c#,parsing,parser-combinators,C#,Parsing,Parser Combinators,我正试图编写一个简单的解析器组合器来使用Pidgin库解析MIPS代码,但是我的separated和可选终止的解析器总是向解析器查找单个内容,并且不会抛出任何错误。我不知道发生了什么事 我感谢任何帮助或暗示 var skipCommaP = Char(',').IgnoreResult(); var registerP = Char('$') .Then(Enums.GetValues<Register>().Select(x => x.Name())

我正试图编写一个简单的解析器组合器来使用Pidgin库解析MIPS代码,但是我的
separated和可选终止的
解析器总是向解析器查找单个内容,并且不会抛出任何错误。我不知道发生了什么事

我感谢任何帮助或暗示

var skipCommaP = Char(',').IgnoreResult();

var registerP = Char('$')
    .Then(Enums.GetValues<Register>().Select(x => x.Name())
        .Select(x => String(new string(x.Skip(1).ToArray())))
        .Aggregate((a, b) => a.Or(b))
        .Map(v => $"${v}".ToRegister()));

var loadImmediateP = Map(
    (a, b, c) => (Instruction) new LoadImmediate(b, c),
    String(LoadImmediate.Name).Between(SkipWhitespaces),
    registerP.Before(skipCommaP.Optional()).Between(SkipWhitespaces),
    Num.Between(SkipWhitespaces)
);

var moveP = Map(
    (a, b, c) => (Instruction) new Move(b, c),
    String(Move.Name).Between(SkipWhitespaces),
    registerP.Before(skipCommaP.Optional()).Between(SkipWhitespaces),
    registerP.Between(SkipWhitespaces)
);

var instructionsP = loadImmediateP.Or(moveP);

ProgramP = instructionsP.SeparatedAndOptionallyTerminated(EndOfLine);

const string code = "move $t0, $t0 \n" + 
                    "li $t0 555";

var result = new MipsParser().ProgramP.Parse(code);

// result.Value has single thing in it always.
Console.WriteLine(result);