xrcf 0.1.0

A compiler framework to enable the rapid development of programming language compilers
Documentation
use crate::parser::Parser;
use crate::Attribute;
use crate::Parse;
use std::fmt::Formatter;
use std::fmt::Result;

pub struct LinkageAttr {
    name: String,
    value: String,
}

impl Attribute for LinkageAttr {
    fn new(name: &str, value: &str) -> Self {
        Self {
            name: name.to_string(),
            value: value.to_string(),
        }
    }
    fn parse<T: Parse>(parser: &mut Parser<T>, name: &str) -> Option<Self> {
        let next = parser.peek();
        if next.lexeme == "internal" {
            parser.advance();
            Some(Self::new(name, "internal"))
        } else {
            Some(Self::new(name, "external"))
        }
    }
    fn as_any(&self) -> &dyn std::any::Any {
        self
    }
    fn value(&self) -> String {
        self.value.clone()
    }
    fn display(&self, f: &mut Formatter<'_>) -> Result {
        write!(f, "{}", self.value)
    }
}