Canon/Canon.Tests/SemanticTests/Tests.cs

60 lines
1.9 KiB
C#

using Canon.Core.SemanticParser;
using Canon.Core.SyntaxNodes;
using Canon.Tests.Utils;
using Xunit.Abstractions;
namespace Canon.Tests.SemanticTests;
public class Tests(ITestOutputHelper helper)
{
[Fact]
public void Test()
{
const string program = """
program main;
var
x, y: array[0..0] of integer;
a, b: integer;
function exgcd(a, b: integer; var x, y: integer): integer;
var
t, r: integer;
begin
if b = 0 then
begin
x := 1;
y := 0;
exgcd := a;
end
else
begin
r := exgcd(b, a mod b, x, y);
t := x;
x := y;
y := (t - (a div b) * y);
exgcd := r;
end;
end;
begin
a := 7;
b := 15;
x[0] := 1;
y[0] := 1;
exgcd(a, b, x[0], y[0]);
x[0] := ((x[0] mod b) + b) mod b;
write(x[0]);
end.
""";
ProgramStruct root = CompilerHelpers.Analyse(program);
SyntaxTreeTraveller traveller = new();
CodeGeneratorVisitor visitor = new();
traveller.Travel(root, visitor);
helper.WriteLine(visitor.Builder.Build());
}
}