libertaria-stack/l1-identity/qvl/gql.zig

43 lines
1.4 KiB
Zig

//! GQL (Graph Query Language) for Libertaria QVL
//!
//! ISO/IEC 39075:2024 compliant implementation
//! Entry point: parse(query_string) -> AST
const std = @import("std");
pub const ast = @import("gql/ast.zig");
pub const lexer = @import("gql/lexer.zig");
pub const parser = @import("gql/parser.zig");
/// Parse GQL query string into AST
pub fn parse(allocator: std.mem.Allocator, query: []const u8) !ast.Query {
var lex = lexer.Lexer.init(query, allocator);
const tokens = try lex.tokenize();
defer allocator.free(tokens);
var par = parser.Parser.init(tokens, allocator);
return try par.parse();
}
/// Transpile GQL to Zig code (programmatic API)
///
/// Example:
/// GQL: MATCH (n:Identity)-[t:TRUST]->(m) WHERE n.did = 'alice' RETURN m
/// Zig: try graph.findTrustPath(alice, trust_filter)
pub fn transpileToZig(allocator: std.mem.Allocator, query: ast.Query) ![]const u8 {
// TODO: Implement code generation
_ = allocator;
_ = query;
return "// TODO: Transpile GQL to Zig";
}
// Re-export commonly used types
pub const Query = ast.Query;
pub const Statement = ast.Statement;
pub const MatchStatement = ast.MatchStatement;
pub const CreateStatement = ast.CreateStatement;
pub const ReturnStatement = ast.ReturnStatement;
pub const GraphPattern = ast.GraphPattern;
pub const NodePattern = ast.NodePattern;
pub const EdgePattern = ast.EdgePattern;