Zig grammar for tree-sitter

tree-sitter-zig:

I was thinking about creating a tree-sitter grammar for zig before the college semester starts but it takes more time than a thought (3 weeks), not even full released yet.

I did some progress because of Programming Languages cource; Improved on emacs and jj-vcs, got mad a moment but worth it . Want to learn forgejo workflow now


https://codeberg.org/guifersv/tree-sitter-zig

2 Likes

There is already a grammar for zig, perhaps you overlooked it: tree-sitter-zig/grammar.js at master · tree-sitter-grammars/tree-sitter-zig · GitHub

There is a list of them on https://github.com/tree-sitter/tree-sitter/wiki/List-of-parsers, this one is more similar to mine. It even got great pull requests, but they aren’t merged.

I think I can learn from them to improve my implementation, that’s good

1 Like

I can now parse every .zig/.zon on zig source code excluding:

  • some on test/cases/compile_errors
  • doc/langref/var_must_be_initialized.zig
  • doc/langref/tldoc_comments.zig
  • doc/langref/unattached_doc-comment.zig

Tested some repos and the only thing I have found was a ambiguity on index expressions with range, block expression and sentinel like: const a = b[0.. blk: { break :blk 1; } :0];

Changed repo to github for workflows;

Parsed the following projects:

On zig source code it failed on (intentional syntax errors):

FAILED: ../zig/test/cases/compile_errors/empty_for_loop_body.zig
FAILED: ../zig/test/cases/compile_errors/const_is_a_statement_not_an_expression.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-block_statement.zig
FAILED: ../zig/test/cases/compile_errors/empty_char_lit.zig
FAILED: ../zig/test/cases/compile_errors/invalid_unicode_escape.zig
FAILED: ../zig/test/cases/compile_errors/normal_string_with_newline.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-for_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if-else_expression.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-while-continue_statement.zig
FAILED: ../zig/test/cases/compile_errors/empty_while_loop_body.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-for_expression.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if-else_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-while_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-comptime_expression.zig
FAILED: ../zig/test/cases/compile_errors/invalid_float_literal.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if-else-if_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-comptime_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-block_expr.zig
FAILED: ../zig/test/cases/compile_errors/reject_extern_variables_with_initializers.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if-else-if-else_expression.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-defer.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-while-continue_expression.zig
FAILED: ../zig/test/cases/compile_errors/non-extern_function_with_var_args.zig
FAILED: ../zig/test/cases/compile_errors/invalid_pointer_syntax.zig
FAILED: ../zig/test/cases/compile_errors/for_empty.zig
FAILED: ../zig/test/cases/compile_errors/reject_extern_function_definitions_with_body.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if-else-if_expression.zig
FAILED: ../zig/test/cases/compile_errors/missing_function_proto_name.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-test_statement.zig
FAILED: ../zig/test/cases/compile_errors/extern_packed_on_opaque.zig
FAILED: ../zig/test/cases/compile_errors/invalid_legacy_unicode_escape.zig
FAILED: ../zig/test/cases/compile_errors/function_prototype_with_no_body.zig
FAILED: ../zig/test/cases/compile_errors/empty_if_body.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-test_expression.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if-else-if-else_statement.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-if_expression.zig
FAILED: ../zig/test/cases/compile_errors/invalid_empty_unicode_escape.zig
FAILED: ../zig/test/cases/compile_errors/extra_comma_in_destructure.zig
FAILED: ../zig/test/cases/compile_errors/implicit_semicolon-while_expression.zig
FAILED: ../zig/doc/langref/var_must_be_initialized.zig
FAILED: ../zig/doc/langref/unattached_doc-comment.zig

As a side note, codeberg has CI/actions which are pretty similar to GitHub. You need to apply for it but since your project is GPL it’s likely to get auto approved.

1 Like