From 1ecee352f5844b0809d7ae66df52e34f42b44c8e Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Thu, 6 Mar 2025 20:33:27 +1300 Subject: Rewrite entire assembler The language is now more general, the code is better structured, error reporting is more detailed, and many new language features have been implemented: - conditional blocks - first-class strings - more expression operators - binary literals - negative values - invocations in constant expressions --- src/parsers/expression.rs | 52 ----------------------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 src/parsers/expression.rs (limited to 'src/parsers/expression.rs') diff --git a/src/parsers/expression.rs b/src/parsers/expression.rs deleted file mode 100644 index e938881..0000000 --- a/src/parsers/expression.rs +++ /dev/null @@ -1,52 +0,0 @@ -use crate::*; - - -pub fn parse_constant_expression(mut t: Tokeniser, source: SourceSpan) -> Expression { - use ExpressionTokenVariant as TokenVar; - use ExpressionParseError as ParseError; - - let mut tokens = Vec::new(); - - loop { - t.eat_whitespace(); - t.mark_start(); - let token = t.eat_token(); - if token.is_empty() { - break; - } - - let variant = match token.as_str() { - "=" => TokenVar::Operator(Operator::Equal), - "!=" => TokenVar::Operator(Operator::NotEqual), - "<" => TokenVar::Operator(Operator::LessThan), - ">" => TokenVar::Operator(Operator::GreaterThan), - "<=" => TokenVar::Operator(Operator::LessThanEqual), - ">=" => TokenVar::Operator(Operator::GreaterThanEqual), - "+" => TokenVar::Operator(Operator::Add), - "-" => TokenVar::Operator(Operator::Subtract), - "<<" => TokenVar::Operator(Operator::LeftShift), - ">>" => TokenVar::Operator(Operator::RightShift), - "&" => TokenVar::Operator(Operator::And), - "|" => TokenVar::Operator(Operator::Or), - "^" => TokenVar::Operator(Operator::Xor), - "~" => TokenVar::Operator(Operator::Not), - _ => if let Some(stripped) = token.strip_prefix("0x") { - match usize::from_str_radix(stripped, 16) { - Ok(value) => TokenVar::Literal(value as isize), - Err(_) => TokenVar::Error( - ParseError::InvalidHexadecimalLiteral(stripped.to_string())), - } - } else { - match usize::from_str_radix(&token, 10) { - Ok(value) => TokenVar::Literal(value as isize), - Err(_) => TokenVar::Invocation(token.to_string()), - } - } - }; - - let source = t.get_source(); - tokens.push(ExpressionToken { source, variant }); - } - - return Expression { source, tokens }; -} -- cgit v1.2.3-70-g09d2