Skip to content

Commit

Permalink
platform-specific stdlib steup
Browse files Browse the repository at this point in the history
  • Loading branch information
Lingdong Huang committed Dec 26, 2019
1 parent c97ae15 commit 1cecae9
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 34 deletions.
16 changes: 8 additions & 8 deletions lib/位經.wy → lib/js/位經.wy
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
今有一術。名之曰「左移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(x<<y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(x<<y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「左移」之術也。

今有一術。名之曰「右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(x>>y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(x>>y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「右移」之術也。

今有一術。名之曰「補零右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(x>>>y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(x>>>y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「補零右移」之術也。

今有一術。名之曰「位与」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(x&y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(x&y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「位与」之術也。

今有一術。名之曰「位或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(x|y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(x|y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「位或」之術也。

今有一術。名之曰「异或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(x|y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(x^y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「异或」之術也。

今有一術。名之曰「与非」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「((x,y)=>(~(x&y)))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
施「(x=>y=>(~(x&y)))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「与非」之術也。

今有一術。名之曰「位變」。欲行是術。必先得一數。曰「甲」。乃行是術曰。
施「((x)=>(~x))」於「甲」。名之曰「乙」。乃得「乙」。
施「(x=>y=>(~x))」於「甲」。名之曰「乙」。乃得「乙」。
是謂「位變」之術也。
32 changes: 32 additions & 0 deletions lib/py/位經.wy
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
今有一術。名之曰「左移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
吾有一術。名之曰
施「(lambda x: lambda y : x<<y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「左移」之術也。

今有一術。名之曰「右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「(lambda x: lambda y : x>>y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「右移」之術也。

今有一術。名之曰「補零右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「(lambda x: lambda y : return (x % 0x100000000) >> y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「補零右移」之術也。

今有一術。名之曰「位与」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「(lambda x: lambda y : x&y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「位与」之術也。

今有一術。名之曰「位或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「(lambda x: lambda y : x|y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「位或」之術也。

今有一術。名之曰「异或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「(lambda x: lambda y : x^y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「异或」之術也。

今有一術。名之曰「与非」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。
施「(lambda x: lambda y : ~(x&y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。
是謂「与非」之術也。

今有一術。名之曰「位變」。欲行是術。必先得一數。曰「甲」。乃行是術曰。
施「(lambda x: ~x」於「甲」。名之曰「乙」。乃得「乙」。
是謂「位變」之術也。
File renamed without changes.
6 changes: 4 additions & 2 deletions site/ide.html

Large diffs are not rendered by default.

43 changes: 25 additions & 18 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -33273,11 +33273,11 @@
var out = [];
var i = 0;
while (i < txt.length) {
if (txt[i] == "「") {
off ++;
if (txt[i] == "「" || txt[i] == "『") {
off++;
out.push("quot");
} else if (txt[i] == "」") {
off --;
} else if (txt[i] == "」" || txt[i] == "』") {
off--;
out.push("quot");
} else {
if (off) {
Expand Down Expand Up @@ -33601,33 +33601,38 @@
tok += txt[i];
}
} else if ((txt[i] == "「" && txt[i + 1] == "「") || txt[i] == "『") {
var is_sin = (txt[i] == "「")
var is_sin = txt[i] == "「";
if (litlvl == 0) {
enddata();
endnum();
idt = true;
tok = "";
}else{
tok += txt[i]
if (is_sin){
tok += txt[i+1]
} else {
tok += txt[i];
if (is_sin) {
tok += txt[i + 1];
}
}
litlvl++;
if (is_sin) {
i++;
}
} else if ((txt[i] == "」" && txt[i + 1] == "」") || txt[i] == "』") {
var is_sin = (txt[i] == "」");
} else if (
(txt[i] == "」" &&
txt[i + 1] == "」" &&
(txt[i + 2] != "」" || txt[i + 3] == "」")) ||
txt[i] == "』"
) {
var is_sin = txt[i] == "」";
litlvl--;
if (litlvl == 0) {
tokens.push(["lit", `"${tok}"`, i + 1]);
idt = false;
tok = "";
}else{
tok += txt[i]
if (is_sin){
tok += txt[i+1]
} else {
tok += txt[i];
if (is_sin) {
tok += txt[i + 1];
}
}
if (is_sin) {
Expand Down Expand Up @@ -33977,7 +33982,7 @@
gettok(i + 2, 0) == "ctnr" &&
gettok(i + 2, 1) == "subs"
) {
typeassert(i + 1, ["iden", "lit"]);
typeassert(i + 1, ["iden", "lit", "ans"]);
var x = {
op: "subscript",
container: tokens[i + 1],
Expand All @@ -33992,7 +33997,7 @@
gettok(i + 2, 0) == "ctnr" &&
gettok(i + 2, 1) == "len"
) {
typeassert(i + 1, ["iden", "lit"]);
typeassert(i + 1, ["iden", "lit", "subs"]);
var x = { op: "length", container: tokens[i + 1], pos };
asc.push(x);
i += 3;
Expand Down Expand Up @@ -34239,7 +34244,9 @@
imports = Array.from(new Set(imports));
for (var i = 0; i < imports.length; i++) {
var isrc;
if (imports[i] in lib) {
if (imports[i] in lib[lang]){
isrc = lib[lang][imports[i]];
}else if (imports[i] in lib) {
isrc = lib[imports[i]];
} else {
isrc = reader(imports[i]);
Expand Down
4 changes: 3 additions & 1 deletion src/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,9 @@ function compile(
imports = Array.from(new Set(imports));
for (var i = 0; i < imports.length; i++) {
var isrc;
if (imports[i] in lib) {
if (imports[i] in lib[lang]) {
isrc = lib[lang][imports[i]];
} else if (imports[i] in lib) {
isrc = lib[imports[i]];
} else {
isrc = reader(imports[i]);
Expand Down
10 changes: 5 additions & 5 deletions tools/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ function catsrc() {
return s;
}

function loadlib() {
function loadlib(pth = "../lib/") {
var lib = {};
var srcs = fs.readdirSync("../lib/");
var srcs = fs.readdirSync(pth);
for (var i = 0; i < srcs.length; i++) {
if (srcs[i].endsWith(".wy")) {
lib[srcs[i].split(".")[0]] = fs
.readFileSync("../lib/" + srcs[i])
.toString();
lib[srcs[i].split(".")[0]] = fs.readFileSync(pth + srcs[i]).toString();
} else if (fs.lstatSync(pth + srcs[i]).isDirectory()) {
lib[srcs[i]] = loadlib((path = pth + srcs[i] + "/"));
}
}
return lib;
Expand Down

0 comments on commit 1cecae9

Please sign in to comment.