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.
This commit is contained in:
Dawid Sobczak 2023-09-19 11:42:10 +01:00
parent 858fe11666
commit fe22cc7665
13 changed files with 367 additions and 259 deletions

10
.ignore Normal file
View file

@ -0,0 +1,10 @@
00*
01*
02*
03*
04*
05*
06/deps/lua-
06/deps/lua-*
tofix

View file

@ -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

5
06/arith.peg Normal file
View file

@ -0,0 +1,5 @@
Expr <- Sum
Sum <- Product (('+' / '-') Product)*
Product <- Power (('*' / '/') Power)*
Power <- Value ('^' Power)?
Value <- [0-9]+ / '(' Expr ')'

View file

@ -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

13
06/kitty Executable file
View file

@ -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

32
06/src/ast.lua Normal file
View file

@ -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
}

View file

@ -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)

6
06/test.zig Normal file
View file

@ -0,0 +1,6 @@
pub fn main() void {
const x = 0;
}

View file

@ -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
test_decl <- doc_comment? KEYWORD_TEST block
TestDecl <- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block
top_level_comptime <- doc_comment? KEYWORD_COMPTIME block_expr
TopLevelComptime <- doc_comment? KEYWORD_comptime BlockExpr
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
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
fn_proto <- KEYWORD_FN IDENTIFIER? LPAREN param_decl_list RPAREN byte_align? link_section? call_conv? EXCLAMATIONMARK? type_expr
FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr
var_decl <- (KEYWORD_CONST / KEYWORD_VAR) IDENTIFIER (COLON type_expr)? byte_align? link_section? (EQUAL expr)? SEMICOLON
VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON
container_field <- doc_comment? KEYWORD_COMPTIME? IDENTIFIER (COLON (KEYWORD_ANYTYPE / type_expr) byte_align?)? (EQUAL expr)?
ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)?
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
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
if_statement
<- if_prefix block_expr ( KEYWORD_ELSE payload? statement )?
/ if_prefix assign_expr ( SEMICOLON / KEYWORD_ELSE payload? statement )
IfStatement
<- IfPrefix BlockExpr ( KEYWORD_else Payload? Statement )?
/ IfPrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
labeled_statement <- block_label? (block / loop_statement)
LabeledStatement <- BlockLabel? (Block / LoopStatement)
loop_statement <- KEYWORD_INLINE? (for_statement / while_statement)
LoopStatement <- KEYWORD_inline? (ForStatement / WhileStatement)
for_statement
<- for_prefix block_expr ( KEYWORD_ELSE statement )?
/ for_prefix assign_expr ( SEMICOLON / KEYWORD_ELSE statement )
ForStatement
<- ForPrefix BlockExpr ( KEYWORD_else Statement )?
/ ForPrefix AssignExpr ( SEMICOLON / KEYWORD_else Statement )
while_statement
<- WhilePrefix block_expr ( KEYWORD_ELSE payload? statement )?
/ WhilePrefix assign_expr ( SEMICOLON / KEYWORD_ELSE payload? statement )
WhileStatement
<- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )?
/ WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
block_expr_satement
<- block_expr
/ assign_expr SEMICOLON
BlockExprStatement
<- BlockExpr
/ AssignExpr SEMICOLON
block_expr <- block_label? block
BlockExpr <- BlockLabel? Block
assign_expr <- expr (AssignOp expr)?
AssignExpr <- Expr (AssignOp Expr)?
expr <- bool_or_expr
Expr <- BoolOrExpr
bool_or_expr <- BoolAndExpr (KEYWORD_OR BoolAndExpr)*
BoolOrExpr <- 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
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

17
kitty Executable file
View file

@ -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

5
kitty.conf Normal file
View file

@ -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

3
scripts/build.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/bash
./bootstrap.sh

3
scripts/run.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
cd 06 && ./zsh 2>&1 | less -R +F