Save work. What work?
This commit is contained in:
parent
65a5fd6984
commit
4005a12358
|
@ -58,8 +58,12 @@ complex {
|
|||
|
||||
Repeat { silent<"repeat"> (Word | Number) Block }
|
||||
|
||||
// repeat 4 { thing () }
|
||||
|
||||
Each { silent<"each"> simple "do" (Fn_Clause | Fn_Clauses) }
|
||||
|
||||
// each [1, 2, 3] do (n) -> thing
|
||||
|
||||
Recur { silent<"recur"> Args }
|
||||
|
||||
Loop { silent<"loop"> simple "with" (Fn_Clause | Fn_Clauses) }
|
||||
|
@ -287,6 +291,6 @@ Nil { silent<"nil"> }
|
|||
float { ("0" | int ) "." $[0-9]+}
|
||||
Number { "-"? (int | float) }
|
||||
separator { $[,\n] }
|
||||
terminator { $[;\n] | @eof }
|
||||
terminator { $[;\n] }
|
||||
newline { "\n" }
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"@lezer/lr": "^1.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"prepare": "lezer-generator ludus.grammar -o parser.js"
|
||||
"build": "lezer-generator ludus.grammar -o parser.js"
|
||||
},
|
||||
"author": "Scott Richmond",
|
||||
"license": "MIT"
|
||||
|
|
|
@ -10,7 +10,7 @@ export const parser = LRParser.deserialize({
|
|||
maxTerm: 120,
|
||||
skippedNodes: [0],
|
||||
repeatNodeCount: 16,
|
||||
tokenData: "-j~RnXY#PYZ#_]^#Ppq#Prs#hst%Utu%avw%lxy&Tyz&Y|}&_}!O&d!O!P'h!Q!R&p!R!['W![!]'y!]!^(O!_!`(T!b!c(Y!}#O(e#P#Q(j#R#S(o#T#W(t#W#X)`#X#k(t#k#l*n#l#o(t#o#p-`#q#r-e~~(O~#UR!d~XY#P]^#Ppq#PV#hO#WS!pQ!fP~#kVOr#hrs$Qs#O#h#O#P$V#P;'S#h;'S;=`%O<%lO#h~$VOV~~$YRO;'S#h;'S;=`$c;=`O#h~$fWOr#hrs$Qs#O#h#O#P$V#P;'S#h;'S;=`%O;=`<%l#h<%lO#h~%RP;=`<%l#h~%XP#o#p%[~%aO!x~~%dP#o#p%g~%lO!v~~%qS!e~OY%lZ;'S%l;'S;=`%}<%lO%l~&QP;=`<%l%l~&YO!o~~&_O!q~Q&dO!pQ~&gR!Q!R&p!R!['W!`!a'c~&uPW~!O!P&x~&{P!Q!['O~'TPW~!Q!['O~']QW~!O!P&x!Q!['W~'hO#R~~'kP!O!P'n~'qP!O!P't~'yO!t~~(OO!m~P(TO!fP~(YO#[~~(]P#o#p(`~(eO!{~~(jO!r~~(oO!u~~(tO#P~V(yVRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#o(t_)eXRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#c(t#c#d*Q#d#o(t_*XV#eWRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#o(t_*sXRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#](t#]#^+`#^#o(t_+eXRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#h(t#h#i,Q#i#o(t_,VXRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#[(t#[#],r#]#o(t_,yV#bWRVqr(t}!O(t!P!Q(t!a!b(t!c!}(t#R#S(t#T#o(t~-eO#U~~-jO!w~",
|
||||
tokenData: "-g~RmXY!|YZ#[]^!|pq!|rs#est%Rtu%^vw%ixy&Qyz&V|}&[}!O&a!O!P'e!Q!R&m!R!['T![!]'v!]!^'{!_!`(Q!b!c(V!}#O(b#P#Q(g#R#S(l#T#W(q#W#X)]#X#k(q#k#l*k#l#o(q#o#p-]#q#r-b~#RR!d~XY!|]^!|pq!|V#eO#WS!pQ!fP~#hVOr#ers#}s#O#e#O#P$S#P;'S#e;'S;=`${<%lO#e~$SOV~~$VRO;'S#e;'S;=`$`;=`O#e~$cWOr#ers#}s#O#e#O#P$S#P;'S#e;'S;=`${;=`<%l#e<%lO#e~%OP;=`<%l#e~%UP#o#p%X~%^O!x~~%aP#o#p%d~%iO!v~~%nS!e~OY%iZ;'S%i;'S;=`%z<%lO%i~%}P;=`<%l%i~&VO!o~~&[O!q~Q&aO!pQ~&dR!Q!R&m!R!['T!`!a'`~&rPW~!O!P&u~&xP!Q![&{~'QPW~!Q![&{~'YQW~!O!P&u!Q!['T~'eO#R~~'hP!O!P'k~'nP!O!P'q~'vO!t~~'{O!m~P(QO!fP~(VO#[~~(YP#o#p(]~(bO!{~~(gO!r~~(lO!u~~(qO#P~V(vVRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#o(q_)bXRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#c(q#c#d)}#d#o(q_*UV#eWRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#o(q_*pXRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#](q#]#^+]#^#o(q_+bXRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#h(q#h#i+}#i#o(q_,SXRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#[(q#[#],o#]#o(q_,vV#bWRVqr(q}!O(q!P!Q(q!a!b(q!c!}(q#R#S(q#T#o(q~-bO#U~~-gO!w~",
|
||||
tokenizers: [0, 1, 2, 3],
|
||||
topRules: {"Script":[0,1]},
|
||||
specialized: [{term: 3, get: (value) => spec_Word[value] || -1}],
|
||||
|
|
29
test.js
29
test.js
|
@ -2,12 +2,31 @@ import {parser} from "./parser.js"
|
|||
|
||||
const source = `
|
||||
if foo
|
||||
then do abcd
|
||||
> xyz
|
||||
>
|
||||
else asdf
|
||||
then bar else asdf
|
||||
`
|
||||
|
||||
const parse = (source) => parser.parse(source.concat("\n"))
|
||||
|
||||
console.log(parse(source).toString())
|
||||
const tree = parse(source)
|
||||
|
||||
const cursor = tree.cursor()
|
||||
|
||||
const report = (out) => {
|
||||
console.log(out);
|
||||
return true;
|
||||
}
|
||||
|
||||
const visit = (node) => {
|
||||
switch (node.type.name) {
|
||||
case "Script": return report("Starting Script");
|
||||
case "If": return report("Starting If");
|
||||
case "Word": return report(node.)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
cursor.iterate(
|
||||
(node) => (console.log("Entering", node.type.name), true),
|
||||
(node) => (console.log("Leaving", node.type.name))
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user