os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit 6218545883ea27f0e1461887c4cf75df923db4fa
parent 449a045f05e9089c7aa1aded5b5bbf39355bd646
Author: erai <erai@omiltem.net>
Date:   Mon, 24 Mar 2025 16:45:56 +0000

remove context senstitive lexical elements

Diffstat:
Mcc0.c | 35++++++++++++++++++++++++-----------
Mcc3.om | 72+++++++++++++++++++++++++++++++++++-------------------------------------
Mpeg.om | 4++--
3 files changed, 61 insertions(+), 50 deletions(-)

diff --git a/cc0.c b/cc0.c @@ -28390,21 +28390,34 @@ u zpeg_P_index_expr(u vc) { u v3 = 0; u v4 = 0; u v5 = 0; + u v6 = 0; + u v7 = 0; zenter(vc, 58UL); v1 = zliteral(vc, (u)"["); if (v1 == 0UL) goto b1; - v2 = zpeg_P_sp(vc); - if (v2 == 0UL) goto b1; - v3 = zpeg_P_expr(vc); + zchoice(vc); + v2 = zliteral(vc, (u)"["); + if (v2 == 0UL) goto b5; + zfail(vc); + zfail(vc); +b1: zfail(vc); + return 0UL; +b5: v3 = zpeg_P_sp(vc); if (v3 == 0UL) goto b1; - v4 = zliteral(vc, (u)"]"); + v4 = zpeg_P_expr(vc); if (v4 == 0UL) goto b1; - v5 = zpeg_P_sp(vc); + v5 = zliteral(vc, (u)"]"); if (v5 == 0UL) goto b1; + zchoice(vc); + v6 = zliteral(vc, (u)"]"); + if (v6 == 0UL) goto b17; + zfail(vc); + zfail(vc); + goto b1; +b17: v7 = zpeg_P_sp(vc); + if (v7 == 0UL) goto b1; zleave(vc, 58UL); return 1UL; -b1: zfail(vc); - return 0UL; } u zpeg_P_int(u vc) { u v1 = 0; @@ -28791,7 +28804,7 @@ u zpeg_P_peg_class(u vc) { u v6 = 0; u v7 = 0; zenter(vc, 104UL); - v1 = zliteral(vc, (u)"["); + v1 = zliteral(vc, (u)"[["); if (v1 == 0UL) goto b1; b5: zchoice(vc); zchoice(vc); @@ -28799,7 +28812,7 @@ b5: zchoice(vc); if (v2 == 0UL) goto b8; zfail(vc); zfail(vc); -b6: v7 = zliteral(vc, (u)"]"); +b6: v7 = zliteral(vc, (u)"]]"); if (v7 == 0UL) goto b1; zleave(vc, 104UL); return 1UL; @@ -34877,8 +34890,8 @@ u ztranslate_charset(u vc, u vic, u vfail, u vn) { v22 = 256UL; v23 = ((u(*)())v19)(v20, v21, v22); v23; - vi = 1UL; - vlen = *(u*)(vn + 32UL) - 1UL; + vi = 2UL; + vlen = *(u*)(vn + 32UL) - 2UL; b2: if (vi != vlen) goto b6; vcount = 0UL; vi = 1UL; diff --git a/cc3.om b/cc3.om @@ -88,7 +88,7 @@ peg_grammar { bnot_op = "!" !"="; unary_expr = ((ref_op / deref_op / pos_op / neg_op / not_op / bnot_op) sp)* post_expr; - index_expr = "[" sp expr "]" sp; + index_expr = "[" !"[" sp expr "]" !"]" sp; call_expr = "(" sp ( expr ("," sp expr)* )? ("," sp)? ")" sp; member_expr = "." sp ident sp; cast_expr = "as" sp type; @@ -99,55 +99,53 @@ peg_grammar { sizeof_expr = sizeof sp "(" sp expr ")" sp; - hex = "0x" [0-9a-fA-F_]+; - dec = !"_" [0-9_]+; - str = "\"" ([\\] . / !"\"" .)* "\""; - char = "'" ([\\] . / !"'" .)+ "'"; + hex = "0x" [[0-9a-fA-F_]]+; + dec = !"_" [[0-9_]]+; + str = "\"" ([[\\]] . / !"\"" .)* "\""; + char = "'" ([[\\]] . / !"'" .)+ "'"; reserved = return / break / sizeof / if / else / loop / continue / goto / var / enum / struct / union / byte / int / void / func / as / nil / peg / lex / lalr; - return = "return" ![a-zA-Z0-9_]; - break = "break" ![a-zA-Z0-9_]; - sizeof = "sizeof" ![a-zA-Z0-9_]; - if = "if" ![a-zA-Z0-9_]; - else = "else" ![a-zA-Z0-9_]; - loop = "loop" ![a-zA-Z0-9_]; - continue = "continue" ![a-zA-Z0-9_]; - goto = "goto" ![a-zA-Z0-9_]; - var = "var" ![a-zA-Z0-9_]; - enum = "enum" ![a-zA-Z0-9_]; - struct = "struct" ![a-zA-Z0-9_]; - union = "union" ![a-zA-Z0-9_]; - byte = "byte" ![a-zA-Z0-9_]; - int = "int" ![a-zA-Z0-9_]; - void = "void" ![a-zA-Z0-9_]; - func = "func" ![a-zA-Z0-9_]; - as = "as" ![a-zA-Z0-9_]; - nil = "nil" ![a-zA-Z0-9_]; - peg = "peg_grammar" ![a-zA-Z0-9_]; - lex = "lexer" ![a-zA-Z0-9_]; - lalr = "lalr_grammar" ![a-zA-Z0-9_]; - - ident = !reserved [a-zA-Z_][a-zA-Z0-9_]*; - - sp = ( [ \r\n\t] / "//" (![\r\n] .)* )*; - - // NOTE: This makes the language context sensitive by use of [ + return = "return" ![[a-zA-Z0-9_]]; + break = "break" ![[a-zA-Z0-9_]]; + sizeof = "sizeof" ![[a-zA-Z0-9_]]; + if = "if" ![[a-zA-Z0-9_]]; + else = "else" ![[a-zA-Z0-9_]]; + loop = "loop" ![[a-zA-Z0-9_]]; + continue = "continue" ![[a-zA-Z0-9_]]; + goto = "goto" ![[a-zA-Z0-9_]]; + var = "var" ![[a-zA-Z0-9_]]; + enum = "enum" ![[a-zA-Z0-9_]]; + struct = "struct" ![[a-zA-Z0-9_]]; + union = "union" ![[a-zA-Z0-9_]]; + byte = "byte" ![[a-zA-Z0-9_]]; + int = "int" ![[a-zA-Z0-9_]]; + void = "void" ![[a-zA-Z0-9_]]; + func = "func" ![[a-zA-Z0-9_]]; + as = "as" ![[a-zA-Z0-9_]]; + nil = "nil" ![[a-zA-Z0-9_]]; + peg = "peg_grammar" ![[a-zA-Z0-9_]]; + lex = "lexer" ![[a-zA-Z0-9_]]; + lalr = "lalr_grammar" ![[a-zA-Z0-9_]]; + + ident = !reserved [[a-zA-Z_]][[a-zA-Z0-9_]]*; + + sp = ( [[ \r\n\t]] / "//" (![[\r\n]] .)* )*; peg_grammar = "peg_grammar" sp "{" sp peg_rule+ "}" sp; peg_rule = peg_identifier sp "=" sp peg_pattern ";" sp; peg_pattern = peg_alternative ( "/" !"/" sp peg_alternative )*; peg_alternative = peg_lookahead+; - peg_lookop = [!&]; + peg_lookop = [[!&]]; peg_lookahead = (peg_lookop sp)? peg_suffix; - peg_countop = [*+?]; + peg_countop = [[*+?]]; peg_suffix = peg_primary (peg_countop sp)*; peg_primary = ( "(" sp peg_pattern ")" / peg_any / peg_literal / peg_class / peg_call ) sp; peg_any = "."; - peg_literal = "\"" ([\\] . / !"\"" .)* "\""; - peg_class = "[" ( !"]" ( . "-" . / . ) )* "]"; + peg_literal = "\"" ([[\\]] . / !"\"" .)* "\""; + peg_class = "[[" ( !"]" ( . "-" . / . ) )* "]]"; peg_call = peg_identifier !(sp "="); - peg_identifier = [a-zA-Z0-9_]+; + peg_identifier = [[a-zA-Z0-9_]]+; } diff --git a/peg.om b/peg.om @@ -203,8 +203,8 @@ func translate_charset(c: *peg_compiler, ic: *irfunc, fail: *irblock, n: *peg_no memset(c.scratch, 0, 256); - i = 1; - len = n.len - 1; + i = 2; + len = n.len - 2; loop { if i == len { break;