Skip to content
This repository was archived by the owner on Jan 1, 2026. It is now read-only.

Commit a4596d9

Browse files
committed
Initial Rust project setup and POC implementation of the Forthic tokenizer
1 parent 7734027 commit a4596d9

14 files changed

Lines changed: 655 additions & 0 deletions

File tree

Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ test-react:
4343
@echo "============"
4444
cd forthic-react/v1 && npm install && CI=1 npm run test
4545

46+
test-rs:
47+
@echo
48+
@echo "Forthic Rust tests"
49+
@echo "============"
50+
cargo test --manifest-path tests/tests_rs/Cargo.toml
51+
4652

4753
test-all: test-py test-react test-js
4854

forthic-rs/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target/
2+
.env

forthic-rs/Cargo.lock

Lines changed: 86 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

forthic-rs/Cargo.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[package]
2+
name = "forthic-rs"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
enum_dispatch = "0.3.12"
10+
itertools = "0.12.0"
11+
lazy_static = "1.4"

forthic-rs/src/errors.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#[derive(Debug)]
2+
pub struct InterpreterError {
3+
pub message: String,
4+
pub filename: String,
5+
pub line: u32,
6+
}
7+
8+
#[macro_export]
9+
macro_rules! interpreter_error {
10+
($msg:expr) => {
11+
InterpreterError {
12+
message: $msg.to_string(),
13+
filename: file!().to_string(),
14+
line: line!(),
15+
}
16+
};
17+
}

forthic-rs/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub mod errors;
2+
pub mod token;
3+
pub mod tokenizer;

forthic-rs/src/main.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
mod errors;
2+
mod token;
3+
mod tokenizer;
4+
5+
use tokenizer::Tokenizer;
6+
7+
fn main() {
8+
let mut lexer = Tokenizer::new("Hello, world!");
9+
let t = lexer.next_token().unwrap();
10+
println!("{:?}", t);
11+
}

forthic-rs/src/token.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#[derive(Debug, PartialEq, Clone)]
2+
pub enum Token {
3+
String(String),
4+
Comment(String),
5+
StartArray,
6+
EndArray,
7+
StartModule(String),
8+
EndModule,
9+
StartDefinition(String),
10+
EndDefinition,
11+
StartMemo(String),
12+
Word(String),
13+
EOS,
14+
}

0 commit comments

Comments
 (0)