| author | |
| committer | |
| log | 06b1896a619d13a8b3471dc119d2076f04f85b93 |
| tree | 6c5dda23d4f7e32a855c9097ce48b3d142fc92fc |
| parent | 3e45baa60adbb041bf75af4cde380abb3b05abfb |
| signature |
3 files changed, 25 insertions(+), 8 deletions(-)
build.zig+15| ... | ... | @@ -719,6 +719,21 @@ pub fn build(b: *std.Build) !void { |
| 719 | 719 | check_mingw_run.addDirectoryArg(b.path("lib/libc/mingw")); |
| 720 | 720 | check_mingw_step.dependOn(&check_mingw_run.step); |
| 721 | 721 | |
| 722 | { | |
| 723 | const gpo_step = b.step("gen-parser-oracle", "Regenerate lib/std/zig/parser_generated_oracle.zig from doc/langref/grammar.peg"); | |
| 724 | const gpo_exe = b.addExecutable(.{ | |
| 725 | .name = "gen_parser_oracle", | |
| 726 | .root_module = b.createModule(.{ | |
| 727 | .root_source_file = b.path("tools/gen_parser_oracle.zig"), | |
| 728 | .target = b.graph.host, | |
| 729 | }), | |
| 730 | }); | |
| 731 | const gpo_run = b.addRunArtifact(gpo_exe); | |
| 732 | gpo_run.addFileArg(b.path("doc/langref/grammar.peg")); | |
| 733 | gpo_run.addFileArg(b.path("lib/std/zig/parser_generated_oracle.zig")); | |
| 734 | gpo_step.dependOn(&gpo_run.step); | |
| 735 | } | |
| 736 | ||
| 722 | 737 | const test_incremental_step = b.step("test-incremental", "Run the incremental compilation test cases"); |
| 723 | 738 | try tests.addIncrementalTests(b, test_incremental_step, test_filters); |
| 724 | 739 | if (!skip_test_incremental) test_step.dependOn(test_incremental_step); |
lib/std/zig/parser_generated_oracle.zig+1-1| ... | ... | @@ -1,5 +1,5 @@ |
| 1 | 1 | //! This file is generated, do not edit manually! To generate, run: |
| 2 | //! zig run ./tools/gen_parser_oracle.zig -- ./doc/langref/grammar.peg > ./lib/std/zig/parser_generated_oracle.zig | |
| 2 | //! zig build gen-parser-oracle | |
| 3 | 3 | |
| 4 | 4 | const std = @import("std"); |
| 5 | 5 |
tools/gen_parser_oracle.zig+9-7| ... | ... | @@ -1,5 +1,5 @@ |
| 1 | 1 | //! Example usage: |
| 2 | //! zig run ./tools/gen_parser_oracle.zig -- ./doc/langref/grammar.peg > ./lib/std/zig/parser_generated_oracle.zig | |
| 2 | //! zig build gen-parser-oracle | |
| 3 | 3 | |
| 4 | 4 | // This program implements a subset of the PEG grammar definition |
| 5 | 5 | // in the peg(1) man page. |
| ... | ... | @@ -21,6 +21,7 @@ pub fn main(init: std.process.Init) !void { |
| 21 | 21 | const args = try init.minimal.args.toSlice(arena); |
| 22 | 22 | |
| 23 | 23 | const grammar_path = args[1]; |
| 24 | const out_path = args[2]; | |
| 24 | 25 | |
| 25 | 26 | const grammar = try Io.Dir.cwd().readFileAlloc(io, grammar_path, gpa, .unlimited); |
| 26 | 27 | defer gpa.free(grammar); |
| ... | ... | @@ -52,12 +53,13 @@ pub fn main(init: std.process.Init) !void { |
| 52 | 53 | return error.ParseError; |
| 53 | 54 | } |
| 54 | 55 | |
| 55 | var stdout_buffer: [4096]u8 = undefined; | |
| 56 | var stdout_writer = Io.File.stdout().writerStreaming(io, &stdout_buffer); | |
| 57 | const stdout = &stdout_writer.interface; | |
| 56 | var out_file = try Io.Dir.cwd().createFile(io, out_path, .{}); | |
| 57 | var out_buffer: [4096]u8 = undefined; | |
| 58 | var out_writer = out_file.writer(io, &out_buffer); | |
| 59 | const out = &out_writer.interface; | |
| 58 | 60 | |
| 59 | try tree.render(gpa, stdout, .{}); | |
| 60 | try stdout.flush(); | |
| 61 | try tree.render(gpa, out, .{}); | |
| 62 | try out.flush(); | |
| 61 | 63 | } |
| 62 | 64 | |
| 63 | 65 | const Generator = struct { |
| ... | ... | @@ -78,7 +80,7 @@ const Generator = struct { |
| 78 | 80 | fn genRoot(g: *Generator, node: Node.Index) Error!void { |
| 79 | 81 | try g.w.writeAll( |
| 80 | 82 | \\//! This file is generated, do not edit manually! To generate, run: |
| 81 | \\//! zig run ./tools/gen_parser_oracle.zig -- ./doc/langref/grammar.peg > ./lib/std/zig/parser_generated_oracle.zig | |
| 83 | \\//! zig build gen-parser-oracle | |
| 82 | 84 | \\ |
| 83 | 85 | \\const std = @import("std"); |
| 84 | 86 | \\ |