T3X – a minimal procedural language
t3x.org
t3x.org
Unlike this recursive-descent parser, my minimalistic language uses a table-driven shift-reduce parser which is entirely contained in the C code. Both the lexer and the parser can be extended very easily in order to accommodate new tokens and new syntactic forms.
For example, http://www.muppetlabs.com/~breadbox/software/tiny/teensy.htm... is extremely interesting, but a lot of it is over my head.
I guess at the end of the day there's no real alternative to "just dive into the source code for a while" with these sorts of things - hence the importance of having "decades of experience" under your belt - but I'm curious if there's anywhere in particular that you might recommend as a startpoint.
Then, books. I'll make a list some day, I promise! ;) From the top of my head: Wirth's "Compiler Construction", Richard's "BCPL, the Language and its Compiler", and - shameless plug - "Practical Compiler Construction" by myself. I have also read the Dragon Book back then - it's good, but too heavy on theory for a beginner.
Mmm, one of several components.
> I'm not sure that reading real-life code will get you very far, because it often deals with lots of edge cases and attempts to be efficient and generate clever code.
Very good point. It takes a bit more time and effort to build a proper mental map, but there's really no worthwhile alternative.
> However, there are compilers that have been made as educational tools or with simplicity as a major design goal. I would stick to those in the beginning.
I agree! These help a lot, and make study almost (if not very) fun :)
> See my home page (http://t3x.org) for lots of examples!
Will do, thanks!
> Then, books. I'll make a list some day, I promise! ;) From the top of my head: Wirth's "Compiler Construction", Richard's "BCPL, the Language and its Compiler", and - shameless plug - "Practical Compiler Construction" by myself. I have also read the Dragon Book back then - it's good, but too heavy on theory for a beginner.
Interesting. I actually stumbled on a copy of the Dragon Book while at an op-shop some time ago. I didn't actually know what I was grabbing at the time, just that it looked like a really good idea to prioritize getting it. I'm very happy to have it, and hope to be able to make sense of it at some point :)
Looks like Wirth's Compiler Construction can be found at http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf
BCPL, the Language and its Compiler and Practical Compiler Construction don't seem to have free options; that's fine, I've added these (and your other books!) to my (burgeoning) wishlist :P
Memory footprint is not really optimal, because T3X9 keeps both the entire source code and the entire executable in memory all the time. I wanted fast compilation, though. For small footprint, I would have made it a two-pass compiler.
An early T3X compiler ran in tiny on DOS (64KB for code and data).
This looks like it's a MISC: https://en.wikipedia.org/wiki/Minimal_instruction_set_comput...
I've also invented something like this: NISC. (Or {}ISC) Null Instruction Set Computer. You can arbitrarily reduce the die size for implementations of this architecture, as well as scale the clock speed arbitrarily. It also revolutionizes cooling.
A formal notion of a minimal language/machine gets messy anyway and is of limited utility even in a purely academic context, as far as I know.
it's kind of insane how little you need to do computation.
How is this able to omit basic type information? Is everything just an int?
> "It is a statement rather than a production tool."
What's the statement supposed to be?
Data is untyped and operators are typed. So in X+Y, X and Y are integers, in X::Y, X is a byte vector and Y is an integer, and in Y[X], X is an integer and Y is a vector (and the types of its element again depend on the operators applied to them).
Note that not all combinations of data and operators make sense. E.g., "foo"*[1,2,3] is a valid expression, but probably will not deliver any meaningful result.
I'll leave the interpretation of the statement to you! ;)
http://brinch-hansen.net/papers/1981b.pdf
He did lots of interesting stuff including a race-free language for concurrency:
I have written compilers for lots of different processors and virtual machines with varying key aspects, like compilation speed, memory footprint, executable size, etc.
Check out my home page (http://t3x.org), there compilers for many different languages, from mainstream to pretty exotic. There are also excerpts from many of my books and even the full texts of some of the older ones.
For now, you can download the full text of "Lightweight Compiler Techniques" here: http://www.bcl.hamilton.ie/~nmh/t3x.org/zzz/lightweight-comp...
Enjoy!
If you look at the source code, you might learn something.
True, the poster asked specifically about T3X.
You can also use it to bootstrap something more high-level than assembly language in very little time.
I have even written real-life programs in T3X for a while, but I wouldn't recommend it unless you are fascinated by the beauty of typeless languages!
By bootstrapping, I'm referring to building a T3X9 compiler for a new target platform and than using that to create something more interesting. You can start the process by re-implementing the compiler or by re-targeting it.
>The compiler translates from T3X9 directly to FreeBSD-386-ELF. It does not require any assembler, linker, or other additional programs. I suspect that it can be ported to other 32-bit ELF Unixes in about half an hour.
Not judging the language itself, but that is not really convincing.
That being said: yes there are problems with the comments. It's code I have written decades ago and just copy-pasted now. Will fix! Thanks!