ICFP 2007 Contest: https://web.archive.org/web/20090301164728/https://save-endo.cs.uu.nl/

Starting to break out some common code for the disassembler

+7
dna2rna/Cargo.lock
···
[[package]]
name = "dna2rna"
version = "0.1.0"
+
dependencies = [
+
"dna_parsing",
+
]
+
+
[[package]]
+
name = "dna_parsing"
+
version = "0.1.0"
+1
dna2rna/Cargo.toml
···
edition = "2024"
[dependencies]
+
dna_parsing = { path = "../dna_parsing" }
+1 -29
dna2rna/src/dna.rs
···
+
use dna_parsing::base::Base;
use std::collections::VecDeque;
use std::ops::Add;
use std::ops::AddAssign;
use std::ops::Deref;
use std::ops::Index;
use std::rc::Rc;
-
-
#[derive(Copy, Clone, PartialEq, Debug)]
-
pub enum Base {
-
I,
-
C,
-
F,
-
P,
-
}
#[derive(Clone, Debug)]
pub enum Dna {
···
len: usize,
depth: usize,
children: (DnaRef, DnaRef, DnaRef),
-
}
-
-
impl Base {
-
pub fn from_char(c: char) -> Option<Base> {
-
match c {
-
'I' => Some(Base::I),
-
'C' => Some(Base::C),
-
'F' => Some(Base::F),
-
'P' => Some(Base::P),
-
_ => None,
-
}
-
}
-
-
pub fn to_char(&self) -> char {
-
match self {
-
Base::I => 'I',
-
Base::C => 'C',
-
Base::F => 'F',
-
Base::P => 'P',
-
}
-
}
}
impl DnaRef {
+3 -1
dna2rna/src/match_replace.rs
···
-
use crate::dna::Base;
use crate::dna::DnaRef;
use crate::parser::Parser;
use crate::pattern::Pattern;
use crate::pattern::PatternItem;
use crate::rna::Rna;
use crate::template::TemplateItem;
+
use dna_parsing::base::Base;
struct MatchResult {
end: usize,
···
let pattern = parser.pattern(rna)?;
let template = parser.template(rna)?;
let index = parser.index();
+
+
println!("{} ; {} ;", &pattern, &template);
if let Some(matched) = do_match(&dna, index, pattern) {
let mut replace = DnaRef::new();
+1 -1
dna2rna/src/parser.rs
···
-
use crate::dna::Base;
use crate::pattern::Pattern;
use crate::pattern::PatternItem;
use crate::rna::Rna;
use crate::template::Template;
use crate::template::TemplateItem;
+
use dna_parsing::base::Base;
use std::mem;
pub struct Parser<I>
+1 -1
dna2rna/src/pattern.rs
···
-
use crate::dna::Base;
+
use dna_parsing::base::Base;
use std::fmt;
use std::slice;
use std::vec;
+1 -1
dna2rna/src/rna.rs
···
-
use crate::dna::Base;
+
use dna_parsing::base::Base;
pub type Rna = [Base; 7];
+1 -1
dna2rna/src/template.rs
···
-
use crate::dna::Base;
+
use dna_parsing::base::Base;
use std::fmt;
use std::slice;
use std::vec;
+1
dna_parsing/.dir-locals.el
···
+
((nil . ((default-directory . "~/repos/endo/dna_parsing/"))))
+7
dna_parsing/Cargo.lock
···
+
# This file is automatically @generated by Cargo.
+
# It is not intended for manual editing.
+
version = 4
+
+
[[package]]
+
name = "dna_parsing"
+
version = "0.1.0"
+6
dna_parsing/Cargo.toml
···
+
[package]
+
name = "dna_parsing"
+
version = "0.1.0"
+
edition = "2024"
+
+
[dependencies]
+28
dna_parsing/src/base.rs
···
+
#[derive(Copy, Clone, PartialEq, Debug)]
+
pub enum Base {
+
I,
+
C,
+
F,
+
P,
+
}
+
+
impl Base {
+
pub fn from_char(c: char) -> Option<Base> {
+
match c {
+
'I' => Some(Base::I),
+
'C' => Some(Base::C),
+
'F' => Some(Base::F),
+
'P' => Some(Base::P),
+
_ => None,
+
}
+
}
+
+
pub fn to_char(&self) -> char {
+
match self {
+
Base::I => 'I',
+
Base::C => 'C',
+
Base::F => 'F',
+
Base::P => 'P',
+
}
+
}
+
}
+1
dna_parsing/src/lib.rs
···
+
pub mod base;