{"id":17053296,"url":"https://github.com/noughtmare/lafont90","last_synced_at":"2026-01-31T15:01:04.029Z","repository":{"id":96827045,"uuid":"337084454","full_name":"noughtmare/lafont90","owner":"noughtmare","description":"The interaction net language proposed by Yves Lafont implemented in Rascal.","archived":false,"fork":false,"pushed_at":"2021-02-08T15:13:13.000Z","size":32,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-04T04:08:41.041Z","etag":null,"topics":["interaction-nets","programming-language","rascal","rascal-mpl"],"latest_commit_sha":null,"homepage":"","language":"Rascal","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/noughtmare.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-08T13:26:58.000Z","updated_at":"2025-01-21T20:11:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"61efb4fc-3730-4e88-b12a-c15efbf2118f","html_url":"https://github.com/noughtmare/lafont90","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/noughtmare/lafont90","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noughtmare%2Flafont90","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noughtmare%2Flafont90/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noughtmare%2Flafont90/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noughtmare%2Flafont90/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noughtmare","download_url":"https://codeload.github.com/noughtmare/lafont90/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noughtmare%2Flafont90/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28946049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T14:26:55.697Z","status":"ssl_error","status_checked_at":"2026-01-31T14:26:52.545Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["interaction-nets","programming-language","rascal","rascal-mpl"],"created_at":"2024-10-14T10:11:51.474Z","updated_at":"2026-01-31T15:01:04.015Z","avatar_url":"https://github.com/noughtmare.png","language":"Rascal","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lafont90\n\nIn this repository we implement the interaction nets language first \ndescribed by Yves Lafont in 1989 [1]. Interaction nets are a model of\ncomputation like the lambda calculus, but even lower level. Cellular automata,\nrewrite systems and Turing machines can all be considered as a special case of\ninteraction nets [2]. Another nice property of interaction nets is that they can\neasily be mapped onto conventional computer hardware without the need of a \ngarbage collector [1].\n\nIn this project we implemented a very basic compiler for interaction nets. \nWe have tried to adhere as much as possible to the proposal of Lafont in his\noriginal paper [1], but for some parts we took inspiration from a later paper by\nIan Mackie [3] especially for the initial net definition.\n\nThis project contains the following Rascal modules:\n\n* **AST** contains the abstract syntax tree.\n* **CST2AST** contains the transformation from a concrete syntax tree to an\nabstract syntax tree.\n* **Check** contains a static semantics checker.\n* **Compile** contains a compiler that translates an abstract syntax tree to C\ncode.\n* **Eval** contains an evaluator that can run interaction nets without\ncompiling.\n* **IDE** hooks into eclipse to show warnings and errors and compiles\ninteraction net files.\n* **Syntax** contains the concrete syntax specification.\n\nThis project contains the following example interaction net files:\n\n* **ackermann.int** contains an implementation of the Ackermann function with\nunary arithmetic. The initial net definition calculates A(3, 8), which is too\nlarge for the evaluator, but the compiled version can run in reasonable time.\n* **difference-lists.int** contains an implementation of difference lists [5].\nThe initial net definition calculates appending a difference list containing\n[P,O,P] and another difference list containing [L] to eachother.\n* **lists.int** contains an implementation for lists. The initial net\ndefinition calculates appending a list containing [P,O,P] and another list\ncontaining [L] to eachother.\n* **parsing.int** contains a simple expression parser that can parse a stream\nof the number 1 and the infix symbol P (for plus) into a tree based abstract\nsyntax. The initial net definition parses the stream (1, P, 1, End) into the\nabstract tree P(1, 1). It should be noted that no error handeling is\nimplemented.  The interaction 'End \u003e\u003c Parse' is not implemented. A malformed\ninput stream can cause undefined behavior.\n* **simple.int** contains one of the simplest possible interaction nets.\nIt only has a single interaction rule. The initial net definition defines\na net that performs the single interaction rule.\n* **test.int** is a test script used during development for testing.\n* **turnstile.int** contains a demonstration of an infinitely reducing\ninteraction net. The initial net definition will execute indefinitely.\n* **unary-arithmetics.int** contains an implementation of unary arithmetic,\nincluding addition, multiplication and finding the maximum of two numbers.\nThe initial net definition calculates the expression max(2 * 3, 2 + 3).\n* **errors.int** contains all possible warnings and errors implemented in the \nsemantics checker.\n\nMost of these example interaction net files are based on the examples in the\noriginal paper by Lafont [1].\n\nCurrently, the compiled programs do not have any input or output capabilities.\nThey only print the interactions that occur to the standard output. This can\neasily be changed manually after generating the C source files.\n\n* [1] Lafont, Yves. \"Interaction nets.\" Proceedings of the 17th ACM\nSIGPLAN-SIGACT symposium on Principles of programming languages. ACM, 1989.\n* [2] Lafont, Yves. \"Interaction combinators.\" Information and Computation\n137.1 (1997): 69-101.\n* [3] Mackie, Ian. \"Towards a programming language for interaction nets.\"\nElectronic Notes in Theoretical Computer Science 127.5 (2005): 133-151.\n* [4] Wikipedia contributors. \"Ackermann function.\" Wikipedia, The Free\nEncyclopedia. Wikipedia, The Free Encyclopedia, 10 Sep. 2019. Web. 20 Jan. 2020.\n* [5] \"Difference list.\" HaskellWiki, . 1 Aug 2018, 16:40 UTC. 20 Jan 2020, 18:25 \u003chttps://wiki.haskell.org/index.php?title=Difference_list\u0026oldid=62571\u003e. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoughtmare%2Flafont90","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoughtmare%2Flafont90","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoughtmare%2Flafont90/lists"}