Compiler/syntax analyzer: Difference between revisions

m
Update Zig to 0.9.0
(Add Zig language implementation)
m (Update Zig to 0.9.0)
Line 6,386:
token_it: LexerOutputTokenizer,
curr: Token,
allocator: *std.mem.Allocator,
 
const Self = @This();
 
pub fn init(allocator: *std.mem.Allocator, str: []const u8) Self {
return Self{
.token_it = LexerOutputTokenizer.init(str),
Line 6,580:
};
 
pub fn parse(allocator: *std.mem.Allocator, str: []const u8) !?*Tree {
var parser = Parser.init(allocator, str);
return try parser.parse();
Line 6,588:
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
varconst allocator = &arena.allocator();
 
var arg_it = std.process.args();
Line 6,722:
};
 
fn astToFlattenedString(allocator: *std.mem.Allocator, tree: ?*Tree) ![]const u8 {
var result = std.ArrayList(u8).init(allocator);
var writer = result.writer();
Line 6,817:
 
fn treeToString(
allocator: *std.mem.Allocator,
writer: std.ArrayList(u8).Writer,
tree: ?*Tree,
Line 6,858:
 
pub const LexerOutputTokenizer = struct {
it: std.mem.SplitIterator(u8),
 
const Self = @This();
 
pub fn init(str: []const u8) Self {
return Self{ .it = std.mem.split(u8, str, "\n") };
}
 
Line 6,869:
if (self.it.next()) |line| {
if (line.len == 0) return null;
var tokens_it = std.mem.tokenize(u8, line, " ");
const lineNumber = try std.fmt.parseInt(usize, tokens_it.next().?, 10);
const colNumber = try std.fmt.parseInt(usize, tokens_it.next().?, 10);
Line 6,897:
};
 
fn stringToTokenList(allocator: *std.mem.Allocator, str: []const u8) !std.ArrayList(Token) {
var result = std.ArrayList(Token).init(allocator);
var lexer_output_it = LexerOutputTokenizer.init(str);
Anonymous user