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 Write rules into makefile to run tests
1. Create test runner if it doesn't exist for lpeglable and parser-gen 1. Create test runner if it doesn't exist for lpeglable and parser-gen
2. Update tests to lua 5.4 2. Update tests to lua 5.4
2. Fix diagnostics in tofix
3. Write a 'make test' rule 3. Write a 'make test' rule
Implement backslashed escaped characters in grammar parser 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 re = require("deps.lpeglabel.relabel")
local util = require("src.util")
local peg = {} local peg = {}
@ -256,6 +257,7 @@ function peg.pegToAST(input, defs)
table.insert(err, string.rep(" ", col-1) .. "^") table.insert(err, string.rep(" ", col-1) .. "^")
error("syntax error(s) in pattern\n" .. table.concat(err, "\n"), 3) error("syntax error(s) in pattern\n" .. table.concat(err, "\n"), 3)
end end
return r return r
end 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 pg = require("deps.parser-gen.parser-gen")
local util = require("src.util") local util = require("src.util")
local ast = require("src.ast")
local errs = {errMissingThen = "Missing Then"} -- one custom error
pg.setlabels(errs)
local f = assert(io.open("zig.peg", "r")) local f = assert(io.open("zig.peg", "r"))
local zig_grammar = f:read("*all") local raw = f:read("*all")
f:close() 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 container_declarations
<- TestDecl ContainerDeclarations <- test_decl container_declarations
/ TopLevelComptime ContainerDeclarations / top_level_comptime container_declarations
/ doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations / 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 fn_proto <- KEYWORD_FN IDENTIFIER? LPAREN param_decl_list RPAREN byte_align? link_section? call_conv? EXCLAMATIONMARK? type_expr
<- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)
/ (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
/ KEYWORD_usingnamespace Expr SEMICOLON
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 if_statement
<- KEYWORD_comptime? VarDecl <- if_prefix block_expr ( KEYWORD_ELSE payload? statement )?
/ KEYWORD_comptime BlockExprStatement / if_prefix assign_expr ( SEMICOLON / KEYWORD_ELSE payload? statement )
/ KEYWORD_nosuspend BlockExprStatement
/ KEYWORD_suspend BlockExprStatement
/ KEYWORD_defer BlockExprStatement
/ KEYWORD_errdefer Payload? BlockExprStatement
/ IfStatement
/ LabeledStatement
/ SwitchExpr
/ AssignExpr SEMICOLON
IfStatement labeled_statement <- block_label? (block / loop_statement)
<- IfPrefix BlockExpr ( KEYWORD_else Payload? Statement )?
/ IfPrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? 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 while_statement
<- ForPrefix BlockExpr ( KEYWORD_else Statement )? <- WhilePrefix block_expr ( KEYWORD_ELSE payload? statement )?
/ ForPrefix AssignExpr ( SEMICOLON / KEYWORD_else Statement ) / WhilePrefix assign_expr ( SEMICOLON / KEYWORD_ELSE payload? statement )
WhileStatement block_expr_satement
<- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )? <- block_expr
/ WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement ) / assign_expr SEMICOLON
BlockExprStatement block_expr <- block_label? block
<- BlockExpr
/ AssignExpr SEMICOLON
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)? CompareExpr <- BitwiseExpr (CompareOp BitwiseExpr)?
@ -80,39 +80,39 @@ PrefixExpr <- PrefixOp* PrimaryExpr
PrimaryExpr PrimaryExpr
<- AsmExpr <- AsmExpr
/ IfExpr / IfExpr
/ KEYWORD_break BreakLabel? Expr? / KEYWORD_BREAK BreakLabel? expr?
/ KEYWORD_comptime Expr / KEYWORD_COMPTIME expr
/ KEYWORD_nosuspend Expr / KEYWORD_NOSUSPEND expr
/ KEYWORD_continue BreakLabel? / KEYWORD_CONTINUE BreakLabel?
/ KEYWORD_resume Expr / KEYWORD_RESUME expr
/ KEYWORD_return Expr? / KEYWORD_RETURN expr?
/ BlockLabel? LoopExpr / block_label? LoopExpr
/ Block / block
/ CurlySuffixExpr / 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 InitList
<- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE <- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE
/ LBRACE Expr (COMMA Expr)* COMMA? RBRACE / LBRACE expr (COMMA expr)* COMMA? RBRACE
/ LBRACE RBRACE / LBRACE RBRACE
TypeExpr <- PrefixTypeOp* ErrorUnionExpr type_expr <- PrefixTypeOp* ErrorUnionExpr
ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK TypeExpr)? ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK type_expr)?
SuffixExpr SuffixExpr
<- KEYWORD_async PrimaryTypeExpr SuffixOp* FnCallArguments <- KEYWORD_ASYNC PrimaryTypeExpr SuffixOp* FnCallArguments
/ PrimaryTypeExpr (SuffixOp / FnCallArguments)* / PrimaryTypeExpr (SuffixOp / FnCallArguments)*
PrimaryTypeExpr PrimaryTypeExpr
@ -123,91 +123,91 @@ PrimaryTypeExpr
/ DOT InitList / DOT InitList
/ ErrorSetDecl / ErrorSetDecl
/ FLOAT / FLOAT
/ FnProto / fn_proto
/ GroupedExpr / GroupedExpr
/ LabeledTypeExpr / LabeledTypeExpr
/ IDENTIFIER / IDENTIFIER
/ IfTypeExpr / IfTypeExpr
/ INTEGER / INTEGER
/ KEYWORD_comptime TypeExpr / KEYWORD_COMPTIME type_expr
/ KEYWORD_error DOT IDENTIFIER / KEYWORD_ERROR DOT IDENTIFIER
/ KEYWORD_anyframe / KEYWORD_ANYFRAME
/ KEYWORD_unreachable / KEYWORD_UNREACHABLE
/ STRINGLITERAL / 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 LabeledTypeExpr
<- BlockLabel Block <- block_label block
/ BlockLabel? LoopTypeExpr / 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? 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? AsmInput <- COLON AsmInputList AsmClobbers?
AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN Expr RPAREN AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN expr RPAREN
AsmClobbers <- COLON StringList AsmClobbers <- COLON StringList
BreakLabel <- COLON IDENTIFIER 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 param_decl
<- doc_comment? (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType <- doc_comment? (KEYWORD_NOALIAS / KEYWORD_COMPTIME)? (IDENTIFIER COLON)? param_type
/ DOT3 / DOT3
ParamType param_type
<- KEYWORD_anytype <- KEYWORD_ANYTYPE
/ TypeExpr / 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 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 SwitchCase
<- SwitchItem (COMMA SwitchItem)* COMMA? <- SwitchItem (COMMA SwitchItem)* COMMA?
/ KEYWORD_else / KEYWORD_ELSE
SwitchItem <- Expr (DOT3 Expr)? SwitchItem <- expr (DOT3 expr)?
AssignOp AssignOp
<- ASTERISKEQUAL <- ASTERISKEQUAL
@ -237,8 +237,8 @@ BitwiseOp
<- AMPERSAND <- AMPERSAND
/ CARET / CARET
/ PIPE / PIPE
/ KEYWORD_orelse / KEYWORD_ORELSE
/ KEYWORD_catch Payload? / KEYWORD_CATCH payload?
BitShiftOp BitShiftOp
<- LARROW2 <- LARROW2
@ -265,46 +265,46 @@ PrefixOp
/ TILDE / TILDE
/ MINUSPERCENT / MINUSPERCENT
/ AMPERSAND / AMPERSAND
/ KEYWORD_try / KEYWORD_TRY
/ KEYWORD_await / KEYWORD_AWAIT
PrefixTypeOp PrefixTypeOp
<- QUESTIONMARK <- QUESTIONMARK
/ KEYWORD_anyframe MINUSRARROW / KEYWORD_ANYFRAME MINUSRARROW
/ SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* / 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)* / PtrTypeStart (KEYWORD_ALIGN LPAREN expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_CONST / KEYWORD_VOLATILE / KEYWORD_ALLOWZERO)*
/ ArrayTypeStart / ArrayTypeStart
SuffixOp SuffixOp
<- LBRACKET Expr (DOT2 (Expr? (COLON Expr)?)?)? RBRACKET <- LBRACKET expr (DOT2 (expr? (COLON expr)?)?)? RBRACKET
/ DOT IDENTIFIER / DOT IDENTIFIER
/ DOTASTERISK / DOTASTERISK
/ DOTQUESTIONMARK / DOTQUESTIONMARK
FnCallArguments <- LPAREN ExprList RPAREN FnCallArguments <- LPAREN expr_list RPAREN
SliceTypeStart <- LBRACKET (COLON Expr)? RBRACKET SliceTypeStart <- LBRACKET (COLON expr)? RBRACKET
PtrTypeStart PtrTypeStart
<- ASTERISK <- ASTERISK
/ ASTERISK2 / 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 ContainerDeclType
<- KEYWORD_struct <- KEYWORD_STRUCT
/ KEYWORD_opaque / KEYWORD_OPAQUE
/ KEYWORD_enum (LPAREN Expr RPAREN)? / KEYWORD_ENUM (LPAREN expr RPAREN)?
/ KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / 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)? IdentifierList <- (doc_comment? IDENTIFIER COMMA)* (doc_comment? IDENTIFIER)?
SwitchProngList <- (SwitchProng COMMA)* SwitchProng? switch_prong_list <- (SwitchProng COMMA)* SwitchProng?
AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem? AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem?
@ -312,9 +312,9 @@ AsmInputList <- (AsmInputItem COMMA)* AsmInputItem?
StringList <- (STRINGLITERAL COMMA)* STRINGLITERAL? 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 <- !. eof <- !.
bin <- [01] bin <- [01]
@ -374,145 +374,143 @@ container_doc_comment <- ('//!' [^\n]* [ \n]*)+
doc_comment <- ('///' [^\n]* [ \n]*)+ doc_comment <- ('///' [^\n]* [ \n]*)+
line_comment <- '//' ![!/][^\n]* / '////' [^\n]* line_comment <- '//' ![!/][^\n]* / '////' [^\n]*
line_string <- ("\\\\" [^\n]* [ \n]*)+ line_string <- ("\\\\" [^\n]* [ \n]*)+
skip <- ([ \n] / line_comment)*
CHAR_LITERAL <- "'" char_char "'" skip CHAR_LITERAL <- "'" char_char "'"
FLOAT FLOAT
<- "0x" hex_int "." hex_int ([pP] [-+]? dec_int)? skip <- "0x" hex_int "." hex_int ([pP] [-+]? dec_int)?
/ dec_int "." dec_int ([eE] [-+]? dec_int)? skip / dec_int "." dec_int ([eE] [-+]? dec_int)?
/ "0x" hex_int [pP] [-+]? dec_int skip / "0x" hex_int [pP] [-+]? dec_int
/ dec_int [eE] [-+]? dec_int skip / dec_int [eE] [-+]? dec_int
INTEGER INTEGER
<- "0b" bin_int skip <- "0b" bin_int
/ "0o" oct_int skip / "0o" oct_int
/ "0x" hex_int skip / "0x" hex_int
/ dec_int skip / dec_int
STRINGLITERALSINGLE <- "\"" string_char* "\"" skip STRINGLITERALSINGLE <- '"' string_char* '"'
STRINGLITERAL STRINGLITERAL
<- STRINGLITERALSINGLE <- STRINGLITERALSINGLE
/ (line_string skip)+ / (line_string)+
IDENTIFIER IDENTIFIER
<- !keyword [A-Za-z_] [A-Za-z0-9_]* skip <- !KEYWORD [A-Za-z_] [A-Za-z0-9_]*
/ "@\"" string_char* "\"" skip BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]*
BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip
AMPERSAND <- '&' ![=] skip AMPERSAND <- '&' ![=]
AMPERSANDEQUAL <- '&=' skip AMPERSANDEQUAL <- '&='
ASTERISK <- '*' ![*%=] skip ASTERISK <- '*' ![*%=]
ASTERISK2 <- '**' skip ASTERISK2 <- '**'
ASTERISKEQUAL <- '*=' skip ASTERISKEQUAL <- '*='
ASTERISKPERCENT <- '*%' ![=] skip ASTERISKPERCENT <- '*%' ![=]
ASTERISKPERCENTEQUAL <- '*%=' skip ASTERISKPERCENTEQUAL <- '*%='
CARET <- '^' ![=] skip CARET <- '^' ![=]
CARETEQUAL <- '^=' skip CARETEQUAL <- '^='
COLON <- ':' skip COLON <- ':'
COMMA <- ',' skip COMMA <- ','
DOT <- '.' ![*.?] skip DOT <- '.' ![*.?]
DOT2 <- '..' ![.] skip DOT2 <- '..' ![.]
DOT3 <- '...' skip DOT3 <- '...'
DOTASTERISK <- '.*' skip DOTASTERISK <- '.*'
DOTQUESTIONMARK <- '.?' skip DOTQUESTIONMARK <- '.?'
EQUAL <- '=' ![>=] skip EQUAL <- '=' ![>=]
EQUALEQUAL <- '==' skip EQUALEQUAL <- '=='
EQUALRARROW <- '=>' skip EQUALRARROW <- '=>'
EXCLAMATIONMARK <- '!' ![=] skip EXCLAMATIONMARK <- '!' ![=]
EXCLAMATIONMARKEQUAL <- '!=' skip EXCLAMATIONMARKEQUAL <- '!='
LARROW <- '<' ![<=] skip LARROW <- '<' ![<=]
LARROW2 <- '<<' ![=] skip LARROW2 <- '<<' ![=]
LARROW2EQUAL <- '<<=' skip LARROW2EQUAL <- '<<='
LARROWEQUAL <- '<=' skip LARROWEQUAL <- '<='
LBRACE <- '{' skip LBRACE <- '{'
LBRACKET <- '[' skip LBRACKET <- '['
LPAREN <- '(' skip LPAREN <- '('
MINUS <- '-' ![%=>] skip MINUS <- '-' ![%=>]
MINUSEQUAL <- '-=' skip MINUSEQUAL <- '-='
MINUSPERCENT <- '-%' ![=] skip MINUSPERCENT <- '-%' ![=]
MINUSPERCENTEQUAL <- '-%=' skip MINUSPERCENTEQUAL <- '-%='
MINUSRARROW <- '->' skip MINUSRARROW <- '->'
PERCENT <- '%' ![=] skip PERCENT <- '%' ![=]
PERCENTEQUAL <- '%=' skip PERCENTEQUAL <- '%='
PIPE <- '|' ![|=] skip PIPE <- '|' ![|=]
PIPE2 <- '||' skip PIPE2 <- '||'
PIPEEQUAL <- '|=' skip PIPEEQUAL <- '|='
PLUS <- '+' ![%+=] skip PLUS <- '+' ![%+=]
PLUS2 <- '++' skip PLUS2 <- '++'
PLUSEQUAL <- '+=' skip PLUSEQUAL <- '+='
PLUSPERCENT <- '+%' ![=] skip PLUSPERCENT <- '+%' ![=]
PLUSPERCENTEQUAL <- '+%=' skip PLUSPERCENTEQUAL <- '+%='
LETTERC <- 'c' skip LETTERC <- 'c'
QUESTIONMARK <- '?' skip QUESTIONMARK <- '?'
RARROW <- '>' ![>=] skip RARROW <- '>' ![>=]
RARROW2 <- '>>' ![=] skip RARROW2 <- '>>' ![=]
RARROW2EQUAL <- '>>=' skip RARROW2EQUAL <- '>>='
RARROWEQUAL <- '>=' skip RARROWEQUAL <- '>='
RBRACE <- '}' skip RBRACE <- '}'
RBRACKET <- ']' skip RBRACKET <- ']'
RPAREN <- ')' skip RPAREN <- ')'
SEMICOLON <- ';' skip SEMICOLON <- ';'
SLASH <- '/' ![=] skip SLASH <- '/' ![=]
SLASHEQUAL <- '/=' skip SLASHEQUAL <- '/='
TILDE <- '~' skip TILDE <- '~'
end_of_word <- ![a-zA-Z0-9_] skip fragment end_of_word <- ![a-zA-Z0-9_]
KEYWORD_align <- 'align' end_of_word KEYWORD_ALIGN <- 'align' end_of_word
KEYWORD_allowzero <- 'allowzero' end_of_word KEYWORD_ALLOWZERO <- 'allowzero' end_of_word
KEYWORD_and <- 'and' end_of_word KEYWORD_AND <- 'and' end_of_word
KEYWORD_anyframe <- 'anyframe' end_of_word KEYWORD_ANYFRAME <- 'anyframe' end_of_word
KEYWORD_anytype <- 'anytype' end_of_word KEYWORD_ANYTYPE <- 'anytype' end_of_word
KEYWORD_asm <- 'asm' end_of_word KEYWORD_ASM <- 'asm' end_of_word
KEYWORD_async <- 'async' end_of_word KEYWORD_ASYNC <- 'async' end_of_word
KEYWORD_await <- 'await' end_of_word KEYWORD_AWAIT <- 'await' end_of_word
KEYWORD_break <- 'break' end_of_word KEYWORD_BREAK <- 'break' end_of_word
KEYWORD_callconv <- 'callconv' end_of_word KEYWORD_CALLCONV <- 'callconv' end_of_word
KEYWORD_catch <- 'catch' end_of_word KEYWORD_CATCH <- 'catch' end_of_word
KEYWORD_comptime <- 'comptime' end_of_word KEYWORD_COMPTIME <- 'comptime' end_of_word
KEYWORD_const <- 'const' end_of_word KEYWORD_CONST <- 'const' end_of_word
KEYWORD_continue <- 'continue' end_of_word KEYWORD_CONTINUE <- 'continue' end_of_word
KEYWORD_defer <- 'defer' end_of_word KEYWORD_DEFER <- 'defer' end_of_word
KEYWORD_else <- 'else' end_of_word KEYWORD_ELSE <- 'else' end_of_word
KEYWORD_enum <- 'enum' end_of_word KEYWORD_ENUM <- 'enum' end_of_word
KEYWORD_errdefer <- 'errdefer' end_of_word KEYWORD_ERRDEFER <- 'errdefer' end_of_word
KEYWORD_error <- 'error' end_of_word KEYWORD_ERROR <- 'error' end_of_word
KEYWORD_export <- 'export' end_of_word KEYWORD_EXPORT <- 'export' end_of_word
KEYWORD_extern <- 'extern' end_of_word KEYWORD_EXTERN <- 'extern' end_of_word
KEYWORD_fn <- 'fn' end_of_word KEYWORD_FN <- 'fn' end_of_word
KEYWORD_for <- 'for' end_of_word KEYWORD_FOR <- 'for' end_of_word
KEYWORD_if <- 'if' end_of_word KEYWORD_IF <- 'if' end_of_word
KEYWORD_inline <- 'inline' end_of_word KEYWORD_INLINE <- 'inline' end_of_word
KEYWORD_noalias <- 'noalias' end_of_word KEYWORD_NOALIAS <- 'noalias' end_of_word
KEYWORD_nosuspend <- 'nosuspend' end_of_word KEYWORD_NOSUSPEND <- 'nosuspend' end_of_word
KEYWORD_noinline <- 'noinline' end_of_word KEYWORD_NOINLINE <- 'noinline' end_of_word
KEYWORD_opaque <- 'opaque' end_of_word KEYWORD_OPAQUE <- 'opaque' end_of_word
KEYWORD_or <- 'or' end_of_word KEYWORD_OR <- 'or' end_of_word
KEYWORD_orelse <- 'orelse' end_of_word KEYWORD_ORELSE <- 'orelse' end_of_word
KEYWORD_packed <- 'packed' end_of_word KEYWORD_PACKED <- 'packed' end_of_word
KEYWORD_pub <- 'pub' end_of_word KEYWORD_PUB <- 'pub' end_of_word
KEYWORD_resume <- 'resume' end_of_word KEYWORD_RESUME <- 'resume' end_of_word
KEYWORD_return <- 'return' end_of_word KEYWORD_RETURN <- 'return' end_of_word
KEYWORD_linksection <- 'linksection' end_of_word KEYWORD_LINKSECTION <- 'linksection' end_of_word
KEYWORD_struct <- 'struct' end_of_word KEYWORD_STRUCT <- 'struct' end_of_word
KEYWORD_suspend <- 'suspend' end_of_word KEYWORD_SUSPEND <- 'suspend' end_of_word
KEYWORD_switch <- 'switch' end_of_word KEYWORD_SWITCH <- 'switch' end_of_word
KEYWORD_test <- 'test' end_of_word KEYWORD_TEST <- 'test' end_of_word
KEYWORD_threadlocal <- 'threadlocal' end_of_word KEYWORD_THREADLOCAL <- 'threadlocal' end_of_word
KEYWORD_try <- 'try' end_of_word KEYWORD_TRY <- 'try' end_of_word
KEYWORD_union <- 'union' end_of_word KEYWORD_UNION <- 'union' end_of_word
KEYWORD_unreachable <- 'unreachable' end_of_word KEYWORD_UNREACHABLE <- 'unreachable' end_of_word
KEYWORD_usingnamespace <- 'usingnamespace' end_of_word KEYWORD_USINGNAMESPACE <- 'usingnamespace' end_of_word
KEYWORD_var <- 'var' end_of_word KEYWORD_VAR <- 'var' end_of_word
KEYWORD_volatile <- 'volatile' end_of_word KEYWORD_VOLATILE <- 'volatile' end_of_word
KEYWORD_while <- 'while' end_of_word KEYWORD_WHILE <- 'while' end_of_word
keyword <- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe KEYWORD <- KEYWORD_ALIGN / KEYWORD_ALLOWZERO / KEYWORD_AND / KEYWORD_ANYFRAME
/ KEYWORD_anytype / KEYWORD_asm / KEYWORD_async / KEYWORD_await / KEYWORD_ANYTYPE / KEYWORD_ASM / KEYWORD_ASYNC / KEYWORD_AWAIT
/ KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime / KEYWORD_BREAK / KEYWORD_CALLCONV / KEYWORD_CATCH / KEYWORD_COMPTIME
/ KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else / KEYWORD_CONST / KEYWORD_CONTINUE / KEYWORD_DEFER / KEYWORD_ELSE
/ KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export / KEYWORD_ENUM / KEYWORD_ERRDEFER / KEYWORD_ERROR / KEYWORD_EXPORT
/ KEYWORD_extern / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_EXTERN / KEYWORD_FN / KEYWORD_FOR / KEYWORD_IF
/ KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline / KEYWORD_INLINE / KEYWORD_NOALIAS / KEYWORD_NOSUSPEND / KEYWORD_NOINLINE
/ KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed / KEYWORD_OPAQUE / KEYWORD_OR / KEYWORD_ORELSE / KEYWORD_PACKED
/ KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection / KEYWORD_PUB / KEYWORD_RESUME / KEYWORD_RETURN / KEYWORD_LINKSECTION
/ KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch / KEYWORD_test / KEYWORD_STRUCT / KEYWORD_SUSPEND / KEYWORD_SWITCH / KEYWORD_TEST
/ KEYWORD_threadlocal / KEYWORD_try / KEYWORD_union / KEYWORD_unreachable / KEYWORD_THREADLOCAL / KEYWORD_TRY / KEYWORD_UNION / KEYWORD_UNREACHABLE
/ KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while / 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