const std = @import("std"); pub const lexical_grammar = @import("lexical_grammar.zig"); pub const ast = @import("ast.zig"); pub const syntactic_grammar = @import("syntactic_grammar.zig"); pub const Result = @import("result.zig").Result; pub const Parser = @import("parser.zig").Parser; test "simple literal" { const source = "42;"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); try std.testing.expect(result.body[0].data == .expr); } test "variable declaration" { const source = "var x = 1;"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); try std.testing.expect(result.body[0].data == .variable); } test "function declaration" { const source = "function foo() { return 1; }"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); try std.testing.expect(result.body[0].data == .function); } test "if statement" { const source = "if (x > 0) { x = 1; } else { x = 2; }"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); try std.testing.expect(result.body[0].data == .@"if"); } test "binary expression" { const source = "a + b * c;"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "arrow function" { const source = "const f = (x) => x + 1;"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "object literal" { const source = "var obj = { a: 1, b: 2 };"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "class declaration" { const source = "class Foo { constructor() { } }"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "for loop" { const source = "for (var i = 0; i < 10; i++) { break; }"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "try catch" { const source = "try { x; } catch (e) { y; }"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "multiple statements" { const source = "var a = 1; var b = 2; var c = a + b;"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 3); } test "array literal with spread" { const source = "var arr = [1, ...rest, 3];"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test "template literal" { const source = "const s = `hello ${name} world`;"; const result = try syntactic_grammar.parse(source); try std.testing.expect(result.body.len == 1); } test { _ = std.testing.refAllDecls(@This()); }