@@ -21,12 +21,14 @@ public abstract class NonTerminatedSyntaxNode : SyntaxNodeBase, IEnumerable<Synt
|
||||
{
|
||||
yield return child;
|
||||
}
|
||||
|
||||
NonTerminatedSyntaxNode nonTerminatedNode = child.Convert<NonTerminatedSyntaxNode>();
|
||||
|
||||
foreach (SyntaxNodeBase node in nonTerminatedNode)
|
||||
else
|
||||
{
|
||||
yield return node;
|
||||
NonTerminatedSyntaxNode nonTerminatedNode = child.Convert<NonTerminatedSyntaxNode>();
|
||||
|
||||
foreach (SyntaxNodeBase node in nonTerminatedNode)
|
||||
{
|
||||
yield return node;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using Canon.Core.Enums;
|
||||
using Canon.Core.CodeGenerators;
|
||||
using Canon.Core.Enums;
|
||||
|
||||
namespace Canon.Core.SyntaxNodes;
|
||||
|
||||
@@ -20,4 +21,9 @@ public class ProgramStruct : NonTerminatedSyntaxNode
|
||||
{
|
||||
return new ProgramStruct { Children = children };
|
||||
}
|
||||
|
||||
public override void GenerateCCode(CCodeBuilder builder)
|
||||
{
|
||||
builder.AddString("#include <PascalCoreLib.h>");
|
||||
}
|
||||
}
|
||||
|
@@ -1,9 +1,11 @@
|
||||
using Canon.Core.Enums;
|
||||
using Canon.Core.Abstractions;
|
||||
using Canon.Core.CodeGenerators;
|
||||
using Canon.Core.Enums;
|
||||
using Canon.Core.LexicalParser;
|
||||
|
||||
namespace Canon.Core.SyntaxNodes;
|
||||
|
||||
public abstract class SyntaxNodeBase
|
||||
public abstract class SyntaxNodeBase : ICCodeGenerator
|
||||
{
|
||||
public abstract bool IsTerminated { get; }
|
||||
|
||||
@@ -19,6 +21,14 @@ public abstract class SyntaxNodeBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 语法树节点基类对于生成C代码的默认实现
|
||||
/// </summary>
|
||||
public virtual void GenerateCCode(CCodeBuilder builder)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static SyntaxNodeBase Create(SemanticToken token)
|
||||
{
|
||||
return new TerminatedSyntaxNode { Token = token };
|
||||
|
Reference in New Issue
Block a user