{"id":17174778,"url":"https://github.com/benhoyt/false-forth","last_synced_at":"2026-01-05T21:35:45.802Z","repository":{"id":6383246,"uuid":"7620874","full_name":"benhoyt/false-forth","owner":"benhoyt","description":"A False compiler and interpreter written in ANS Forth","archived":false,"fork":false,"pushed_at":"2015-02-05T01:00:15.000Z","size":148,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T01:25:50.753Z","etag":null,"topics":["compiler","false","forth","interpreter"],"latest_commit_sha":null,"homepage":null,"language":"Forth","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benhoyt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-01-15T07:56:16.000Z","updated_at":"2024-04-09T16:46:54.000Z","dependencies_parsed_at":"2022-08-29T06:50:22.005Z","dependency_job_id":null,"html_url":"https://github.com/benhoyt/false-forth","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benhoyt%2Ffalse-forth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benhoyt%2Ffalse-forth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benhoyt%2Ffalse-forth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benhoyt%2Ffalse-forth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benhoyt","download_url":"https://codeload.github.com/benhoyt/false-forth/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245352090,"owners_count":20601093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","false","forth","interpreter"],"created_at":"2024-10-14T23:54:53.802Z","updated_at":"2026-01-05T21:35:45.772Z","avatar_url":"https://github.com/benhoyt.png","language":"Forth","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nA False interpreter and compiler written in ANS Forth\n=====================================================\n\n**Historical note:** I wrote this in 2000 (when I was 18), so I'm just putting\nit up here as a backup and for \"historical interest\".\n[False](http://en.wikipedia.org/wiki/FALSE) is definitely one of the more\nelegant esoteric languages, and I still a have soft spot for False,\nForth, Factor, and other F-languages. :-)\n\nAll the documentation that follows (and the comments in the Forth source\nfiles) is original.\n\nIntroduction\n------------\n\nA False interpreter in Forth! What next? A False compiler of course! If you\ndon't already know what the False programming language is, go read [Wouter van\nOortmerssen's False page](http://strlen.com/false-language) -- this compiler\nis referred to there under \"False Links\". Or go to [Wouter's home\npage](http://strlen.com/).\n\nFalse was meant to be cryptic and fun, but it does have a few neat\nfeatures: its functional nature and \"lambda calculus\" with the [ and\n] structure, and its stack-based architecture. Anyway, it's just a\ntoy, and so is this (very slow) interpreter. Hopefully the compiler\nwill do a faster job when I get it going.\n\nWhat's included\n---------------\n\nThe Forth source for the interpreter and compiler:\n\n    False.F     ANS Forth source for a False interpreter\n    FalseCom.F  semi-ANS Forth source for a DOS 386 False compiler\n\nYou just need a 32 bit ANS Forth system to run 'em --\n[Gforth](http://www.gnu.org/software/gforth/), for example.\n\nThen type \"INCLUDE False.F\" or \"INCLUDE FalseCom.F\" and you're away.\n\nSee the extended comments at the top of the source files for more information.\n\nI've also included some False examples, mostly from the original False\ndistribution:\n\n    DUMP.FAL        hex dumper, 16 chars/line, extra space after 8 chars\n    EVAL.FAL        infix expression evaluator\n    FAC.FAL         actorial program\n    FBREAK.FAL      FALSE Breakout game by Ed Mackey\n\nNotes on the code\n-----------------\n\nIn writing the code I copied the basic data structures (like stacks\nand the source pointer) from Wouter van Oortmerssen's original\n\"Portable False\" interpreter in C. One thing I tried not to copy was\nhis \"good C style\". :-) I tried rather to use some of Forth's\nfeatures like CATCH and THROW, ability to create many small words\neasily, and the ability to easily create jump tables.\n\nBasically the interpreter grabs a character from the False buffer,\nlooks an execution token up in a 256-cell jump table, and EXECUTEs\nthat. Clean and simple. Even the digits and variables are done\nthat way (albeit at the expense of quite a few similar words, see\nMakeVars and MakeNumbers). I didn't make it a \"pure state machine\",\nso whenever it comes across a comment { or lambda [ or quote \" it\ndoesn't switch state and keep going, but parses there and then.\n\nI fixed a little bug in Wouter's \"Portable False\", namely that the\n' symbol was ignored while parsing inside lambda constructs. So if\nyou had '\" or '] or something, his Portable False would burp.\nPersonally I believe False's ~ operator should be a logical not\nrather than a bitwise not. Ie., should be 0= rather than INVERT,\nbut it might have broken existing code if I changed it. So use ~\nonly on flags returned by False's \u003e or = or as a bitwise invert.\n\nI'm not exactly a purist when it comes to CASE, but I try to avoid\nit where it makes sense. Anyway, I've used it a few times in the\nsource (unforgiveable, you say! :-) where it was kind of handy.\n\nMost of my words are short and sweet, but a few (namely the debugger\nand error display, as well as Buffer -- the initialisation word) of\nmy words are \"long and hairy\". Again, I'm not a \"short word Purist\",\nand I use long words where it would be silly to break them up, but\nshort words most of the time, trying to keep with good Forth style.\n\nMy personal Forth style is ever-changing. I don't like the difficulty\nof inserting nice comments without breaking up your Forth flow. Forth\nshould be so well-written that it doesn't need comments and can just\nbe strung together, you say. I'm not from that school of thought\neither. So whether you like my source or not, I don't think it's\nideal.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenhoyt%2Ffalse-forth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenhoyt%2Ffalse-forth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenhoyt%2Ffalse-forth/lists"}