#ast #programming-language #generation #nets-blox #xml-parser #syntax-tree #snap

no-std bin+lib netsblox-ast

A crate for parsing NetsBlox project files into an AST for use in code generation

63 releases

0.5.12 Sep 25, 2024
0.5.11 Jun 19, 2024
0.5.9 Mar 27, 2024
0.5.2 Dec 26, 2023
0.1.5 Mar 20, 2022

#195 in Programming languages

Download history 141/week @ 2024-08-10 3/week @ 2024-08-17 3/week @ 2024-08-24 10/week @ 2024-08-31 3/week @ 2024-09-07 19/week @ 2024-09-14 291/week @ 2024-09-21 43/week @ 2024-09-28 136/week @ 2024-10-05 19/week @ 2024-10-12 1/week @ 2024-11-02 96/week @ 2024-11-16 5/week @ 2024-11-23

102 downloads per month
Used in 3 crates

MIT/Apache

340KB
6K SLoC

NetsBlox-AST

For the time being, this crate is in active development and its API is highly unstable

NetsBlox is a block-based programming language (extended from Snap!) which provides access to advanced web and distributed computing capabilities such as accessing web APIs and sending messages between clients (e.g. to create multi-user programs). NetsBlox-AST is a rust crate that takes as input a NetsBlox project XML file and outputs a sanitized Abstract Syntax Tree, which is useful for code generation.

Development

This crate is intended to be used directly on some embedded platforms. Thus, because the parser is recursive, we need to keep the stack size to an absolute minimum. To do this, we use cargo-call-stack to check call stack usage.

For the time being, you should install from this fork.

You'll also need dot from graphviz.

sudo apt install graphviz

To generate the call graph, run the following commands:

RUSTFLAGS="-C embed-bitcode" cargo +nightly call-stack --bin netsblox_ast --target x86_64-unknown-linux-gnu >cg.dot
gawk 'match($0, /label="(.*)\\nmax >?= ([0-9]+)\\nlocal = ([0-9]+)"/, m) { print m[3] " " m[1] }' cg.dot | sort -n

Optionally you can generate a visual graph, but this is likely VERY cluttered:

dot -Tsvg cg.dot >cg.svg

Dependencies

~790KB
~14K SLoC