Compare commits

...

4 Commits

Author SHA1 Message Date
Aryadev Chavali
00786d9cb9 Simple arl-mode plugin for Emacs 2026-02-01 19:25:13 +00:00
Aryadev Chavali
b391fe9a74 lexer/token: update tokeniser to recognise puts 2026-01-29 15:49:20 +00:00
Aryadev Chavali
12e82e64d0 examples/hello-world: putstr -> puts 2026-01-29 15:40:30 +00:00
Aryadev Chavali
9b55b9ec32 arl.org: rewrite parser bit 2026-01-29 05:42:16 +00:00
5 changed files with 49 additions and 11 deletions

15
arl.org
View File

@@ -1,5 +1,6 @@
#+title: ARL - Issue tracker
#+date: 2026-01-23
#+filetags: arl
* TODO Write a minimum working transpiler
We need to be able to compile the following file:
@@ -23,13 +24,13 @@ It's a Eulerian Path from the source code to the native executable.
[[file:src/parser/]]
[[file:include/arl/parser/]]
We need to generate some form of AST from the token stream. We want
something a stage above the tokeniser so it should distinguish the
following cases:
- Literal value
- Primitive call
*** TODO AST design
*** TODO Token Stream to AST implementation
We need to generate some form of AST from the token stream. This
should be a little more advanced than our initial stream,
distinguishing between
- Literal values
- Primitive calls
- References to otherwise undefined words (may be defined through
import or later on)
** TODO Stack effect/type analysis
[[file:src/analysis/]]
[[file:include/arl/analysis/]]

View File

@@ -1 +1 @@
"Hello, world!\n" putstr
"Hello, world!\n" puts

37
extensions/arl-mode.el Normal file
View File

@@ -0,0 +1,37 @@
;;; arl-mode.el --- ARL mode for Emacs -*- lexical-binding: t; -*-
;; Copyright (C) 2026 Aryadev Chavali
;; Author: Aryadev Chavali <aryadev@aryadevchavali.com>
;; Keywords:
;; Copyright (C) 2026 Aryadev Chavali
;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE. See the MIT License for details.
;; You may distribute and modify this code under the terms of the MIT License,
;; which you should have received a copy of along with this program. If not,
;; please go to <https://opensource.org/license/MIT>.
;;; Commentary:
;;
;;; Code:
(defvar arl-mode-comments '(?\; ";;" ("#|" . "|#")))
(defvar arl-mode-keywords '("if" "then" "else"))
(defvar arl-mode-expressions '(("\".*\"" . font-lock-string-face)))
(defvar arl-mode-automode-list '("\\.arl"))
(define-derived-mode arl-mode
arl-mode-comments
arl-mode-keywords
arl-mode-expressions
arl-mode-automode-list
nil)
(provide 'arl-mode)
;;; arl-mode.el ends here

View File

@@ -25,7 +25,7 @@ typedef enum
/// Known symbols which later stages would benefit from.
typedef enum
{
TOKEN_KNOWN_PUTSTR,
TOKEN_KNOWN_PUTS,
NUM_TOKEN_KNOWNS,
} token_known_t;

View File

@@ -13,8 +13,8 @@ const char *token_known_to_cstr(token_known_t known)
{
switch (known)
{
case TOKEN_KNOWN_PUTSTR:
return "putstr";
case TOKEN_KNOWN_PUTS:
return "puts";
default:
FAIL("Unexpected TOKEN_KNOWN value: %d\n", known);
}