From fe22cc76654692f8ac814893ffe7b9d6d912fd2e Mon Sep 17 00:00:00 2001 From: Dawid Sobczak Date: Tue, 19 Sep 2023 11:42:10 +0100 Subject: [PATCH] Big Commit I accidentally made this commit really big after some git mishaps. Working on zig grammar, finally kinda works. Fixed some diagnostics warnings Moved examples to tofix because fixing them is besides the point right now. --- .ignore | 10 + 06/README.md | 1 + 06/arith.peg | 5 + 06/deps/parser-gen/peg-parser.lua | 2 + 06/kitty | 13 + 06/src/ast.lua | 32 ++ 06/src/main.lua | 23 +- 06/test.zig | 6 + 06/zig.peg | 506 +++++++++++++++--------------- kitty | 17 + kitty.conf | 5 + scripts/build.sh | 3 + scripts/run.sh | 3 + 13 files changed, 367 insertions(+), 259 deletions(-) create mode 100644 .ignore create mode 100644 06/arith.peg create mode 100755 06/kitty create mode 100644 06/src/ast.lua create mode 100644 06/test.zig create mode 100755 kitty create mode 100644 kitty.conf create mode 100755 scripts/build.sh create mode 100755 scripts/run.sh diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..347cc95 --- /dev/null +++ b/.ignore @@ -0,0 +1,10 @@ +00* +01* +02* +03* +04* +05* +06/deps/lua- +06/deps/lua-* + +tofix diff --git a/06/README.md b/06/README.md index 319565c..2922ed5 100644 --- a/06/README.md +++ b/06/README.md @@ -8,6 +8,7 @@ nloaded' failed!" Write rules into makefile to run tests 1. Create test runner if it doesn't exist for lpeglable and parser-gen 2. Update tests to lua 5.4 +2. Fix diagnostics in tofix 3. Write a 'make test' rule Implement backslashed escaped characters in grammar parser diff --git a/06/arith.peg b/06/arith.peg new file mode 100644 index 0000000..cf994a4 --- /dev/null +++ b/06/arith.peg @@ -0,0 +1,5 @@ +Expr <- Sum +Sum <- Product (('+' / '-') Product)* +Product <- Power (('*' / '/') Power)* +Power <- Value ('^' Power)? +Value <- [0-9]+ / '(' Expr ')' \ No newline at end of file diff --git a/06/deps/parser-gen/peg-parser.lua b/06/deps/parser-gen/peg-parser.lua index dc6d874..1448511 100644 --- a/06/deps/parser-gen/peg-parser.lua +++ b/06/deps/parser-gen/peg-parser.lua @@ -1,4 +1,5 @@ local re = require("deps.lpeglabel.relabel") +local util = require("src.util") local peg = {} @@ -256,6 +257,7 @@ function peg.pegToAST(input, defs) table.insert(err, string.rep(" ", col-1) .. "^") error("syntax error(s) in pattern\n" .. table.concat(err, "\n"), 3) end + return r end diff --git a/06/kitty b/06/kitty new file mode 100755 index 0000000..5a16c7f --- /dev/null +++ b/06/kitty @@ -0,0 +1,13 @@ +new_tab code +layout horizontal +launch --title "code" bash + +new_tab terminal +layout horizontal +launch bash + +new_tab ranger +enabled_layouts horizontal,stack +layout horizontal +launch ranger + diff --git a/06/src/ast.lua b/06/src/ast.lua new file mode 100644 index 0000000..93b4c6d --- /dev/null +++ b/06/src/ast.lua @@ -0,0 +1,32 @@ +util = require('src.util') + +local function parse_tree_to_ast(parsetree) + stack = {{i=1,node=parsetree}}; + + while #stack > 0 do + current = table.remove(stack, 1) + + for i = current.i, #current.node, 1 do + inner = current.node[i] + if type(inner) == "table" then + current.i = i + 1; + table.insert(stack, current) + table.insert(stack, {i=1, node=inner}) + break; + else + print(inner) + end + end + end + + return {} +end + +local function print_ast(ast) + +end + +return { + parse_tree_to_ast = parse_tree_to_ast, + print = print_ast +} \ No newline at end of file diff --git a/06/src/main.lua b/06/src/main.lua index 71c3d90..d1a6ab9 100644 --- a/06/src/main.lua +++ b/06/src/main.lua @@ -1,11 +1,24 @@ local pg = require("deps.parser-gen.parser-gen") local util = require("src.util") - -local errs = {errMissingThen = "Missing Then"} -- one custom error -pg.setlabels(errs) +local ast = require("src.ast") local f = assert(io.open("zig.peg", "r")) -local zig_grammar = f:read("*all") +local raw = f:read("*all") f:close() -pg.compile(zig_grammar) +local grammar = pg.compile(raw) + +f = assert(io.open("test.zig", "r")) +raw = f:read("*all") +f:close() + +local errors = 0 +local function printerror(desc,line,col,sfail,trec) + errors = errors+1 + print("Error #"..errors..": "..desc.." on line "..line.."(col "..col..")") +end + +local result, errors = pg.parse(raw, grammar, printerror) + +my_ast = ast.parse_tree_to_ast(result) +ast.print(my_ast) diff --git a/06/test.zig b/06/test.zig new file mode 100644 index 0000000..6e4c9c5 --- /dev/null +++ b/06/test.zig @@ -0,0 +1,6 @@ + + + +pub fn main() void { + const x = 0; +} \ No newline at end of file diff --git a/06/zig.peg b/06/zig.peg index a8f2033..b4976d9 100644 --- a/06/zig.peg +++ b/06/zig.peg @@ -1,69 +1,69 @@ -Root <- skip container_doc_comment? ContainerMembers eof +Root <- container_doc_comment? container_members eof -ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations) +container_members <- container_declarations (container_field COMMA)* (container_field / container_declarations) -ContainerDeclarations - <- TestDecl ContainerDeclarations - / TopLevelComptime ContainerDeclarations - / doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations - +container_declarations + <- test_decl container_declarations + / top_level_comptime container_declarations + / doc_comment? KEYWORD_PUB? top_level_decl container_declarations + / end_of_word -TestDecl <- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block +test_decl <- doc_comment? KEYWORD_TEST block -TopLevelComptime <- doc_comment? KEYWORD_comptime BlockExpr +top_level_comptime <- doc_comment? KEYWORD_COMPTIME block_expr -TopLevelDecl - <- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block) - / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl - / KEYWORD_usingnamespace Expr SEMICOLON +top_level_decl + <- (KEYWORD_EXPORT / KEYWORD_EXTERN / (KEYWORD_INLINE / KEYWORD_NOINLINE))? fn_proto (SEMICOLON / block) + / (KEYWORD_EXPORT / KEYWORD_EXTERN )? KEYWORD_THREADLOCAL? var_decl + / KEYWORD_USINGNAMESPACE expr SEMICOLON -FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr +fn_proto <- KEYWORD_FN IDENTIFIER? LPAREN param_decl_list RPAREN byte_align? link_section? call_conv? EXCLAMATIONMARK? type_expr -VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON +var_decl <- (KEYWORD_CONST / KEYWORD_VAR) IDENTIFIER (COLON type_expr)? byte_align? link_section? (EQUAL expr)? SEMICOLON -ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)? +container_field <- doc_comment? KEYWORD_COMPTIME? IDENTIFIER (COLON (KEYWORD_ANYTYPE / type_expr) byte_align?)? (EQUAL expr)? -Statement - <- KEYWORD_comptime? VarDecl - / KEYWORD_comptime BlockExprStatement - / KEYWORD_nosuspend BlockExprStatement - / KEYWORD_suspend BlockExprStatement - / KEYWORD_defer BlockExprStatement - / KEYWORD_errdefer Payload? BlockExprStatement - / IfStatement - / LabeledStatement - / SwitchExpr - / AssignExpr SEMICOLON +statement + <- KEYWORD_COMPTIME? var_decl + / KEYWORD_COMPTIME block_expr_satement + / KEYWORD_NOSUSPEND block_expr_satement + / KEYWORD_SUSPEND block_expr_satement + / KEYWORD_DEFER block_expr_satement + / KEYWORD_ERRDEFER payload? block_expr_satement + / if_statement + / labeled_statement + / switch_expr + / assign_expr SEMICOLON -IfStatement - <- IfPrefix BlockExpr ( KEYWORD_else Payload? Statement )? - / IfPrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement ) +if_statement + <- if_prefix block_expr ( KEYWORD_ELSE payload? statement )? + / if_prefix assign_expr ( SEMICOLON / KEYWORD_ELSE payload? statement ) -LabeledStatement <- BlockLabel? (Block / LoopStatement) +labeled_statement <- block_label? (block / loop_statement) -LoopStatement <- KEYWORD_inline? (ForStatement / WhileStatement) +loop_statement <- KEYWORD_INLINE? (for_statement / while_statement) -ForStatement - <- ForPrefix BlockExpr ( KEYWORD_else Statement )? - / ForPrefix AssignExpr ( SEMICOLON / KEYWORD_else Statement ) +for_statement + <- for_prefix block_expr ( KEYWORD_ELSE statement )? + / for_prefix assign_expr ( SEMICOLON / KEYWORD_ELSE statement ) -WhileStatement - <- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )? - / WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement ) +while_statement + <- WhilePrefix block_expr ( KEYWORD_ELSE payload? statement )? + / WhilePrefix assign_expr ( SEMICOLON / KEYWORD_ELSE payload? statement ) -BlockExprStatement - <- BlockExpr - / AssignExpr SEMICOLON +block_expr_satement + <- block_expr + / assign_expr SEMICOLON -BlockExpr <- BlockLabel? Block +block_expr <- block_label? block -AssignExpr <- Expr (AssignOp Expr)? +assign_expr <- expr (AssignOp expr)? -Expr <- BoolOrExpr +expr <- bool_or_expr -BoolOrExpr <- BoolAndExpr (KEYWORD_or BoolAndExpr)* +bool_or_expr <- BoolAndExpr (KEYWORD_OR BoolAndExpr)* -BoolAndExpr <- CompareExpr (KEYWORD_and CompareExpr)* +BoolAndExpr <- CompareExpr (KEYWORD_AND CompareExpr)* CompareExpr <- BitwiseExpr (CompareOp BitwiseExpr)? @@ -80,39 +80,39 @@ PrefixExpr <- PrefixOp* PrimaryExpr PrimaryExpr <- AsmExpr / IfExpr - / KEYWORD_break BreakLabel? Expr? - / KEYWORD_comptime Expr - / KEYWORD_nosuspend Expr - / KEYWORD_continue BreakLabel? - / KEYWORD_resume Expr - / KEYWORD_return Expr? - / BlockLabel? LoopExpr - / Block + / KEYWORD_BREAK BreakLabel? expr? + / KEYWORD_COMPTIME expr + / KEYWORD_NOSUSPEND expr + / KEYWORD_CONTINUE BreakLabel? + / KEYWORD_RESUME expr + / KEYWORD_RETURN expr? + / block_label? LoopExpr + / block / CurlySuffixExpr -IfExpr <- IfPrefix Expr (KEYWORD_else Payload? Expr)? +IfExpr <- if_prefix expr (KEYWORD_ELSE payload? expr)? -Block <- LBRACE Statement* RBRACE +block <- LBRACE statement* RBRACE -LoopExpr <- KEYWORD_inline? (ForExpr / WhileExpr) +LoopExpr <- KEYWORD_INLINE? (ForExpr / WhileExpr) -ForExpr <- ForPrefix Expr (KEYWORD_else Expr)? +ForExpr <- for_prefix expr (KEYWORD_ELSE expr)? -WhileExpr <- WhilePrefix Expr (KEYWORD_else Payload? Expr)? +WhileExpr <- WhilePrefix expr (KEYWORD_ELSE payload? expr)? -CurlySuffixExpr <- TypeExpr InitList? +CurlySuffixExpr <- type_expr InitList? InitList <- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE - / LBRACE Expr (COMMA Expr)* COMMA? RBRACE + / LBRACE expr (COMMA expr)* COMMA? RBRACE / LBRACE RBRACE -TypeExpr <- PrefixTypeOp* ErrorUnionExpr +type_expr <- PrefixTypeOp* ErrorUnionExpr -ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK TypeExpr)? +ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK type_expr)? SuffixExpr - <- KEYWORD_async PrimaryTypeExpr SuffixOp* FnCallArguments + <- KEYWORD_ASYNC PrimaryTypeExpr SuffixOp* FnCallArguments / PrimaryTypeExpr (SuffixOp / FnCallArguments)* PrimaryTypeExpr @@ -123,91 +123,91 @@ PrimaryTypeExpr / DOT InitList / ErrorSetDecl / FLOAT - / FnProto + / fn_proto / GroupedExpr / LabeledTypeExpr / IDENTIFIER / IfTypeExpr / INTEGER - / KEYWORD_comptime TypeExpr - / KEYWORD_error DOT IDENTIFIER - / KEYWORD_anyframe - / KEYWORD_unreachable + / KEYWORD_COMPTIME type_expr + / KEYWORD_ERROR DOT IDENTIFIER + / KEYWORD_ANYFRAME + / KEYWORD_UNREACHABLE / STRINGLITERAL - / SwitchExpr + / switch_expr -ContainerDecl <- (KEYWORD_extern / KEYWORD_packed)? ContainerDeclAuto +ContainerDecl <- (KEYWORD_EXTERN / KEYWORD_PACKED)? ContainerDeclAuto -ErrorSetDecl <- KEYWORD_error LBRACE IdentifierList RBRACE +ErrorSetDecl <- KEYWORD_ERROR LBRACE IdentifierList RBRACE -GroupedExpr <- LPAREN Expr RPAREN +GroupedExpr <- LPAREN expr RPAREN -IfTypeExpr <- IfPrefix TypeExpr (KEYWORD_else Payload? TypeExpr)? +IfTypeExpr <- if_prefix type_expr (KEYWORD_ELSE payload? type_expr)? LabeledTypeExpr - <- BlockLabel Block - / BlockLabel? LoopTypeExpr + <- block_label block + / block_label? LoopTypeExpr -LoopTypeExpr <- KEYWORD_inline? (ForTypeExpr / WhileTypeExpr) +LoopTypeExpr <- KEYWORD_INLINE? (ForTypeExpr / WhileTypeExpr) -ForTypeExpr <- ForPrefix TypeExpr (KEYWORD_else TypeExpr)? +ForTypeExpr <- for_prefix type_expr (KEYWORD_ELSE type_expr)? -WhileTypeExpr <- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)? +WhileTypeExpr <- WhilePrefix type_expr (KEYWORD_ELSE payload? type_expr)? -SwitchExpr <- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE +switch_expr <- KEYWORD_SWITCH LPAREN expr RPAREN LBRACE switch_prong_list RBRACE -AsmExpr <- KEYWORD_asm KEYWORD_volatile? LPAREN Expr AsmOutput? RPAREN +AsmExpr <- KEYWORD_ASM KEYWORD_VOLATILE? LPAREN expr AsmOutput? RPAREN AsmOutput <- COLON AsmOutputList AsmInput? -AsmOutputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN (MINUSRARROW TypeExpr / IDENTIFIER) RPAREN +AsmOutputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN (MINUSRARROW type_expr / IDENTIFIER) RPAREN AsmInput <- COLON AsmInputList AsmClobbers? -AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN Expr RPAREN +AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN expr RPAREN AsmClobbers <- COLON StringList BreakLabel <- COLON IDENTIFIER -BlockLabel <- IDENTIFIER COLON +block_label <- IDENTIFIER COLON -FieldInit <- DOT IDENTIFIER EQUAL Expr +FieldInit <- DOT IDENTIFIER EQUAL expr -WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN +while_continue_expr <- COLON LPAREN assign_expr RPAREN -LinkSection <- KEYWORD_linksection LPAREN Expr RPAREN +link_section <- KEYWORD_LINKSECTION LPAREN expr RPAREN -CallConv <- KEYWORD_callconv LPAREN Expr RPAREN +call_conv <- KEYWORD_CALLCONV LPAREN expr RPAREN -ParamDecl - <- doc_comment? (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType +param_decl + <- doc_comment? (KEYWORD_NOALIAS / KEYWORD_COMPTIME)? (IDENTIFIER COLON)? param_type / DOT3 -ParamType - <- KEYWORD_anytype - / TypeExpr +param_type + <- KEYWORD_ANYTYPE + / type_expr -IfPrefix <- KEYWORD_if LPAREN Expr RPAREN PtrPayload? +if_prefix <- KEYWORD_IF LPAREN expr RPAREN PtrPayload? -WhilePrefix <- KEYWORD_while LPAREN Expr RPAREN PtrPayload? WhileContinueExpr? +WhilePrefix <- KEYWORD_WHILE LPAREN expr RPAREN PtrPayload? while_continue_expr? -ForPrefix <- KEYWORD_for LPAREN Expr RPAREN PtrIndexPayload +for_prefix <- KEYWORD_FOR LPAREN expr RPAREN ptr_index_payload -Payload <- PIPE IDENTIFIER PIPE +payload <- PIPE IDENTIFIER PIPE PtrPayload <- PIPE ASTERISK? IDENTIFIER PIPE -PtrIndexPayload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE +ptr_index_payload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE -SwitchProng <- SwitchCase EQUALRARROW PtrPayload? AssignExpr +SwitchProng <- SwitchCase EQUALRARROW PtrPayload? assign_expr SwitchCase <- SwitchItem (COMMA SwitchItem)* COMMA? - / KEYWORD_else + / KEYWORD_ELSE -SwitchItem <- Expr (DOT3 Expr)? +SwitchItem <- expr (DOT3 expr)? AssignOp <- ASTERISKEQUAL @@ -237,8 +237,8 @@ BitwiseOp <- AMPERSAND / CARET / PIPE - / KEYWORD_orelse - / KEYWORD_catch Payload? + / KEYWORD_ORELSE + / KEYWORD_CATCH payload? BitShiftOp <- LARROW2 @@ -265,46 +265,46 @@ PrefixOp / TILDE / MINUSPERCENT / AMPERSAND - / KEYWORD_try - / KEYWORD_await + / KEYWORD_TRY + / KEYWORD_AWAIT PrefixTypeOp <- QUESTIONMARK - / KEYWORD_anyframe MINUSRARROW - / SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* - / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* + / KEYWORD_ANYFRAME MINUSRARROW + / SliceTypeStart (byte_align / KEYWORD_CONST / KEYWORD_VOLATILE / KEYWORD_ALLOWZERO)* + / PtrTypeStart (KEYWORD_ALIGN LPAREN expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_CONST / KEYWORD_VOLATILE / KEYWORD_ALLOWZERO)* / ArrayTypeStart SuffixOp - <- LBRACKET Expr (DOT2 (Expr? (COLON Expr)?)?)? RBRACKET + <- LBRACKET expr (DOT2 (expr? (COLON expr)?)?)? RBRACKET / DOT IDENTIFIER / DOTASTERISK / DOTQUESTIONMARK -FnCallArguments <- LPAREN ExprList RPAREN +FnCallArguments <- LPAREN expr_list RPAREN -SliceTypeStart <- LBRACKET (COLON Expr)? RBRACKET +SliceTypeStart <- LBRACKET (COLON expr)? RBRACKET PtrTypeStart <- ASTERISK / ASTERISK2 - / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET + / LBRACKET ASTERISK (LETTERC / COLON expr)? RBRACKET -ArrayTypeStart <- LBRACKET Expr (COLON Expr)? RBRACKET +ArrayTypeStart <- LBRACKET expr (COLON expr)? RBRACKET -ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE +ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? container_members RBRACE ContainerDeclType - <- KEYWORD_struct - / KEYWORD_opaque - / KEYWORD_enum (LPAREN Expr RPAREN)? - / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)? + <- KEYWORD_STRUCT + / KEYWORD_OPAQUE + / KEYWORD_ENUM (LPAREN expr RPAREN)? + / KEYWORD_UNION (LPAREN (KEYWORD_ENUM (LPAREN expr RPAREN)? / expr) RPAREN)? -ByteAlign <- KEYWORD_align LPAREN Expr RPAREN +byte_align <- KEYWORD_ALIGN LPAREN expr RPAREN IdentifierList <- (doc_comment? IDENTIFIER COMMA)* (doc_comment? IDENTIFIER)? -SwitchProngList <- (SwitchProng COMMA)* SwitchProng? +switch_prong_list <- (SwitchProng COMMA)* SwitchProng? AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem? @@ -312,9 +312,9 @@ AsmInputList <- (AsmInputItem COMMA)* AsmInputItem? StringList <- (STRINGLITERAL COMMA)* STRINGLITERAL? -ParamDeclList <- (ParamDecl COMMA)* ParamDecl? +param_decl_list <- (param_decl COMMA)* param_decl? -ExprList <- (Expr COMMA)* Expr? +expr_list <- (expr COMMA)* expr? eof <- !. bin <- [01] @@ -374,145 +374,143 @@ container_doc_comment <- ('//!' [^\n]* [ \n]*)+ doc_comment <- ('///' [^\n]* [ \n]*)+ line_comment <- '//' ![!/][^\n]* / '////' [^\n]* line_string <- ("\\\\" [^\n]* [ \n]*)+ -skip <- ([ \n] / line_comment)* -CHAR_LITERAL <- "'" char_char "'" skip +CHAR_LITERAL <- "'" char_char "'" FLOAT - <- "0x" hex_int "." hex_int ([pP] [-+]? dec_int)? skip - / dec_int "." dec_int ([eE] [-+]? dec_int)? skip - / "0x" hex_int [pP] [-+]? dec_int skip - / dec_int [eE] [-+]? dec_int skip + <- "0x" hex_int "." hex_int ([pP] [-+]? dec_int)? + / dec_int "." dec_int ([eE] [-+]? dec_int)? + / "0x" hex_int [pP] [-+]? dec_int + / dec_int [eE] [-+]? dec_int INTEGER - <- "0b" bin_int skip - / "0o" oct_int skip - / "0x" hex_int skip - / dec_int skip -STRINGLITERALSINGLE <- "\"" string_char* "\"" skip + <- "0b" bin_int + / "0o" oct_int + / "0x" hex_int + / dec_int +STRINGLITERALSINGLE <- '"' string_char* '"' STRINGLITERAL <- STRINGLITERALSINGLE - / (line_string skip)+ + / (line_string)+ IDENTIFIER - <- !keyword [A-Za-z_] [A-Za-z0-9_]* skip - / "@\"" string_char* "\"" skip -BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip + <- !KEYWORD [A-Za-z_] [A-Za-z0-9_]* +BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* -AMPERSAND <- '&' ![=] skip -AMPERSANDEQUAL <- '&=' skip -ASTERISK <- '*' ![*%=] skip -ASTERISK2 <- '**' skip -ASTERISKEQUAL <- '*=' skip -ASTERISKPERCENT <- '*%' ![=] skip -ASTERISKPERCENTEQUAL <- '*%=' skip -CARET <- '^' ![=] skip -CARETEQUAL <- '^=' skip -COLON <- ':' skip -COMMA <- ',' skip -DOT <- '.' ![*.?] skip -DOT2 <- '..' ![.] skip -DOT3 <- '...' skip -DOTASTERISK <- '.*' skip -DOTQUESTIONMARK <- '.?' skip -EQUAL <- '=' ![>=] skip -EQUALEQUAL <- '==' skip -EQUALRARROW <- '=>' skip -EXCLAMATIONMARK <- '!' ![=] skip -EXCLAMATIONMARKEQUAL <- '!=' skip -LARROW <- '<' ![<=] skip -LARROW2 <- '<<' ![=] skip -LARROW2EQUAL <- '<<=' skip -LARROWEQUAL <- '<=' skip -LBRACE <- '{' skip -LBRACKET <- '[' skip -LPAREN <- '(' skip -MINUS <- '-' ![%=>] skip -MINUSEQUAL <- '-=' skip -MINUSPERCENT <- '-%' ![=] skip -MINUSPERCENTEQUAL <- '-%=' skip -MINUSRARROW <- '->' skip -PERCENT <- '%' ![=] skip -PERCENTEQUAL <- '%=' skip -PIPE <- '|' ![|=] skip -PIPE2 <- '||' skip -PIPEEQUAL <- '|=' skip -PLUS <- '+' ![%+=] skip -PLUS2 <- '++' skip -PLUSEQUAL <- '+=' skip -PLUSPERCENT <- '+%' ![=] skip -PLUSPERCENTEQUAL <- '+%=' skip -LETTERC <- 'c' skip -QUESTIONMARK <- '?' skip -RARROW <- '>' ![>=] skip -RARROW2 <- '>>' ![=] skip -RARROW2EQUAL <- '>>=' skip -RARROWEQUAL <- '>=' skip -RBRACE <- '}' skip -RBRACKET <- ']' skip -RPAREN <- ')' skip -SEMICOLON <- ';' skip -SLASH <- '/' ![=] skip -SLASHEQUAL <- '/=' skip -TILDE <- '~' skip +AMPERSAND <- '&' ![=] +AMPERSANDEQUAL <- '&=' +ASTERISK <- '*' ![*%=] +ASTERISK2 <- '**' +ASTERISKEQUAL <- '*=' +ASTERISKPERCENT <- '*%' ![=] +ASTERISKPERCENTEQUAL <- '*%=' +CARET <- '^' ![=] +CARETEQUAL <- '^=' +COLON <- ':' +COMMA <- ',' +DOT <- '.' ![*.?] +DOT2 <- '..' ![.] +DOT3 <- '...' +DOTASTERISK <- '.*' +DOTQUESTIONMARK <- '.?' +EQUAL <- '=' ![>=] +EQUALEQUAL <- '==' +EQUALRARROW <- '=>' +EXCLAMATIONMARK <- '!' ![=] +EXCLAMATIONMARKEQUAL <- '!=' +LARROW <- '<' ![<=] +LARROW2 <- '<<' ![=] +LARROW2EQUAL <- '<<=' +LARROWEQUAL <- '<=' +LBRACE <- '{' +LBRACKET <- '[' +LPAREN <- '(' +MINUS <- '-' ![%=>] +MINUSEQUAL <- '-=' +MINUSPERCENT <- '-%' ![=] +MINUSPERCENTEQUAL <- '-%=' +MINUSRARROW <- '->' +PERCENT <- '%' ![=] +PERCENTEQUAL <- '%=' +PIPE <- '|' ![|=] +PIPE2 <- '||' +PIPEEQUAL <- '|=' +PLUS <- '+' ![%+=] +PLUS2 <- '++' +PLUSEQUAL <- '+=' +PLUSPERCENT <- '+%' ![=] +PLUSPERCENTEQUAL <- '+%=' +LETTERC <- 'c' +QUESTIONMARK <- '?' +RARROW <- '>' ![>=] +RARROW2 <- '>>' ![=] +RARROW2EQUAL <- '>>=' +RARROWEQUAL <- '>=' +RBRACE <- '}' +RBRACKET <- ']' +RPAREN <- ')' +SEMICOLON <- ';' +SLASH <- '/' ![=] +SLASHEQUAL <- '/=' +TILDE <- '~' -end_of_word <- ![a-zA-Z0-9_] skip -KEYWORD_align <- 'align' end_of_word -KEYWORD_allowzero <- 'allowzero' end_of_word -KEYWORD_and <- 'and' end_of_word -KEYWORD_anyframe <- 'anyframe' end_of_word -KEYWORD_anytype <- 'anytype' end_of_word -KEYWORD_asm <- 'asm' end_of_word -KEYWORD_async <- 'async' end_of_word -KEYWORD_await <- 'await' end_of_word -KEYWORD_break <- 'break' end_of_word -KEYWORD_callconv <- 'callconv' end_of_word -KEYWORD_catch <- 'catch' end_of_word -KEYWORD_comptime <- 'comptime' end_of_word -KEYWORD_const <- 'const' end_of_word -KEYWORD_continue <- 'continue' end_of_word -KEYWORD_defer <- 'defer' end_of_word -KEYWORD_else <- 'else' end_of_word -KEYWORD_enum <- 'enum' end_of_word -KEYWORD_errdefer <- 'errdefer' end_of_word -KEYWORD_error <- 'error' end_of_word -KEYWORD_export <- 'export' end_of_word -KEYWORD_extern <- 'extern' end_of_word -KEYWORD_fn <- 'fn' end_of_word -KEYWORD_for <- 'for' end_of_word -KEYWORD_if <- 'if' end_of_word -KEYWORD_inline <- 'inline' end_of_word -KEYWORD_noalias <- 'noalias' end_of_word -KEYWORD_nosuspend <- 'nosuspend' end_of_word -KEYWORD_noinline <- 'noinline' end_of_word -KEYWORD_opaque <- 'opaque' end_of_word -KEYWORD_or <- 'or' end_of_word -KEYWORD_orelse <- 'orelse' end_of_word -KEYWORD_packed <- 'packed' end_of_word -KEYWORD_pub <- 'pub' end_of_word -KEYWORD_resume <- 'resume' end_of_word -KEYWORD_return <- 'return' end_of_word -KEYWORD_linksection <- 'linksection' end_of_word -KEYWORD_struct <- 'struct' end_of_word -KEYWORD_suspend <- 'suspend' end_of_word -KEYWORD_switch <- 'switch' end_of_word -KEYWORD_test <- 'test' end_of_word -KEYWORD_threadlocal <- 'threadlocal' end_of_word -KEYWORD_try <- 'try' end_of_word -KEYWORD_union <- 'union' end_of_word -KEYWORD_unreachable <- 'unreachable' end_of_word -KEYWORD_usingnamespace <- 'usingnamespace' end_of_word -KEYWORD_var <- 'var' end_of_word -KEYWORD_volatile <- 'volatile' end_of_word -KEYWORD_while <- 'while' end_of_word +fragment end_of_word <- ![a-zA-Z0-9_] +KEYWORD_ALIGN <- 'align' end_of_word +KEYWORD_ALLOWZERO <- 'allowzero' end_of_word +KEYWORD_AND <- 'and' end_of_word +KEYWORD_ANYFRAME <- 'anyframe' end_of_word +KEYWORD_ANYTYPE <- 'anytype' end_of_word +KEYWORD_ASM <- 'asm' end_of_word +KEYWORD_ASYNC <- 'async' end_of_word +KEYWORD_AWAIT <- 'await' end_of_word +KEYWORD_BREAK <- 'break' end_of_word +KEYWORD_CALLCONV <- 'callconv' end_of_word +KEYWORD_CATCH <- 'catch' end_of_word +KEYWORD_COMPTIME <- 'comptime' end_of_word +KEYWORD_CONST <- 'const' end_of_word +KEYWORD_CONTINUE <- 'continue' end_of_word +KEYWORD_DEFER <- 'defer' end_of_word +KEYWORD_ELSE <- 'else' end_of_word +KEYWORD_ENUM <- 'enum' end_of_word +KEYWORD_ERRDEFER <- 'errdefer' end_of_word +KEYWORD_ERROR <- 'error' end_of_word +KEYWORD_EXPORT <- 'export' end_of_word +KEYWORD_EXTERN <- 'extern' end_of_word +KEYWORD_FN <- 'fn' end_of_word +KEYWORD_FOR <- 'for' end_of_word +KEYWORD_IF <- 'if' end_of_word +KEYWORD_INLINE <- 'inline' end_of_word +KEYWORD_NOALIAS <- 'noalias' end_of_word +KEYWORD_NOSUSPEND <- 'nosuspend' end_of_word +KEYWORD_NOINLINE <- 'noinline' end_of_word +KEYWORD_OPAQUE <- 'opaque' end_of_word +KEYWORD_OR <- 'or' end_of_word +KEYWORD_ORELSE <- 'orelse' end_of_word +KEYWORD_PACKED <- 'packed' end_of_word +KEYWORD_PUB <- 'pub' end_of_word +KEYWORD_RESUME <- 'resume' end_of_word +KEYWORD_RETURN <- 'return' end_of_word +KEYWORD_LINKSECTION <- 'linksection' end_of_word +KEYWORD_STRUCT <- 'struct' end_of_word +KEYWORD_SUSPEND <- 'suspend' end_of_word +KEYWORD_SWITCH <- 'switch' end_of_word +KEYWORD_TEST <- 'test' end_of_word +KEYWORD_THREADLOCAL <- 'threadlocal' end_of_word +KEYWORD_TRY <- 'try' end_of_word +KEYWORD_UNION <- 'union' end_of_word +KEYWORD_UNREACHABLE <- 'unreachable' end_of_word +KEYWORD_USINGNAMESPACE <- 'usingnamespace' end_of_word +KEYWORD_VAR <- 'var' end_of_word +KEYWORD_VOLATILE <- 'volatile' end_of_word +KEYWORD_WHILE <- 'while' end_of_word -keyword <- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe - / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async / KEYWORD_await - / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime - / KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else - / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export - / KEYWORD_extern / KEYWORD_fn / KEYWORD_for / KEYWORD_if - / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline - / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed - / KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection - / KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch / KEYWORD_test - / KEYWORD_threadlocal / KEYWORD_try / KEYWORD_union / KEYWORD_unreachable - / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while \ No newline at end of file +KEYWORD <- KEYWORD_ALIGN / KEYWORD_ALLOWZERO / KEYWORD_AND / KEYWORD_ANYFRAME + / KEYWORD_ANYTYPE / KEYWORD_ASM / KEYWORD_ASYNC / KEYWORD_AWAIT + / KEYWORD_BREAK / KEYWORD_CALLCONV / KEYWORD_CATCH / KEYWORD_COMPTIME + / KEYWORD_CONST / KEYWORD_CONTINUE / KEYWORD_DEFER / KEYWORD_ELSE + / KEYWORD_ENUM / KEYWORD_ERRDEFER / KEYWORD_ERROR / KEYWORD_EXPORT + / KEYWORD_EXTERN / KEYWORD_FN / KEYWORD_FOR / KEYWORD_IF + / KEYWORD_INLINE / KEYWORD_NOALIAS / KEYWORD_NOSUSPEND / KEYWORD_NOINLINE + / KEYWORD_OPAQUE / KEYWORD_OR / KEYWORD_ORELSE / KEYWORD_PACKED + / KEYWORD_PUB / KEYWORD_RESUME / KEYWORD_RETURN / KEYWORD_LINKSECTION + / KEYWORD_STRUCT / KEYWORD_SUSPEND / KEYWORD_SWITCH / KEYWORD_TEST + / KEYWORD_THREADLOCAL / KEYWORD_TRY / KEYWORD_UNION / KEYWORD_UNREACHABLE + / KEYWORD_USINGNAMESPACE / KEYWORD_VAR / KEYWORD_VOLATILE / KEYWORD_WHILE \ No newline at end of file diff --git a/kitty b/kitty new file mode 100755 index 0000000..78d2ae8 --- /dev/null +++ b/kitty @@ -0,0 +1,17 @@ +new_tab code +layout horizontal +launch --title "code" bash + +new_tab terminal +layout horizontal +launch bash + +new_tab webdev +layout horizontal +launch bash + +new_tab ranger +enabled_layouts horizontal,stack +layout horizontal +launch ranger + diff --git a/kitty.conf b/kitty.conf new file mode 100644 index 0000000..e79a8ca --- /dev/null +++ b/kitty.conf @@ -0,0 +1,5 @@ +map alt+, launch ./scripts/run.sh +map alt+. launch ./scripts/build.sh +map alt+shift+. launch ./scripts/test.sh +map alt+shfit+, launch ./scripts/debug.sh +map alt+shift+m launch ./scripts/script2.sh diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..a15896f --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +./bootstrap.sh diff --git a/scripts/run.sh b/scripts/run.sh new file mode 100755 index 0000000..86b46b6 --- /dev/null +++ b/scripts/run.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +cd 06 && ./zsh 2>&1 | less -R +F \ No newline at end of file