refact: 重构代码生成 (#72)

Reviewed-on: PostGuard/Canon#72
This commit is contained in:
2024-05-04 11:56:06 +08:00
parent 6130adfa7c
commit 8da24523c9
25 changed files with 1121 additions and 538 deletions

View File

@@ -10,16 +10,65 @@ public class CCodeBuilder
{
private readonly StringBuilder _builder = new();
/// <summary>
/// 符号表
/// </summary>
public SymbolTable SymbolTable { get; } = new();
private int _scopeCount = 0;
private string _scopeEmpty = string.Empty;
public void AddString(string code)
{
_builder.Append(code);
}
public void AddLine(string code)
{
foreach (string line in code.Split('\n'))
{
_builder.Append(_scopeEmpty);
_builder.Append(line);
_builder.Append('\n');
}
}
/// <summary>
/// 开始一段代码块
/// </summary>
public void BeginScope()
{
_builder.Append(_scopeEmpty).Append("{\n");
_scopeCount += 1;
string scopeEmpty = string.Empty;
for (int i = 0; i < _scopeCount; i++)
{
scopeEmpty += " ";
}
_scopeEmpty = scopeEmpty;
}
/// <summary>
/// 结束一段代码块
/// </summary>
public void EndScope()
{
if (_scopeCount <= 0)
{
throw new InvalidOperationException("The scope has been closed!");
}
_scopeCount -= 1;
string scopeEmpty = string.Empty;
for (int i = 0; i < _scopeCount; i++)
{
scopeEmpty += " ";
}
_scopeEmpty = scopeEmpty;
_builder.Append(_scopeEmpty).Append("}\n");
}
public string Build()
{