Rough outline of something resembling a parser (again...)
This commit is contained in:
parent
9f1500c1b6
commit
594b3e44e1
5 changed files with 56 additions and 0 deletions
|
@ -4,3 +4,5 @@ version = "0.1.0"
|
||||||
authors = ["Eryn Wells <eryn@erynwells.me>"]
|
authors = ["Eryn Wells <eryn@erynwells.me>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
sibillexer = { path = "../lexer" }
|
||||||
|
sibiltypes = { path = "../types" }
|
||||||
|
|
|
@ -1,3 +1,23 @@
|
||||||
|
/* parser/src/lib.rs
|
||||||
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern crate sibillexer;
|
||||||
|
extern crate sibiltypes;
|
||||||
|
|
||||||
|
mod list;
|
||||||
|
mod program;
|
||||||
|
|
||||||
|
use sibillexer::Lexer;
|
||||||
|
|
||||||
|
struct ParseError { }
|
||||||
|
|
||||||
|
type Result<T> = std::result::Result<T, ParseError>;
|
||||||
|
|
||||||
|
trait Parsable: Sized {
|
||||||
|
fn parse(lexer: &Lexer) -> Result<Self>;
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
|
|
24
parser/src/list.rs
Normal file
24
parser/src/list.rs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/* parser/src/list.rs
|
||||||
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern crate sibillexer;
|
||||||
|
extern crate sibiltypes;
|
||||||
|
|
||||||
|
use sibillexer::Lexer;
|
||||||
|
use sibillexer::Token;
|
||||||
|
use sibiltypes::Value;
|
||||||
|
use super::Parsable;
|
||||||
|
use super::ParseError;
|
||||||
|
use super::Result;
|
||||||
|
|
||||||
|
pub enum SExpression {
|
||||||
|
Value(Box<Value>),
|
||||||
|
List(Vec<SExpression>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Parsable for SExpression {
|
||||||
|
fn parse(lexer: &Lexer) -> Result<SExpression> {
|
||||||
|
Err(ParseError{ })
|
||||||
|
}
|
||||||
|
}
|
9
parser/src/program.rs
Normal file
9
parser/src/program.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/* parser/src/program.rs
|
||||||
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
use list::SExpression;
|
||||||
|
|
||||||
|
struct Program {
|
||||||
|
commands: Vec<SExpression>,
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ mod value;
|
||||||
pub use bool::Bool;
|
pub use bool::Bool;
|
||||||
pub use char::Char;
|
pub use char::Char;
|
||||||
pub use number::Number;
|
pub use number::Number;
|
||||||
|
pub use value::Value;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue