C compiler with embedded metalanguage.
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

70 行
1.3 KiB

@{
println(x) { print(x, "\n"); }
treeCopy(x) {
l = {};
k = _keys(x);
if (k == null) {
return clone(x);
} else {
for (i in k) {
l[k[i]] = clone(treeCopy(x[k[i]]));
}
return clone(l);
}
}
getId(x) { { identifier: x, __proto__: C_id }; }
getEnum(x) { { attributeL: null, expression: null, name: getId(x), __proto__: C_enum }; }
getComma() { { text: ",", comment: { text : " ", __proto__: Comment }, __proto__: Token }; }
getComment(x) { { text : x, __proto__: Comment }; }
append(s, e) {
s[length(s)] = e;
}
map(f, seq, g) {
out = {};
if (g) {
for (i in seq) {
e = seq[i];
if (g(e)) { e = f(e); }
append(out, e);
}
} else {
for (i in seq) {
append(out, f(seq[i]));
}
}
out;
}
notToken(x) { x.__proto__ != Token }
select(f, s) {
out = {};
for (i in s) {
e = s[i];
if (f(e)) { append(out, e); }
}
out;
}
reject(f, s) {
out = {};
for (i in s) {
e = s[i];
if (!f(e)) { append(out, e); }
}
out;
}
last(s) {
s[length(s)-1];
}
nil;
}