diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-10-24 19:10:03 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-10-24 19:10:03 +0200 |
| commit | b4be25e43b1ee9da924d13b7f2e8289f12bd2c3b (patch) | |
| tree | a21fbec7e6907993463d57b8c75758d2014cebeb /src/syntax.rs | |
| parent | ecf0ff4d054f11c79ec0ddbbdf45f3dfcf9fc8d7 (diff) | |
Prettify peeking and rearrange syntax/parsing modules 🧶
Diffstat (limited to 'src/syntax.rs')
| -rw-r--r-- | src/syntax.rs | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/syntax.rs b/src/syntax.rs deleted file mode 100644 index 9c7e4908..00000000 --- a/src/syntax.rs +++ /dev/null @@ -1,128 +0,0 @@ -//! Tokenized and syntax tree representations of source code. - -use std::collections::HashMap; -use std::fmt::{self, Display, Formatter}; - -use crate::func::Function; -use crate::size::Size; - -/// A logical unit of the incoming text stream. -#[derive(Debug, Copy, Clone, Eq, PartialEq)] -pub enum Token<'s> { - /// One or more whitespace (non-newline) codepoints. - Space, - /// A line feed (`\n`, `\r\n` and some more as defined by the Unicode - /// standard). - Newline, - /// A left bracket: `[`. - LeftBracket, - /// A right bracket: `]`. - RightBracket, - /// A colon (`:`) indicating the beginning of function arguments (Function - /// header only). - /// - /// If a colon occurs outside of a function header, it will be tokenized as - /// a [Word](Token::Word). - Colon, - /// An equals (`=`) sign assigning a function argument a value (Function - /// header only). - Equals, - /// A comma (`,`) separating two function arguments (Function header only). - Comma, - /// Quoted text as a string value (Function header only). - Quoted(&'s str), - /// An underscore, indicating text in italics. - Underscore, - /// A star, indicating bold text. - Star, - /// A backtick, indicating monospace text. - Backtick, - /// A line comment. - LineComment(&'s str), - /// A block comment. - BlockComment(&'s str), - /// A star followed by a slash unexpectedly ending a block comment (the - /// comment was not started before, otherwise a - /// [BlockComment](Token::BlockComment) would be returned). - StarSlash, - /// Everything else is just text. - Text(&'s str), -} - -/// A tree representation of the source. -#[derive(Debug, PartialEq)] -pub struct SyntaxTree { - /// The children. - pub nodes: Vec<Node>, -} - -impl SyntaxTree { - /// Create an empty syntax tree. - #[inline] - pub fn new() -> SyntaxTree { - SyntaxTree { nodes: vec![] } - } -} - -/// A node in the abstract syntax tree. -#[derive(Debug, PartialEq)] -pub enum Node { - /// Whitespace between other nodes. - Space, - /// A line feed. - Newline, - /// Indicates that italics were enabled / disabled. - ToggleItalics, - /// Indicates that boldface was enabled / disabled. - ToggleBold, - /// Indicates that monospace was enabled / disabled. - ToggleMonospace, - /// Literal text. - Text(String), - /// A function invocation. - Func(FuncCall), -} - -/// A function invocation consisting of header and body. -#[derive(Debug)] -pub struct FuncCall { - pub header: FuncHeader, - pub body: Box<dyn Function>, -} - -impl PartialEq for FuncCall { - fn eq(&self, other: &FuncCall) -> bool { - (self.header == other.header) && (&self.body == &other.body) - } -} - -/// Contains header information of a function invocation. -#[derive(Debug, Clone, PartialEq)] -pub struct FuncHeader { - pub name: String, - pub args: Vec<Expression>, - pub kwargs: HashMap<String, Expression>, -} - -/// A value expression. -#[derive(Debug, Clone, PartialEq)] -pub enum Expression { - Ident(String), - Str(String), - Number(f64), - Size(Size), - Bool(bool), -} - -impl Display for Expression { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - use Expression::*; - match self { - Ident(s) => write!(f, "{}", s), - Str(s) => write!(f, "{:?}", s), - Number(n) => write!(f, "{}", n), - Size(s) => write!(f, "{}", s), - Bool(b) => write!(f, "{}", b), - } - } -} |
