commit 6218545883ea27f0e1461887c4cf75df923db4fa
parent 449a045f05e9089c7aa1aded5b5bbf39355bd646
Author: erai <erai@omiltem.net>
Date: Mon, 24 Mar 2025 16:45:56 +0000
remove context senstitive lexical elements
Diffstat:
M | cc0.c | | | 35 | ++++++++++++++++++++++++----------- |
M | cc3.om | | | 72 | +++++++++++++++++++++++++++++++++++------------------------------------- |
M | peg.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;