Skip to content
Snippets Groups Projects
Commit c472f46c authored by Stephen D's avatar Stephen D
Browse files

blc output

parent 22be68f9
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,48 @@
# It is not intended for manual editing.
version = 4
[[package]]
name = "bitvec"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
dependencies = [
"funty",
"radium",
"tap",
"wyz",
]
[[package]]
name = "funty"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
name = "radium"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
[[package]]
name = "sophiescript"
version = "0.1.0"
dependencies = [
"bitvec",
]
[[package]]
name = "tap"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "wyz"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
dependencies = [
"tap",
]
......@@ -4,3 +4,4 @@ version = "0.1.0"
edition = "2021"
[dependencies]
bitvec = "1.0.1"
use bitvec::{order::Msb0, vec::BitVec};
#[derive(Debug)]
pub enum Expr {
Abs(Box<Expr>),
......@@ -12,3 +14,30 @@ pub enum FlattenedExpr {
App(Box<FlattenedExpr>, Box<FlattenedExpr>),
Var(usize),
}
impl FlattenedExpr {
pub fn to_blc(self, bv: &mut BitVec<u8, Msb0>) {
match self {
FlattenedExpr::Abs(expr) => {
bv.push(false);
bv.push(false);
expr.to_blc(bv);
}
FlattenedExpr::App(left, right) => {
bv.push(false);
bv.push(true);
left.to_blc(bv);
right.to_blc(bv);
}
FlattenedExpr::Var(x) => {
for _ in 0..=x {
bv.push(true);
}
bv.push(false);
}
}
}
}
use bitvec::vec::BitVec;
use flatten::Flattener;
use parser::Parser;
use scanner::Scanner;
......@@ -11,10 +12,11 @@ mod token;
fn main() {
let scanner = Scanner::new(
"
$false = λtf.f
$true = λtf.t
$false=λtf.f
$omega=λa. (a a)
λa.(a $true)
λa.a($omega(λbcde.d(bb)(λf.fce)))$false
",
);
......@@ -24,7 +26,14 @@ $true = λtf.t
let (funcs, main) = parser.parse().unwrap();
let mut flattener = Flattener::new(funcs);
let flat = flattener.flatten(&main);
let flat = flattener.flatten(&main).unwrap();
dbg!(&flat);
let mut bv = BitVec::new();
flat.to_blc(&mut bv);
dbg!(flat);
for x in bv.as_raw_slice() {
print!("{}", *x as char);
}
}
......@@ -134,9 +134,6 @@ impl Parser {
let left = self.expr()?;
let right = self.expr()?;
dbg!(&left, &right);
dbg!(&self.peek().token_type);
if self.peek().token_type != TokenType::RightParen {
self.print_error("Expected ')' after application");
return None;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment