Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

type information in a lisp: DA STANDARD way

Name: Anonymous 2017-01-20 19:12

so I'm making a toy s-expression parser in C which may or may not become a minimal toy lisp interpreter and I'm trying to figure out the best way to do types. I know the classic way is to use the end of the pointer as tag bits but it doesn't really look standard-conforming or portable.

is there a way of doing it that doesn't rely on undefined behavior? the only thing I can think of is making a struct that holds value/pointer and type information but this seems very wasteful.

Name: L. A. Calculus !jYCj6s4P.g 2017-01-22 21:48

>>18
UR JUST PARSING DA DATA, Y WUD U NEED GC? IF U REPRESENT DA EMPTY LIST AS AN EMPTY STRING, DA REPRESENTATION OF DA car+cdr OF ANY PAIR WILL NEVER B LARGER THAN DA PAIR ITSELF, U JUST NEED 2 ADDITIONAL POINTERS

(1 2 3)\0 BECOMES 1\0(2 3)\0
(2)\0 BECOMES 2\0\0 OR 2\0

IT'S NOT ENOUGH 2 REPRESENT LISP DATA STRUCTURES, BUT IT'S ENOUGH 4 PARSING S-EXPRESSIONS IN C

AS 4 FIGURIN OUT DA TYPES, U CAN DO IT ON A CASE BY CASE BASIS. IF UR ONLY INTERESTED IN INTEGERS & PAIRS, U ONLY NEED 1 OR 2 TESTS, TO DETERMINE IF IT'S AN INTEGER OR A PAIR.

DER'S LESS OVERHEAD BECAUSE IF U HAD ALL DA LISP TYPES BUILT IN BEFOREHAND U'D HAVE TO CHECK IF IT'S A SYMBOL, STRING, CHAR, INTEGER, VECTOR, ETC. AND U MIGHT NOT GIV A FUK ABOUT DA OTHER TYPES N JUST PRINT A MESSAGE TELLIN DA RETOID TO REED DA FUKIN STANDARD IF DEY HAVE IT IN DER DATA.

DA DIFFICULTY WITH DIS APPROACH IS U HAVE TO BUILD SOME INFORMATION INTO splitpair (OR ABSTRACT DAT AWAY/PREPROCESS DA DATA), LIKE HANDLING STRINGS N CHARACTERS DAT CAN HAVE ( OR ) IN DEM. STRINGS & ESCAPE CHARACTERS R FAIRLY COMMON SO I THINK U CAN GET AWAY WITH BUILDIN DAT IN, SO:

p = "(\"()\\\"asd\" . \\(\\ \\\")"

s = "\"()\\\"asd\"\0\\(\\ \\\"\0"
car = &s[0];
cdr = &s[10];

Name: L. A. Calculus !jYCj6s4P.g 2017-01-22 21:58

DER'S A CASE WHERE DA STORAGE AINT LARGE ENOUGH N DAT'S IF U HAVE "((a b c)d e)"

SO DER'S NO SPACE TO INSERT DA NULL CHARACTER BETWEEN ) N d

U CAN WORK AROUND DIS EASILY IF U ALLOCATE STORAGE TWICE DA SIZE OF DA INITIAL S EXPRESSION

FUK U SUSSMAN

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List