diff options
| -rw-r--r-- | README.md | 9 | ||||
| -rw-r--r-- | src/grammar.txt | 16 | ||||
| -rw-r--r-- | src/parsergen.cpp | 9 |
3 files changed, 17 insertions, 17 deletions
@@ -4,6 +4,15 @@ An experiment in writing a low-level programming language with the intent to replace C. Zig intends to be a small language, yet powerful enough to write readable, safe, optimal, and concise code to solve any computing problem. +## Design Principles + + * Never compromise power or performance. + * Keep the language small and easy to understand. C programmers should pretty + much be able to understand Zig source code without learning anything about + Zig. + * Interoperability with C is crucial. Using C libraries should not require + "Zig bindings". + ## Goals * Ability to run arbitrary code at compile time and generate code. diff --git a/src/grammar.txt b/src/grammar.txt index 4de2a95b3e..015adfe0f4 100644 --- a/src/grammar.txt +++ b/src/grammar.txt @@ -2,12 +2,10 @@ Root<node> : many(FnDecl) token(EOF) { $$ = ast_create_root($1); }; -FnDecl<node> : token(Fn) token(Symbol) token(LParen) list(ParamDecl, token(Comma)) token(RParen) option(ReturnType) Block { - $$ = ast_create_fn_decl($2, $4, $6, $7); -}; - -ReturnType<node> : token(Arrow) Type { - $$ = $2; +FnDecl<node> : token(Fn) token(Symbol) token(LParen) list(ParamDecl, token(Comma)) token(RParen) token(Arrow) Type Block { + $$ = ast_create_fn_decl($2, $4, $7, $8); +} | token(Fn) token(Symbol) token(LParen) list(ParamDecl, token(Comma)) token(RParen) Block { + $$ = ast_create_void_fn_decl($2, $4, $6); }; ParamDecl<node> : token(Symbol) token(Colon) Type { @@ -26,8 +24,10 @@ PointerType<node> : token(Star) token(Const) Type { $$ = ast_create_pointer_type($2, $3); }; -Block<node> : token(LBrace) many(Statement) option(Expression) token(RBrace) { - $$ = ast_create_block($2, $3); +Block<node> : token(LBrace) many(Statement) Expression token(RBrace) { + $$ = ast_create_expr_block($2, $3); +} | token(LBrace) many(Statement) token(RBrace) { + $$ = ast_create_block($2); }; Statement<node> : ExpressionStatement { diff --git a/src/parsergen.cpp b/src/parsergen.cpp index e0c4135758..d105ff3fe4 100644 --- a/src/parsergen.cpp +++ b/src/parsergen.cpp @@ -141,10 +141,6 @@ struct RuleMany { RuleNode *child; }; -struct RuleOption { - RuleNode *child; -}; - struct RuleOr { Buf name; Buf union_field_name; @@ -171,7 +167,6 @@ enum RuleNodeType { RuleNodeTypeTuple, RuleNodeTypeMany, RuleNodeTypeList, - RuleNodeTypeOption, RuleNodeTypeOr, RuleNodeTypeToken, RuleNodeTypeSubRule, @@ -185,7 +180,6 @@ struct RuleNode { RuleTuple tuple; RuleMany many; RuleList list; - RuleOption option; RuleOr _or; RuleToken token; RuleSubRule sub_rule; @@ -403,9 +397,6 @@ static void gen(Gen *g, RuleNode *node, Buf *out_field_name, ParserState *cur_st case RuleNodeTypeList: zig_panic("TODO"); break; - case RuleNodeTypeOption: - zig_panic("TODO"); - break; case RuleNodeTypeOr: { buf_init_from_buf(out_field_name, &node->_or.union_field_name); |
