MIPS解析器使用C#Pidgin,无法解析一系列内容
我正试图编写一个简单的解析器组合器来使用Pidgin库解析MIPS代码,但是我的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())
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);