Working on the new Definition.

This commit is contained in:
2025-07-21 04:06:11 +08:00
parent 49d6d463bd
commit b8a371b3a9
3 changed files with 111 additions and 44 deletions

View File

@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace SVM.Assembler.Core
@@ -18,7 +19,7 @@ namespace SVM.Assembler.Core
{
foreach (var item in InstructionDefinitions)
{
foreach (var alias in item.Value.aliases)
foreach (var alias in item.Value.Aliases)
{
if (!InstructionDefinitionAliases.TryAdd(alias, item.Value))
{
@@ -57,13 +58,77 @@ namespace SVM.Assembler.Core
}
}
}
static bool ParseDefinition(XmlNode node, ref ISADefinition definition)
{
InstructionDefinition instDefinition = new InstructionDefinition();
foreach (XmlNode item in node.ChildNodes)
{
switch (item.Name)
{
case "Aliases":
foreach (XmlNode aliasNode in item.ChildNodes)
{
if (aliasNode.Name == "Alias")
{
instDefinition.Aliases.Add(aliasNode.Attributes["Name"].Value);
}
else
{
return false;
}
}
break;
case "Parameters":
break;
default:
break;
}
if (item.Name != "InstructionDefinition")
{
return false;
}
}
return true;
}
static bool ParseDefinitions(XmlNode node, ref ISADefinition definition)
{
foreach (XmlNode item in node.ChildNodes)
{
if (item.Name != "InstructionDefinition")
{
return false;
}
if (ParseDefinition(node, ref definition) == false)
{
return false;
}
}
return true;
}
public static bool TryParse(Stream inputStream, [MaybeNullWhen(false)] out ISADefinition definition)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(inputStream);
ISADefinition isaDefinition = new ISADefinition();
foreach (XmlNode item in xmlDocument.ChildNodes)
{
ShowNode(item, 0);
switch (item.Name)
{
case "Enums":
break;
case "Definitions":
if (ParseDefinitions(item, ref isaDefinition) == false)
{
definition = null;
return false;
}
break;
default:
break;
}
}
definition = null;
return false;