mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-28 15:28:30 +00:00
Add LISP interpreter
This commit is contained in:
parent
4f98ad1054
commit
d31bebdd2d
84 changed files with 9081 additions and 0 deletions
139
tool/plinko/lib/setup.c
Normal file
139
tool/plinko/lib/setup.c
Normal file
|
@ -0,0 +1,139 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/str/str.h"
|
||||
#include "tool/plinko/lib/cons.h"
|
||||
#include "tool/plinko/lib/plinko.h"
|
||||
|
||||
static void SetInput(const char *s) {
|
||||
bp[0] = 0;
|
||||
dx = L' ';
|
||||
strcpy(stpcpy(g_buffer[0], s), " ");
|
||||
}
|
||||
|
||||
static void Programme(int i, DispatchFn *f, int x) {
|
||||
SetShadow(i, MAKE(EncodeDispatchFn(f), x));
|
||||
}
|
||||
|
||||
static void Program(int i, DispatchFn *f) {
|
||||
Programme(i, f, 0);
|
||||
}
|
||||
|
||||
static void ProgramPrecious(int i) {
|
||||
Program(i, DispatchPrecious);
|
||||
}
|
||||
|
||||
static void ProgramLookup(int i) {
|
||||
Program(i, DispatchLookup);
|
||||
}
|
||||
|
||||
static void ProgramIgnore0(int i) {
|
||||
Program(i, DispatchIgnore0);
|
||||
}
|
||||
|
||||
static void ProgramPlan(int i) {
|
||||
Program(i, DispatchPlan);
|
||||
}
|
||||
|
||||
void Setup(void) {
|
||||
int i;
|
||||
char buf[4] = "(A)";
|
||||
SetShadow(-1, DF(DispatchPlan));
|
||||
SetShadow(0, DF(DispatchPrecious));
|
||||
SetShadow(+1, DF(DispatchPrecious));
|
||||
PROG(ProgramPrecious, kEq, "EQ");
|
||||
PROG(ProgramPrecious, kGc, "GC");
|
||||
PROG(ProgramPrecious, kCmp, "CMP");
|
||||
PROG(ProgramPrecious, kCar, "CAR");
|
||||
PROG(ProgramPrecious, kCdr, "CDR");
|
||||
PROG(ProgramPrecious, kBeta, "BETA");
|
||||
PROG(ProgramPrecious, kAtom, "ATOM");
|
||||
PROG(ProgramPrecious, kCond, "COND");
|
||||
PROG(ProgramPrecious, kCons, "CONS");
|
||||
PROG(ProgramPrecious, kRead, "READ");
|
||||
PROG(ProgramPrecious, kDump, "DUMP");
|
||||
PROG(ProgramPrecious, kExit, "EXIT");
|
||||
PROG(ProgramPrecious, kFork, "FORK");
|
||||
PROG(ProgramPrecious, kQuote, "QUOTE");
|
||||
PROG(ProgramPrecious, kProgn, "PROGN");
|
||||
PROG(ProgramPrecious, kMacro, "MACRO");
|
||||
PROG(ProgramPrecious, kQuiet, "QUIET");
|
||||
PROG(ProgramPrecious, kError, "ERROR");
|
||||
PROG(ProgramPrecious, kTrace, "TRACE");
|
||||
PROG(ProgramPrecious, kPrint, "PRINT");
|
||||
PROG(ProgramPrecious, kPrinc, "PRINC");
|
||||
PROG(ProgramPrecious, kFlush, "FLUSH");
|
||||
PROG(ProgramPrecious, kOrder, "ORDER");
|
||||
PROG(ProgramPrecious, kGensym, "GENSYM");
|
||||
PROG(ProgramPrecious, kPprint, "PPRINT");
|
||||
PROG(ProgramPrecious, kIgnore, "IGNORE");
|
||||
PROG(ProgramPrecious, kMtrace, "MTRACE");
|
||||
PROG(ProgramPrecious, kFtrace, "FTRACE");
|
||||
PROG(ProgramPrecious, kGtrace, "GTRACE");
|
||||
PROG(ProgramPrecious, kLambda, "LAMBDA");
|
||||
PROG(ProgramPrecious, kDefine, "DEFINE");
|
||||
PROG(ProgramPrecious, kExpand, "EXPAND");
|
||||
PROG(ProgramPrecious, kClosure, "CLOSURE");
|
||||
PROG(ProgramPrecious, kPartial, "PARTIAL");
|
||||
PROG(ProgramPrecious, kFunction, "FUNCTION");
|
||||
PROG(ProgramPrecious, kIntegrate, "INTEGRATE");
|
||||
PROG(ProgramPrecious, kPrintheap, "PRINTHEAP");
|
||||
PROG(ProgramPrecious, kImpossible, "IMPOSSIBLE");
|
||||
PROG(ProgramLookup, kComma, "COMMA_");
|
||||
PROG(ProgramLookup, kSplice, "SPLICE_");
|
||||
PROG(ProgramLookup, kBackquote, "BACKQUOTE_");
|
||||
PROG(ProgramLookup, kString, "STRING_");
|
||||
PROG(ProgramLookup, kSquare, "SQUARE_");
|
||||
PROG(ProgramLookup, kCurly, "CURLY_");
|
||||
PROG(ProgramLookup, kDefun, "DEFUN");
|
||||
PROG(ProgramLookup, kDefmacro, "DEFMACRO");
|
||||
PROG(ProgramLookup, kAppend, "APPEND");
|
||||
PROG(ProgramLookup, kOr, "OR");
|
||||
PROG(ProgramLookup, kAnd, "AND");
|
||||
PROG(ProgramLookup, kIntersection, "INTERSECTION");
|
||||
PROG(ProgramLookup, kList, "LIST");
|
||||
PROG(ProgramLookup, kMember, "MEMBER");
|
||||
PROG(ProgramLookup, kNot, "NOT");
|
||||
PROG(ProgramLookup, kReverse, "REVERSE");
|
||||
PROG(ProgramLookup, kSqrt, "SQRT");
|
||||
PROG(ProgramLookup, kSubset, "SUBSET");
|
||||
PROG(ProgramLookup, kSuperset, "SUPERSET");
|
||||
PROG(ProgramLookup, kBecause, "BECAUSE");
|
||||
PROG(ProgramLookup, kTherefore, "THEREFORE");
|
||||
PROG(ProgramLookup, kUnion, "UNION");
|
||||
PROG(ProgramLookup, kImplies, "IMPLIES");
|
||||
PROG(ProgramLookup, kYcombinator, "YCOMBINATOR");
|
||||
PROG(ProgramLookup, kNand, "NAND");
|
||||
PROG(ProgramLookup, kNor, "NOR");
|
||||
PROG(ProgramLookup, kXor, "XOR");
|
||||
PROG(ProgramLookup, kIff, "IFF");
|
||||
PROG(ProgramLookup, kCycle, "CYCLE");
|
||||
PROG(ProgramLookup, kTrench, "𝕋ℝ𝔼ℕℂℍ");
|
||||
PROG(ProgramLookup, kUnchanged, "ⁿ/ₐ");
|
||||
PROG(ProgramIgnore0, kIgnore0, "(IGNORE)");
|
||||
for (i = 0; i < 26; ++i, ++buf[1]) {
|
||||
PROG(ProgramPlan, kConsAlphabet[i], buf);
|
||||
}
|
||||
for (buf[0] = L'A', buf[1] = 0, i = 0; i < 26; ++i, ++buf[0]) {
|
||||
if (buf[0] != 'T') {
|
||||
PROG(ProgramLookup, kAlphabet[i], buf);
|
||||
} else {
|
||||
kAlphabet[i] = 1;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue