adding web

This commit is contained in:
ParkerTenBroeck 2025-12-22 15:58:03 -05:00
parent d34136f70b
commit f155a3d7d8
8 changed files with 229 additions and 37 deletions

144
Cargo.lock generated
View file

@ -5,3 +5,147 @@ version = 4
[[package]] [[package]]
name = "automata" name = "automata"
version = "0.1.0" version = "0.1.0"
[[package]]
name = "automata-web"
version = "0.1.0"
dependencies = [
"automata",
"console_error_panic_hook",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "bumpalo"
version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "console_error_panic_hook"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
dependencies = [
"cfg-if",
"wasm-bindgen",
]
[[package]]
name = "js-sys"
version = "0.3.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
dependencies = [
"once_cell",
"wasm-bindgen",
]
[[package]]
name = "once_cell"
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "proc-macro2"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rustversion"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "syn"
version = "2.0.111"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
[[package]]
name = "wasm-bindgen"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
version = "0.3.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
dependencies = [
"js-sys",
"wasm-bindgen",
]

View file

@ -4,3 +4,7 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
[workspace]
members = ["web"]

View file

@ -5,6 +5,9 @@
# Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16) # Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16)
llvmPackages.bintools llvmPackages.bintools
rustup rustup
wasm-bindgen-cli_0_2_100
wasm-pack
binaryen
]; ];
RUSTC_VERSION = "nightly"; RUSTC_VERSION = "nightly";
# https://github.com/rust-lang/rust-bindgen#environment-variables # https://github.com/rust-lang/rust-bindgen#environment-variables

View file

@ -1,37 +0,0 @@
use automata::automata::npda;
fn main() {
let input = include_str!("../example.npda");
let table = match npda::TransitionTable::load_table(input) {
Ok((ok, logs)) => {
for log in logs.displayable() {
println!("{log}")
}
ok
}
Err(logs) => {
for log in logs.displayable() {
println!("{log}")
}
return;
}
};
let input = "aababaab";
println!("running on: '{input}'");
let mut simulator = npda::Simulator::begin(input, table);
loop {
match simulator.step(){
npda::SimulatorResult::Pending => {},
npda::SimulatorResult::Reject => {
println!("REJECTED");
break;
},
npda::SimulatorResult::Accept(npda) => {
println!("ACCEPT: {npda:?}");
break;
},
}
}
}

10
web/Cargo.toml Normal file
View file

@ -0,0 +1,10 @@
[package]
name = "automata-web"
version = "0.1.0"
edition = "2024"
[dependencies]
automata = {path=".."}
console_error_panic_hook = "0.1.7"
wasm-bindgen = "*"
web-sys = { version = "0.3.83", features = ["Window", "Document", "HtmlElement", "Text"] }

15
web/build.sh Executable file
View file

@ -0,0 +1,15 @@
CRATE_NAME="automata-web"
TARGET_NAME="automata-web"
OUT_FILE_NAME="./root/automata.wasm"
mkdir root
TARGET="../target"
cargo build --package automata-web --target wasm32-unknown-unknown --release
TARGET_NAME="${CRATE_NAME}.wasm"
WASM_PATH="${TARGET}/wasm32-unknown-unknown/release/$TARGET_NAME"
wasm-bindgen ${WASM_PATH} --out-dir root --out-name ${OUT_FILE_NAME} --no-modules --no-typescript
wasm-opt ${OUT_FILE_NAME} -O2 --fast-math -g -o ${OUT_FILE_NAME}

2
web/init.sh Executable file
View file

@ -0,0 +1,2 @@
cargo install wasm-bindgen-cli
rustup target add wasm32-unknown-unknown

51
web/src/main.rs Normal file
View file

@ -0,0 +1,51 @@
use automata::automata::npda;
use web_sys::window;
fn main() {
console_error_panic_hook::set_once();
let document = window()
.and_then(|win| win.document())
.expect("Could not access the document");
let body = document.body().expect("Could not access document.body");
let text_node = document.create_text_node("Hello, world from Vanilla Rust!");
body.append_child(text_node.as_ref())
.expect("Failed to append text");
}
// pub fn main() {
// let input = include_str!("../../example.npda");
// let table = match npda::TransitionTable::load_table(input) {
// Ok((ok, logs)) => {
// for log in logs.displayable() {
// println!("{log}")
// }
// ok
// }
// Err(logs) => {
// for log in logs.displayable() {
// println!("{log}")
// }
// return;
// }
// };
// let input = "aababaab";
// println!("running on: '{input}'");
// let mut simulator = npda::Simulator::begin(input, table);
// loop {
// match simulator.step(){
// npda::SimulatorResult::Pending => {},
// npda::SimulatorResult::Reject => {
// println!("REJECTED");
// break;
// },
// npda::SimulatorResult::Accept(npda) => {
// println!("ACCEPT: {npda:?}");
// break;
// },
// }
// }
// }