From 920adceaf70eb3ad526fc55c84bd7eb62d67eaa1 Mon Sep 17 00:00:00 2001 From: SyS Date: Tue, 31 Oct 2023 10:04:02 +0530 Subject: [PATCH 1/8] support for lists in malluscript --- src/executor/ast.rs | 3 + src/executor/datatype.rs | 5 + src/executor/error.rs | 5 + src/executor/mod.rs | 80 ++- src/lexer/mod.rs | 4 + src/lexer/tokens.rs | 4 + src/parser/grammar.lalrpop | 6 +- src/parser/grammar.rs | 1172 +++++++++++++++++++++--------------- 8 files changed, 805 insertions(+), 474 deletions(-) diff --git a/src/executor/ast.rs b/src/executor/ast.rs index d47c815..354d5d0 100644 --- a/src/executor/ast.rs +++ b/src/executor/ast.rs @@ -41,4 +41,7 @@ pub enum Expression { InputNumber((usize, usize)), FunctionCall((usize, usize), Box, Vec), + + ListExpression((usize, usize), Vec), + ListSubScript((usize, usize), Box, Box), } diff --git a/src/executor/datatype.rs b/src/executor/datatype.rs index 1999df8..610a6b8 100644 --- a/src/executor/datatype.rs +++ b/src/executor/datatype.rs @@ -46,6 +46,7 @@ pub enum DataTypes { Integer(i64), Bool(bool), Float(f64), + List(Vec), Unknown, } @@ -75,6 +76,10 @@ impl ops::Add for DataTypes { (DataTypes::Float(l), DataTypes::String(r)) => DataTypes::String(l.to_string() + &r), (DataTypes::String(l), DataTypes::Float(r)) => DataTypes::String(l + &r.to_string()), (DataTypes::String(l), DataTypes::String(r)) => DataTypes::String(l + &r), + (DataTypes::List(mut l), r) => { + l.push(r); + DataTypes::List(l) + } _ => raise_error(RunTimeErrors::IncompatibleOperation), } } diff --git a/src/executor/error.rs b/src/executor/error.rs index c779485..27d5d8b 100644 --- a/src/executor/error.rs +++ b/src/executor/error.rs @@ -15,6 +15,7 @@ pub enum RunTimeErrors { InvalidFunctionDeclaration, ArgumentCountMismatch, IntegerOverFlow, + IndexOutOfBounds(i64, i64), } impl fmt::Display for RunTimeErrors { @@ -49,6 +50,10 @@ impl fmt::Display for RunTimeErrors { f, "[Error]: Integer OverFlow, attempt to arithmetic operation that leads to overflow" ), + RunTimeErrors::IndexOutOfBounds(index,limit) => write!( + f, + "[Error]: Index Out Of Bounds, attempted to read/write at index {index} on {limit} sized data" + ), } } } diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 6fc95c5..e8ca5fd 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -94,17 +94,50 @@ impl Executor { let _ = stdout().flush(); } - Statement::Assignment((p, q), l, r) => { - if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = l { + Statement::Assignment((p, q), l, r) => match l { + Expression::Symbol((_a, _b), TokenType::Symbol(address)) => { self.symbol_table .entry((self.scope_level, *address)) .or_insert(DataTypes::Unknown); let data = self.eval_arithmetic_logic_expression(r)?; self.symbol_table.insert((self.scope_level, *address), data); - } else { + } + Expression::ListSubScript((_a, _b), expr, index) => { + let data = self.eval_arithmetic_logic_expression(r)?; + if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = **expr { + let index = match self.eval_arithmetic_logic_expression(index) { + Ok(DataTypes::Integer(idx)) => idx, + _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), + }; + + self.symbol_table + .entry((self.scope_level, address)) + .or_insert(DataTypes::Unknown); + let left = self + .symbol_table + .get_mut(&(self.scope_level, address)) + .unwrap(); + + if let DataTypes::List(list) = left { + if index < 0 || index > (list.len() - 1) as i64 { + return Err(( + (*p, *q), + RunTimeErrors::IndexOutOfBounds(index, list.len() as i64), + )); + } + + list[index as usize] = data; + } else { + return Err(((*p, *q), RunTimeErrors::InvalidExpression)); + } + } else { + return Err(((*p, *q), RunTimeErrors::InvalidExpression)); + } + } + _ => { return Err(((*p, *q), RunTimeErrors::InvalidAssignment)); } - } + }, Statement::EmptyExpression((_p, _q), expr) => { self.eval_arithmetic_logic_expression(expr)?; } @@ -201,6 +234,7 @@ impl Executor { Some(DataTypes::Integer(number)) => Ok(DataTypes::Integer(*number)), Some(DataTypes::Float(number)) => Ok(DataTypes::Float(*number)), Some(DataTypes::String(data)) => Ok(DataTypes::String(data.to_string())), + Some(DataTypes::List(data)) => Ok(DataTypes::List(data.to_vec())), _ => Err(( (*a, *b), RunTimeErrors::UnInitialzedData(self.get_symbol_name(*address).unwrap()), @@ -278,6 +312,44 @@ impl Executor { Err(((*p, *q), RunTimeErrors::InvalidExpression)) } } + + Expression::ListExpression((_p, _q), items) => { + let mut list = Vec::new(); + for item in items { + let data = self.eval_arithmetic_logic_expression(item)?; + list.push(data); + } + Ok(DataTypes::List(list)) + } + + Expression::ListSubScript((p, q), symbol, index) => { + if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = **symbol { + let index = match self.eval_arithmetic_logic_expression(index) { + Ok(DataTypes::Integer(idx)) => idx, + _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), + }; + + if let Some(data) = self.symbol_table.get_mut(&(self.scope_level, address)) { + if let DataTypes::List(list) = data { + if index < 0 || index > (list.len() - 1) as i64 { + return Err(( + (*p, *q), + RunTimeErrors::IndexOutOfBounds(index, list.len() as i64), + )); + } + let value = &list[index as usize]; + Ok(value.clone()) + } else { + Err(((*p, *q), RunTimeErrors::InvalidExpression)) + } + } else { + let name = self.get_symbol_name(address).unwrap(); + Err(((*p, *q), RunTimeErrors::UndefinedSymbol(name))) + } + } else { + Err(((*p, *q), RunTimeErrors::InvalidExpression)) + } + } } } } diff --git a/src/lexer/mod.rs b/src/lexer/mod.rs index cf57331..d24ce04 100644 --- a/src/lexer/mod.rs +++ b/src/lexer/mod.rs @@ -57,6 +57,8 @@ impl<'input> Lexer<'input> { || c == ',' || c == '{' || c == '}' + || c == '[' + || c == ']' } fn is_valid_name(&self, c: char) -> bool { @@ -86,6 +88,8 @@ impl<'input> Iterator for &mut Lexer<'input> { Some((i, ',')) => return Some(Ok((i, TokenType::Comma, i + 1))), Some((i, '<')) => return Some(Ok((i, TokenType::AngleOpen, i + 1))), Some((i, '>')) => return Some(Ok((i, TokenType::AngleClose, i + 1))), + Some((i, '[')) => return Some(Ok((i, TokenType::SquareOpen, i + 1))), + Some((i, ']')) => return Some(Ok((i, TokenType::SquareClose, i + 1))), Some((i, '"')) => { let (start, mut end) = (i + 1, 0); let mut ch = ' '; diff --git a/src/lexer/tokens.rs b/src/lexer/tokens.rs index 44d52b7..7eac2c9 100644 --- a/src/lexer/tokens.rs +++ b/src/lexer/tokens.rs @@ -36,6 +36,8 @@ pub enum TokenType { IfNotEqual, IfLessThan, IfEqualTo, + SquareOpen, + SquareClose, } impl Display for TokenType { @@ -76,6 +78,8 @@ impl Display for TokenType { TokenType::IfNotEqual => write!(f, "thullyamallenkil"), TokenType::IfLessThan => write!(f, "cheruthanenkil"), TokenType::IfEqualTo => write!(f, "thullyamanenkil"), + TokenType::SquareOpen => write!(f, "["), + TokenType::SquareClose => write!(f, "]"), } } } diff --git a/src/parser/grammar.lalrpop b/src/parser/grammar.lalrpop index cc27bf4..cc206cd 100644 --- a/src/parser/grammar.lalrpop +++ b/src/parser/grammar.lalrpop @@ -81,7 +81,9 @@ Term: Expression= { => Expression::InputNumber((a,b)), => Expression::InputString((a,b)), "Open" "Close" => Expression::FunctionCall((a,b),Box::new(id),args), - "(" ")" => e + "(" ")" => e, + "[" "]" => Expression::ListExpression((a,b),items), + "[" "]" => Expression::ListSubScript((a,b),Box::new(id),Box::new(idx)), }; extern { @@ -124,5 +126,7 @@ extern { IfNotEqual => TokenType::IfNotEqual, IfLessThan => TokenType::IfLessThan, IfEqualTo => TokenType::IfEqualTo, + "[" => TokenType::SquareOpen, + "]" => TokenType::SquareClose, } } \ No newline at end of file diff --git a/src/parser/grammar.rs b/src/parser/grammar.rs index 9b76e1f..b8340cf 100644 --- a/src/parser/grammar.rs +++ b/src/parser/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.0" -// sha3: 00c7262088a6187b68f7d6faf80a0eff3cd7ab29984ad20975eb41c02cec2322 +// sha3: c082c8135b7e7933e04de855a2b74d351321d0990335bc3a08e92e1c7ba88a91 use crate::lexer::tokens::*; use crate::lexer::LexicalError; use crate::executor::ast::*; @@ -40,200 +40,212 @@ mod __parse__SourceUnit { } const __ACTION: &[i8] = &[ // State 0 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 1 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -33, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, -33, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 2 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 3 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 4 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, -12, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 5 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 6 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 7 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 8 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 9 - 0, 0, 3, -12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 10 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, -12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 11 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 12 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 13 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 14 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 15 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 16 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 17 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, -12, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 18 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 19 - 0, 0, 3, -14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 0, 40, 0, + 0, 0, 3, -14, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, -14, 0, 5, -14, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 0, 42, 0, // State 20 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 21 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 22 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 23 - 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 37, 38, 39, 0, 5, 40, 6, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 24 - 0, 0, -25, -25, 0, 7, -25, 8, 0, -25, -25, -25, 0, -25, -25, 0, -25, -25, 0, 0, 0, 0, 0, 0, 0, -25, -25, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 25 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 39, 40, 41, 0, 6, 42, 7, // State 26 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, + 0, 0, -25, -25, 0, 8, -25, 9, 0, -25, -25, -25, 0, -25, -25, 0, 0, -25, -25, -25, 0, 0, 0, 0, 0, 0, 0, -25, -25, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 10, 0, 0, 0, 0, 0, 0, 43, 0, 11, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, // State 28 - 0, 14, -10, -10, 15, -10, -10, -10, 16, -10, -10, -10, 0, -10, -10, 0, -10, -10, 0, 0, 0, 0, 0, 0, 0, -10, -10, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, // State 29 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 45, 0, 12, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 30 - 0, 0, -35, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -35, 0, -35, -35, 0, 0, 0, 0, 0, -35, -35, -35, 0, -35, -35, -35, + 0, 15, -10, -10, 16, -10, -10, -10, 17, -10, -10, -10, 0, -10, -10, 0, 0, -10, -10, -10, 0, 0, 0, 0, 0, 0, 0, -10, -10, 0, 0, 0, 0, 0, 0, 0, 0, // State 31 - 0, 0, -34, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, 0, -34, -34, 0, 0, 0, 0, 0, -34, -34, -34, 0, -34, -34, -34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 32 - 0, -57, -57, 0, -57, -57, 0, -57, -57, -57, 0, -57, 0, 0, 0, 17, -57, -57, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, + 0, 0, -35, 0, 0, 0, 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, -35, 0, -35, -35, 0, 0, 0, 0, 0, -35, -35, -35, 0, -35, -35, -35, // State 33 - 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, -32, -32, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -34, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, -34, 0, -34, -34, 0, 0, 0, 0, 0, -34, -34, -34, 0, -34, -34, -34, // State 34 - 0, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, 0, -49, -49, -49, -49, -49, -49, 0, 0, 0, 0, -49, 0, -49, -49, 0, 0, 0, 0, -49, 0, 0, 0, + 0, -59, -59, 0, -59, -59, 0, -59, -59, -59, 0, -59, 0, 0, 0, 18, 19, 0, -59, -59, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, // State 35 - 0, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 0, -50, -50, -50, -50, -50, -50, 0, 0, 0, 0, -50, 0, -50, -50, 0, 0, 0, 0, -50, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, -32, -32, 0, 0, -32, -32, -32, 0, 0, 0, 0, 0, 0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 0, -52, -52, -52, -52, -52, -52, 0, 0, 0, 0, -52, 0, -52, -52, 0, 0, 0, 0, -52, 0, 0, 0, + 0, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, 0, -49, -49, -49, -49, -49, -49, -49, -49, 0, 0, 0, 0, -49, 0, -49, -49, 0, 0, 0, 0, -49, 0, 0, 0, // State 37 - 0, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 0, -53, -53, -53, -53, -53, -53, 0, 0, 0, 0, -53, 0, -53, -53, 0, 0, 0, 0, -53, 0, 0, 0, + 0, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 0, -50, -50, -50, -50, -50, -50, -50, -50, 0, 0, 0, 0, -50, 0, -50, -50, 0, 0, 0, 0, -50, 0, 0, 0, // State 38 - 0, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 0, -48, -48, -48, -48, -48, -48, 0, 0, 0, 0, -48, 0, -48, -48, 0, 0, 0, 0, -48, 0, 0, 0, + 0, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 0, -52, -52, -52, -52, -52, -52, -52, -52, 0, 0, 0, 0, -52, 0, -52, -52, 0, 0, 0, 0, -52, 0, 0, 0, // State 39 - 0, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 0, -51, -51, -51, -51, -51, -51, 0, 0, 0, 0, -51, 0, -51, -51, 0, 0, 0, 0, -51, 0, 0, 0, + 0, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 0, -53, -53, -53, -53, -53, -53, -53, -53, 0, 0, 0, 0, -53, 0, -53, -53, 0, 0, 0, 0, -53, 0, 0, 0, // State 40 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, + 0, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 0, -48, -48, -48, -48, -48, -48, -48, -48, 0, 0, 0, 0, -48, 0, -48, -48, 0, 0, 0, 0, -48, 0, 0, 0, // State 41 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 0, -51, -51, -51, -51, -51, -51, -51, -51, 0, 0, 0, 0, -51, 0, -51, -51, 0, 0, 0, 0, -51, 0, 0, 0, // State 42 - 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, -45, -45, 0, 0, 0, 0, 0, -45, -45, -45, 0, -45, -45, -45, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, // State 43 - 0, 0, -36, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, -36, -36, 0, 0, 0, 0, 0, -36, -36, -36, 0, -36, -36, -36, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, -45, -45, 0, 0, 0, 0, 0, -45, -45, -45, 0, -45, -45, -45, // State 45 - 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, -57, 17, -57, -57, 0, 0, 0, 0, 0, 0, 0, -57, -57, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -36, 0, 0, 0, 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, -36, 0, 0, 0, 0, -36, 0, -36, -36, 0, 0, 0, 0, 0, -36, -36, -36, 0, -36, -36, -36, // State 46 - 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, -56, 0, -56, -56, 0, 0, 0, 0, 0, 0, 0, -56, -56, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, -59, 18, 19, -59, -59, -59, 0, 0, 0, 0, 0, 0, 0, -59, -59, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, -58, 0, 0, -58, -58, -58, 0, 0, 0, 0, 0, 0, 0, -58, -58, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 14, -8, -8, 15, -8, -8, -8, 16, -8, -8, -8, 0, -8, -8, 0, -8, -8, 0, 0, 0, 0, 0, 0, 0, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 14, -9, -9, 15, -9, -9, -9, 16, -9, -9, -9, 0, -9, -9, 0, -9, -9, 0, 0, 0, 0, 0, 0, 0, -9, -9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -11, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, -11, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, -11, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, -8, -8, 16, -8, -8, -8, 17, -8, -8, -8, 0, -8, -8, 0, 0, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, -9, -9, 16, -9, -9, -9, 17, -9, -9, -9, 0, -9, -9, 0, 0, -9, -9, -9, 0, 0, 0, 0, 0, 0, 0, -9, -9, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, -31, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 0, -29, -29, 0, -29, -29, 0, 0, 0, 0, 0, 0, 0, -29, -29, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, -30, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, -31, 0, 0, -31, -31, -31, 0, 0, 0, 0, 0, 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, // State 63 - 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, -55, -55, -55, -55, -55, 0, 0, 0, 0, -55, 0, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, + 0, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 0, -29, -29, 0, 0, -29, -29, -29, 0, 0, 0, 0, 0, 0, 0, -29, -29, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, -44, -44, 0, 0, 0, 0, 0, -44, -44, -44, 0, -44, -44, -44, + 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, -30, 0, 0, -30, -30, -30, 0, 0, 0, 0, 0, 0, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, -38, 0, 0, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -38, 0, -38, -38, 0, 0, 0, 0, 0, -38, -38, -38, 0, -38, -38, -38, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 82, -41, -41, 0, 0, 0, 0, 0, -41, -41, -41, 0, -41, -41, -41, + 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, -55, -55, -55, -55, -55, -55, -55, 0, 0, 0, 0, -55, 0, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, // State 68 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -13, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 69 - 0, 0, 0, -13, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -4, -4, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, -4, 0, -4, -4, 0, 0, 0, 0, 0, -4, -4, 0, 0, 0, 0, 0, -4, -4, -4, 0, 0, -4, 0, // State 70 - 0, 0, -4, -4, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, -4, -4, 0, 0, 0, 0, 0, -4, -4, -4, 0, 0, -4, 0, + 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, -56, -56, -56, -56, -56, -56, -56, 0, 0, 0, 0, -56, 0, -56, -56, 0, 0, 0, 0, -56, 0, 0, 0, // State 71 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, -44, -44, 0, 0, 0, 0, 0, -44, -44, -44, 0, -44, -44, -44, // State 72 - 0, 0, -37, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, -37, -37, 0, 0, 0, 0, 0, -37, -37, -37, 0, -37, -37, -37, + 0, 0, -38, 0, 0, 0, 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, -38, 0, 0, 0, 0, -38, 0, -38, -38, 0, 0, 0, 0, 0, -38, -38, -38, 0, -38, -38, -38, // State 73 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, + 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, -41, 89, -41, -41, 0, 0, 0, 0, 0, -41, -41, -41, 0, -41, -41, -41, // State 75 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 77 - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -37, 0, 0, 0, 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, 0, 0, 0, -37, 0, -37, -37, 0, 0, 0, 0, 0, -37, -37, -37, 0, -37, -37, -37, // State 78 - 0, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 0, -54, -54, -54, -54, -54, -54, 0, 0, 0, 0, -54, 0, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, // State 79 - 0, 0, -39, 0, 0, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -39, 89, -39, -39, 0, 0, 0, 0, 0, -39, -39, -39, 0, -39, -39, -39, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, // State 80 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, // State 81 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 0, 0, 0, // State 82 - 0, 0, -47, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, -47, -47, 0, 0, 0, 0, 0, -47, -47, -47, 0, -47, -47, -47, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, // State 83 - 0, 0, -5, -5, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, -5, -5, -5, 0, 0, -5, 0, + 0, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 0, -54, -54, -54, -54, -54, -54, -54, -54, 0, 0, 0, 0, -54, 0, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, // State 84 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, + 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, -57, -57, -57, -57, -57, -57, -57, 0, 0, 0, 0, -57, 0, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, // State 85 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, + 0, 0, -5, -5, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -5, 0, -5, -5, 0, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, -5, -5, -5, 0, 0, -5, 0, // State 86 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, + 0, 0, -39, 0, 0, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, -39, 0, 0, 0, 0, -39, 95, -39, -39, 0, 0, 0, 0, 0, -39, -39, -39, 0, -39, -39, -39, // State 87 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, -46, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, -46, -46, 0, 0, 0, 0, 0, -46, -46, -46, 0, -46, -46, -46, + 0, 0, -47, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, -47, 0, -47, -47, 0, 0, 0, 0, 0, -47, -47, -47, 0, -47, -47, -47, // State 90 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, // State 91 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, // State 92 - 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, -43, -43, 0, 0, 0, 0, 0, -43, -43, -43, 0, -43, -43, -43, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, // State 93 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, // State 94 - 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, -42, -42, 0, 0, 0, 0, 0, -42, -42, -42, 0, -42, -42, -42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 95 - 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, -40, -40, 0, 0, 0, 0, 0, -40, -40, -40, 0, -40, -40, -40, + 0, 0, -46, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, -46, 0, -46, -46, 0, 0, 0, 0, 0, -46, -46, -46, 0, -46, -46, -46, + // State 96 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 97 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 98 + 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, -43, -43, 0, 0, 0, 0, 0, -43, -43, -43, 0, -43, -43, -43, + // State 99 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 100 + 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, -42, 0, -42, -42, 0, 0, 0, 0, 0, -42, -42, -42, 0, -42, -42, -42, + // State 101 + 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, -40, 0, -40, -40, 0, 0, 0, 0, 0, -40, -40, -40, 0, -40, -40, -40, ]; fn __action(state: i8, integer: usize) -> i8 { - __ACTION[(state as usize) * 35 + integer] + __ACTION[(state as usize) * 37 + integer] } const __EOF_ACTION: &[i8] = &[ // State 0 @@ -295,15 +307,15 @@ mod __parse__SourceUnit { // State 28 0, // State 29 - -58, + 0, // State 30 - -35, + 0, // State 31 - -34, + -60, // State 32 - 0, + -35, // State 33 - 0, + -34, // State 34 0, // State 35 @@ -321,13 +333,13 @@ mod __parse__SourceUnit { // State 41 0, // State 42 - -45, + 0, // State 43 - -36, - // State 44 0, + // State 44 + -45, // State 45 - 0, + -36, // State 46 0, // State 47 @@ -365,13 +377,13 @@ mod __parse__SourceUnit { // State 63 0, // State 64 - -44, + 0, // State 65 - -38, + 0, // State 66 0, // State 67 - -41, + 0, // State 68 0, // State 69 @@ -379,29 +391,29 @@ mod __parse__SourceUnit { // State 70 0, // State 71 - 0, + -44, // State 72 - -37, + -38, // State 73 0, // State 74 - 0, + -41, // State 75 0, // State 76 0, // State 77 - 0, + -37, // State 78 0, // State 79 - -39, + 0, // State 80 0, // State 81 0, // State 82 - -47, + 0, // State 83 0, // State 84 @@ -409,79 +421,93 @@ mod __parse__SourceUnit { // State 85 0, // State 86 - 0, + -39, // State 87 0, // State 88 0, // State 89 - -46, + -47, // State 90 0, // State 91 0, // State 92 - -43, + 0, // State 93 0, // State 94 - -42, + 0, // State 95 + -46, + // State 96 + 0, + // State 97 + 0, + // State 98 + -43, + // State 99 + 0, + // State 100 + -42, + // State 101 -40, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { 2 => 19, - 5 => 24, - 6 => 53, - 7 => 25, - 8 => 26, + 5 => 26, + 6 => 49, + 7 => 27, + 8 => 28, 9 => match state { - 2 => 44, - 4 => 47, - 5 => 48, - 9 | 16 => 54, - 10 => 56, - 11 => 57, - 12 => 58, - 19 => 69, - _ => 27, + 2 => 46, + 4 | 10 | 17 => 50, + 5 => 52, + 6 => 53, + 11 => 59, + 12 => 60, + 13 => 61, + 18 => 66, + 19 => 68, + _ => 29, }, 11 => match state { - 16 => 62, - _ => 55, + 10 => 58, + 17 => 65, + _ => 51, }, 12 => match state { - 6 => 49, - 7 => 50, - _ => 28, + 7 => 54, + 8 => 55, + _ => 30, }, 13 => match state { - 8 => 52, - 17 => 66, - 18 => 68, - 20 => 80, - 21 => 90, - 22 => 91, - 23 => 93, - _ => 29, + 9 => 57, + 20 => 73, + 21 => 75, + 22 => 87, + 23 => 96, + 24 => 97, + 25 => 99, + _ => 31, }, 14 => match state { - 1 => 43, - _ => 30, + 1 => 45, + _ => 32, }, 15 => 1, - 16 => 31, + 16 => 33, 17 => match state { - 2..=7 | 9..=16 | 19 => 45, - _ => 32, + 2..=8 | 10..=19 => 47, + _ => 34, }, 18 => match state { - 3 => 46, - 13 => 59, - 14 => 60, - 15 => 61, - _ => 33, + 3 => 48, + 14 => 62, + 15 => 63, + 16 => 64, + _ => 35, }, _ => 0, } @@ -503,6 +529,8 @@ mod __parse__SourceUnit { r###"">""###, r###""Close""###, r###""Open""###, + r###""[""###, + r###""]""###, r###""ne_kal""###, r###""um""###, r###""{""###, @@ -590,7 +618,7 @@ mod __parse__SourceUnit { #[inline] fn error_action(&self, state: i8) -> i8 { - __action(state, 35 - 1) + __action(state, 37 - 1) } #[inline] @@ -672,25 +700,27 @@ mod __parse__SourceUnit { TokenType::GreaterThan if true => Some(13), TokenType::AngleClose if true => Some(14), TokenType::AngleOpen if true => Some(15), - TokenType::Nekal if true => Some(16), - TokenType::Um if true => Some(17), - TokenType::LeftBrace if true => Some(18), - TokenType::RightBrace if true => Some(19), - TokenType::Else if true => Some(20), - TokenType::Float(f64) if true => Some(21), - TokenType::Symbol(usize) if true => Some(22), - TokenType::If if true => Some(23), - TokenType::IfEqualTo if true => Some(24), - TokenType::IfGreaterThan if true => Some(25), - TokenType::IfLessThan if true => Some(26), - TokenType::IfNotEqual if true => Some(27), - TokenType::InputNumber if true => Some(28), - TokenType::InputString if true => Some(29), - TokenType::Integer(i64) if true => Some(30), - TokenType::Loop if true => Some(31), - TokenType::Return if true => Some(32), - TokenType::Literal(usize) if true => Some(33), - TokenType::Write if true => Some(34), + TokenType::SquareOpen if true => Some(16), + TokenType::SquareClose if true => Some(17), + TokenType::Nekal if true => Some(18), + TokenType::Um if true => Some(19), + TokenType::LeftBrace if true => Some(20), + TokenType::RightBrace if true => Some(21), + TokenType::Else if true => Some(22), + TokenType::Float(f64) if true => Some(23), + TokenType::Symbol(usize) if true => Some(24), + TokenType::If if true => Some(25), + TokenType::IfEqualTo if true => Some(26), + TokenType::IfGreaterThan if true => Some(27), + TokenType::IfLessThan if true => Some(28), + TokenType::IfNotEqual if true => Some(29), + TokenType::InputNumber if true => Some(30), + TokenType::InputString if true => Some(31), + TokenType::Integer(i64) if true => Some(32), + TokenType::Loop if true => Some(33), + TokenType::Return if true => Some(34), + TokenType::Literal(usize) if true => Some(35), + TokenType::Write if true => Some(36), _ => None, } } @@ -702,7 +732,7 @@ mod __parse__SourceUnit { ) -> __Symbol<> { match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 => __Symbol::Variant0(__token), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 => __Symbol::Variant0(__token), _ => unreachable!(), } } @@ -1045,18 +1075,30 @@ mod __parse__SourceUnit { } } 55 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 17, + } + } + 56 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 4, + nonterminal_produced: 17, + } + } + 57 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 18, } } - 56 => { + 58 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 18, } } - 57 => __state_machine::SimulatedReduce::Accept, + 59 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -1308,6 +1350,12 @@ mod __parse__SourceUnit { __reduce56(input, __lookahead_start, __symbols, core::marker::PhantomData::<()>) } 57 => { + __reduce57(input, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 58 => { + __reduce58(input, __lookahead_start, __symbols, core::marker::PhantomData::<()>) + } + 59 => { // __SourceUnit = SourceUnit => ActionFn(0); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; @@ -1436,13 +1484,13 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",") = Expression, "," => ActionFn(52); + // ( ",") = Expression, "," => ActionFn(54); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action52::<>(input, __sym0, __sym1); + let __nt = super::__action54::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 0) } @@ -1454,10 +1502,10 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(50); + // ( ",")* = => ActionFn(52); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action50::<>(input, &__start, &__end); + let __nt = super::__action52::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (0, 1) } @@ -1469,11 +1517,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(51); + // ( ",")* = ( ",")+ => ActionFn(53); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); + let __nt = super::__action53::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -1485,13 +1533,13 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")+ = Expression, "," => ActionFn(55); + // ( ",")+ = Expression, "," => ActionFn(57); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action55::<>(input, __sym0, __sym1); + let __nt = super::__action57::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 2) } @@ -1503,14 +1551,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expression, "," => ActionFn(56); + // ( ",")+ = ( ",")+, Expression, "," => ActionFn(58); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action56::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (3, 2) } @@ -1522,10 +1570,10 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // @L = => ActionFn(44); + // @L = => ActionFn(46); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action44::<>(input, &__start, &__end); + let __nt = super::__action46::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 3) } @@ -1537,10 +1585,10 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // @R = => ActionFn(43); + // @R = => ActionFn(45); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action43::<>(input, &__start, &__end); + let __nt = super::__action45::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 4) } @@ -1552,14 +1600,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ArithExpression = ArithExpression, "+", Factor => ActionFn(91); + // ArithExpression = ArithExpression, "+", Factor => ActionFn(95); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant1(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action91::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action95::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (3, 5) } @@ -1571,14 +1619,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ArithExpression = ArithExpression, "-", Factor => ActionFn(92); + // ArithExpression = ArithExpression, "-", Factor => ActionFn(96); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant1(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action92::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action96::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (3, 5) } @@ -1606,11 +1654,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = Expression => ActionFn(123); + // Comma = Expression => ActionFn(129); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action123::<>(input, __sym0); + let __nt = super::__action129::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 6) } @@ -1622,10 +1670,10 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = => ActionFn(124); + // Comma = => ActionFn(130); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action124::<>(input, &__start, &__end); + let __nt = super::__action130::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (0, 6) } @@ -1637,13 +1685,13 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = ( ",")+, Expression => ActionFn(125); + // Comma = ( ",")+, Expression => ActionFn(131); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action125::<>(input, __sym0, __sym1); + let __nt = super::__action131::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 6) } @@ -1655,11 +1703,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(126); + // Comma = ( ",")+ => ActionFn(132); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action126::<>(input, __sym0); + let __nt = super::__action132::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 6) } @@ -1671,7 +1719,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Conditional = Expression, "um", Expression, "um", "==" => ActionFn(93); + // Conditional = Expression, "um", Expression, "um", "==" => ActionFn(97); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -1680,7 +1728,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action93::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action97::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (5, 7) } @@ -1692,7 +1740,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Conditional = Expression, "um", Expression, "um", "!=" => ActionFn(94); + // Conditional = Expression, "um", Expression, "um", "!=" => ActionFn(98); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -1701,7 +1749,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action94::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (5, 7) } @@ -1713,7 +1761,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Conditional = Expression, "ne_kal", Expression, ">" => ActionFn(95); + // Conditional = Expression, "ne_kal", Expression, ">" => ActionFn(99); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant1(__symbols); @@ -1721,7 +1769,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action95::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (4, 7) } @@ -1733,7 +1781,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Conditional = Expression, "ne_kal", Expression, "<" => ActionFn(96); + // Conditional = Expression, "ne_kal", Expression, "<" => ActionFn(100); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant1(__symbols); @@ -1741,7 +1789,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action96::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (4, 7) } @@ -1769,7 +1817,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConditionalWithAgglutination = Expression, "um", Expression, "um", IfEqualTo => ActionFn(97); + // ConditionalWithAgglutination = Expression, "um", Expression, "um", IfEqualTo => ActionFn(101); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -1778,7 +1826,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action97::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (5, 8) } @@ -1790,7 +1838,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConditionalWithAgglutination = Expression, "um", Expression, "um", IfNotEqual => ActionFn(98); + // ConditionalWithAgglutination = Expression, "um", Expression, "um", IfNotEqual => ActionFn(102); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -1799,7 +1847,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (5, 8) } @@ -1811,7 +1859,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConditionalWithAgglutination = Expression, "ne_kal", Expression, IfGreaterThan => ActionFn(99); + // ConditionalWithAgglutination = Expression, "ne_kal", Expression, IfGreaterThan => ActionFn(103); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant1(__symbols); @@ -1819,7 +1867,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (4, 8) } @@ -1831,7 +1879,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // ConditionalWithAgglutination = Expression, "ne_kal", Expression, IfLessThan => ActionFn(100); + // ConditionalWithAgglutination = Expression, "ne_kal", Expression, IfLessThan => ActionFn(104); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant1(__symbols); @@ -1839,7 +1887,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (4, 8) } @@ -1883,11 +1931,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression? = Expression => ActionFn(48); + // Expression? = Expression => ActionFn(50); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action48::<>(input, __sym0); + let __nt = super::__action50::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 10) } @@ -1899,10 +1947,10 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Expression? = => ActionFn(49); + // Expression? = => ActionFn(51); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action49::<>(input, &__start, &__end); + let __nt = super::__action51::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 10) } @@ -1930,14 +1978,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor = Factor, "*", Unary => ActionFn(101); + // Factor = Factor, "*", Unary => ActionFn(105); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant1(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (3, 12) } @@ -1949,14 +1997,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor = Factor, "/", Unary => ActionFn(102); + // Factor = Factor, "/", Unary => ActionFn(106); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant1(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (3, 12) } @@ -1968,14 +2016,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Factor = Factor, "%", Unary => ActionFn(103); + // Factor = Factor, "%", Unary => ActionFn(107); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant1(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (3, 12) } @@ -2035,11 +2083,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SourceUnitPart+ = SourceUnitPart => ActionFn(46); + // SourceUnitPart+ = SourceUnitPart => ActionFn(48); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action46::<>(input, __sym0); + let __nt = super::__action48::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 15) } @@ -2051,13 +2099,13 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // SourceUnitPart+ = SourceUnitPart+, SourceUnitPart => ActionFn(47); + // SourceUnitPart+ = SourceUnitPart+, SourceUnitPart => ActionFn(49); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action47::<>(input, __sym0, __sym1); + let __nt = super::__action49::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (2, 15) } @@ -2069,7 +2117,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Expression, "=", Expression, ";" => ActionFn(104); + // Statement = Expression, "=", Expression, ";" => ActionFn(108); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant1(__symbols); @@ -2077,7 +2125,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (4, 16) } @@ -2089,14 +2137,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Write, Expression, ";" => ActionFn(105); + // Statement = Write, Expression, ";" => ActionFn(109); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (3, 16) } @@ -2108,7 +2156,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Conditional, If, "{", SourceUnit, "}" => ActionFn(106); + // Statement = Conditional, If, "{", SourceUnit, "}" => ActionFn(110); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant6(__symbols); @@ -2117,7 +2165,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (5, 16) } @@ -2129,7 +2177,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Conditional, If, "{", SourceUnit, "}", Else, "{", SourceUnit, "}" => ActionFn(107); + // Statement = Conditional, If, "{", SourceUnit, "}", Else, "{", SourceUnit, "}" => ActionFn(111); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant6(__symbols); @@ -2142,7 +2190,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (9, 16) } @@ -2154,7 +2202,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = ConditionalWithAgglutination, "{", SourceUnit, "}" => ActionFn(108); + // Statement = ConditionalWithAgglutination, "{", SourceUnit, "}" => ActionFn(112); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant6(__symbols); @@ -2162,7 +2210,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (4, 16) } @@ -2174,7 +2222,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = ConditionalWithAgglutination, "{", SourceUnit, "}", Else, "{", SourceUnit, "}" => ActionFn(109); + // Statement = ConditionalWithAgglutination, "{", SourceUnit, "}", Else, "{", SourceUnit, "}" => ActionFn(113); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant6(__symbols); @@ -2186,7 +2234,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action113::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (8, 16) } @@ -2198,7 +2246,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Expression, "(", Expressions, ")", "{", SourceUnit, "}" => ActionFn(110); + // Statement = Expression, "(", Expressions, ")", "{", SourceUnit, "}" => ActionFn(114); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant6(__symbols); @@ -2209,7 +2257,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action114::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (7, 16) } @@ -2221,14 +2269,14 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Return, Expression, ";" => ActionFn(111); + // Statement = Return, Expression, ";" => ActionFn(115); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action115::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (3, 16) } @@ -2240,13 +2288,13 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Expression, ";" => ActionFn(112); + // Statement = Expression, ";" => ActionFn(116); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action112::<>(input, __sym0, __sym1); + let __nt = super::__action116::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (2, 16) } @@ -2258,7 +2306,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = Conditional, If, Loop, "{", SourceUnit, "}" => ActionFn(113); + // Statement = Conditional, If, Loop, "{", SourceUnit, "}" => ActionFn(117); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant6(__symbols); @@ -2268,7 +2316,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action113::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action117::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (6, 16) } @@ -2280,7 +2328,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Statement = ConditionalWithAgglutination, Loop, "{", SourceUnit, "}" => ActionFn(114); + // Statement = ConditionalWithAgglutination, Loop, "{", SourceUnit, "}" => ActionFn(118); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant6(__symbols); @@ -2289,7 +2337,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action114::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action118::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (5, 16) } @@ -2301,11 +2349,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = Integer => ActionFn(115); + // Term = Integer => ActionFn(119); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action115::<>(input, __sym0); + let __nt = super::__action119::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 17) } @@ -2317,11 +2365,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = Float => ActionFn(116); + // Term = Float => ActionFn(120); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action116::<>(input, __sym0); + let __nt = super::__action120::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 17) } @@ -2333,11 +2381,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = Identifier => ActionFn(117); + // Term = Identifier => ActionFn(121); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action117::<>(input, __sym0); + let __nt = super::__action121::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 17) } @@ -2349,11 +2397,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = StringLiteral => ActionFn(118); + // Term = StringLiteral => ActionFn(122); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action118::<>(input, __sym0); + let __nt = super::__action122::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 17) } @@ -2365,11 +2413,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = InputNumber => ActionFn(119); + // Term = InputNumber => ActionFn(123); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action119::<>(input, __sym0); + let __nt = super::__action123::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 17) } @@ -2381,11 +2429,11 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = InputString => ActionFn(120); + // Term = InputString => ActionFn(124); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action120::<>(input, __sym0); + let __nt = super::__action124::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 17) } @@ -2397,7 +2445,7 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Term = Term, "Open", Expressions, "Close" => ActionFn(121); + // Term = Term, "Open", Expressions, "Close" => ActionFn(125); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -2405,7 +2453,7 @@ mod __parse__SourceUnit { let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action121::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action125::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (4, 17) } @@ -2436,17 +2484,56 @@ mod __parse__SourceUnit { _: core::marker::PhantomData<()>, ) -> (usize, usize) { - // Unary = "-", Unary => ActionFn(122); + // Term = "[", Expressions, "]" => ActionFn(126); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action126::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant1(__nt), __end)); + (3, 17) + } + pub(crate) fn __reduce56< + >( + input: &str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Term = Term, "[", Expression, "]" => ActionFn(127); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant1(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant1(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant1(__nt), __end)); + (4, 17) + } + pub(crate) fn __reduce57< + >( + input: &str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<>,usize)>, + _: core::marker::PhantomData<()>, + ) -> (usize, usize) + { + // Unary = "-", Unary => ActionFn(128); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant1(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action122::<>(input, __sym0, __sym1); + let __nt = super::__action128::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (2, 18) } - pub(crate) fn __reduce56< + pub(crate) fn __reduce58< >( input: &str, __lookahead_start: Option<&usize>, @@ -3092,7 +3179,38 @@ fn __action42< } #[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] fn __action43< +>( + input: &str, + (_, a, _): (usize, usize, usize), + (_, _, _): (usize, TokenType, usize), + (_, items, _): (usize, Vec, usize), + (_, _, _): (usize, TokenType, usize), + (_, b, _): (usize, usize, usize), +) -> Expression +{ + Expression::ListExpression((a,b),items) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action44< +>( + input: &str, + (_, a, _): (usize, usize, usize), + (_, id, _): (usize, Expression, usize), + (_, _, _): (usize, TokenType, usize), + (_, idx, _): (usize, Expression, usize), + (_, _, _): (usize, TokenType, usize), + (_, b, _): (usize, usize, usize), +) -> Expression +{ + Expression::ListSubScript((a,b),Box::new(id),Box::new(idx)) +} + +#[allow(unused_variables)] +fn __action45< >( input: &str, __lookbehind: &usize, @@ -3103,7 +3221,7 @@ fn __action43< } #[allow(unused_variables)] -fn __action44< +fn __action46< >( input: &str, __lookbehind: &usize, @@ -3115,7 +3233,7 @@ fn __action44< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action45< +fn __action47< >( input: &str, (_, v, _): (usize, alloc::vec::Vec, usize), @@ -3134,7 +3252,7 @@ fn __action45< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action46< +fn __action48< >( input: &str, (_, __0, _): (usize, SourceUnitPart, usize), @@ -3145,7 +3263,7 @@ fn __action46< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action47< +fn __action49< >( input: &str, (_, v, _): (usize, alloc::vec::Vec, usize), @@ -3157,7 +3275,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action48< +fn __action50< >( input: &str, (_, __0, _): (usize, Expression, usize), @@ -3168,7 +3286,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action49< +fn __action51< >( input: &str, __lookbehind: &usize, @@ -3180,7 +3298,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action50< +fn __action52< >( input: &str, __lookbehind: &usize, @@ -3192,7 +3310,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action51< +fn __action53< >( input: &str, (_, v, _): (usize, alloc::vec::Vec, usize), @@ -3203,7 +3321,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action52< +fn __action54< >( input: &str, (_, __0, _): (usize, Expression, usize), @@ -3215,7 +3333,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action53< +fn __action55< >( input: &str, (_, __0, _): (usize, Expression, usize), @@ -3226,7 +3344,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action54< +fn __action56< >( input: &str, (_, v, _): (usize, alloc::vec::Vec, usize), @@ -3238,7 +3356,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action55< +fn __action57< >( input: &str, __0: (usize, Expression, usize), @@ -3247,13 +3365,13 @@ fn __action55< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action52( + let __temp0 = __action54( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action53( + __action55( input, __temp0, ) @@ -3261,7 +3379,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action56< +fn __action58< >( input: &str, __0: (usize, alloc::vec::Vec, usize), @@ -3271,13 +3389,13 @@ fn __action56< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action52( + let __temp0 = __action54( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action54( + __action56( input, __0, __temp0, @@ -3286,7 +3404,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action57< +fn __action59< >( input: &str, __0: (usize, core::option::Option, usize), @@ -3294,13 +3412,13 @@ fn __action57< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action50( + let __temp0 = __action52( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action45( + __action47( input, __temp0, __0, @@ -3309,7 +3427,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action58< +fn __action60< >( input: &str, __0: (usize, alloc::vec::Vec, usize), @@ -3318,12 +3436,12 @@ fn __action58< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action51( + let __temp0 = __action53( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action45( + __action47( input, __temp0, __1, @@ -3332,7 +3450,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action59< +fn __action61< >( input: &str, __0: (usize, Expression, usize), @@ -3343,7 +3461,7 @@ fn __action59< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3361,7 +3479,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action60< +fn __action62< >( input: &str, __0: (usize, Expression, usize), @@ -3372,7 +3490,7 @@ fn __action60< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3390,7 +3508,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action61< +fn __action63< >( input: &str, __0: (usize, Expression, usize), @@ -3403,7 +3521,7 @@ fn __action61< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3423,7 +3541,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action62< +fn __action64< >( input: &str, __0: (usize, Expression, usize), @@ -3436,7 +3554,7 @@ fn __action62< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3456,7 +3574,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action63< +fn __action65< >( input: &str, __0: (usize, Expression, usize), @@ -3468,7 +3586,7 @@ fn __action63< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3487,7 +3605,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action64< +fn __action66< >( input: &str, __0: (usize, Expression, usize), @@ -3499,7 +3617,7 @@ fn __action64< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3518,7 +3636,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action65< +fn __action67< >( input: &str, __0: (usize, Expression, usize), @@ -3531,7 +3649,7 @@ fn __action65< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3551,7 +3669,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action66< +fn __action68< >( input: &str, __0: (usize, Expression, usize), @@ -3564,7 +3682,7 @@ fn __action66< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3584,7 +3702,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action67< +fn __action69< >( input: &str, __0: (usize, Expression, usize), @@ -3596,7 +3714,7 @@ fn __action67< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3615,7 +3733,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action68< +fn __action70< >( input: &str, __0: (usize, Expression, usize), @@ -3627,7 +3745,7 @@ fn __action68< { let __start0 = __2.2; let __end0 = __3.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3646,7 +3764,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action69< +fn __action71< >( input: &str, __0: (usize, Expression, usize), @@ -3657,7 +3775,7 @@ fn __action69< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3675,7 +3793,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action70< +fn __action72< >( input: &str, __0: (usize, Expression, usize), @@ -3686,7 +3804,7 @@ fn __action70< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3704,7 +3822,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action71< +fn __action73< >( input: &str, __0: (usize, Expression, usize), @@ -3715,7 +3833,7 @@ fn __action71< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3733,7 +3851,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action72< +fn __action74< >( input: &str, __0: (usize, Expression, usize), @@ -3745,7 +3863,7 @@ fn __action72< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3764,7 +3882,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action73< +fn __action75< >( input: &str, __0: (usize, TokenType, usize), @@ -3775,7 +3893,7 @@ fn __action73< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3793,7 +3911,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action74< +fn __action76< >( input: &str, __0: (usize, Expression, usize), @@ -3806,7 +3924,7 @@ fn __action74< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3826,7 +3944,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action75< +fn __action77< >( input: &str, __0: (usize, Expression, usize), @@ -3843,7 +3961,7 @@ fn __action75< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3867,7 +3985,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action76< +fn __action78< >( input: &str, __0: (usize, Expression, usize), @@ -3879,7 +3997,7 @@ fn __action76< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3898,7 +4016,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action77< +fn __action79< >( input: &str, __0: (usize, Expression, usize), @@ -3914,7 +4032,7 @@ fn __action77< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3937,7 +4055,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action78< +fn __action80< >( input: &str, __0: (usize, Expression, usize), @@ -3952,7 +4070,7 @@ fn __action78< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -3974,7 +4092,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action79< +fn __action81< >( input: &str, __0: (usize, TokenType, usize), @@ -3985,7 +4103,7 @@ fn __action79< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4003,7 +4121,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action80< +fn __action82< >( input: &str, __0: (usize, Expression, usize), @@ -4013,7 +4131,7 @@ fn __action80< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4030,7 +4148,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action81< +fn __action83< >( input: &str, __0: (usize, Expression, usize), @@ -4044,7 +4162,7 @@ fn __action81< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4065,7 +4183,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action82< +fn __action84< >( input: &str, __0: (usize, Expression, usize), @@ -4078,7 +4196,7 @@ fn __action82< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4098,7 +4216,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action83< +fn __action85< >( input: &str, __0: (usize, TokenType, usize), @@ -4107,7 +4225,7 @@ fn __action83< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4123,7 +4241,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action84< +fn __action86< >( input: &str, __0: (usize, TokenType, usize), @@ -4132,7 +4250,7 @@ fn __action84< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4148,7 +4266,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action85< +fn __action87< >( input: &str, __0: (usize, TokenType, usize), @@ -4157,7 +4275,7 @@ fn __action85< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4173,7 +4291,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action86< +fn __action88< >( input: &str, __0: (usize, TokenType, usize), @@ -4182,7 +4300,7 @@ fn __action86< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4198,7 +4316,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action87< +fn __action89< >( input: &str, __0: (usize, TokenType, usize), @@ -4207,7 +4325,7 @@ fn __action87< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4223,7 +4341,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action88< +fn __action90< >( input: &str, __0: (usize, TokenType, usize), @@ -4232,7 +4350,7 @@ fn __action88< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4248,7 +4366,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action89< +fn __action91< >( input: &str, __0: (usize, Expression, usize), @@ -4260,7 +4378,7 @@ fn __action89< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4279,7 +4397,67 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action90< +fn __action92< +>( + input: &str, + __0: (usize, TokenType, usize), + __1: (usize, Vec, usize), + __2: (usize, TokenType, usize), + __3: (usize, usize, usize), +) -> Expression +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action46( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action43( + input, + __temp0, + __0, + __1, + __2, + __3, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action93< +>( + input: &str, + __0: (usize, Expression, usize), + __1: (usize, TokenType, usize), + __2: (usize, Expression, usize), + __3: (usize, TokenType, usize), + __4: (usize, usize, usize), +) -> Expression +{ + let __start0 = __0.0; + let __end0 = __0.0; + let __temp0 = __action46( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action44( + input, + __temp0, + __0, + __1, + __2, + __3, + __4, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action94< >( input: &str, __0: (usize, TokenType, usize), @@ -4289,7 +4467,7 @@ fn __action90< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action44( + let __temp0 = __action46( input, &__start0, &__end0, @@ -4306,7 +4484,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action91< +fn __action95< >( input: &str, __0: (usize, Expression, usize), @@ -4316,13 +4494,13 @@ fn __action91< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action59( + __action61( input, __0, __1, @@ -4333,7 +4511,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action92< +fn __action96< >( input: &str, __0: (usize, Expression, usize), @@ -4343,13 +4521,13 @@ fn __action92< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action60( + __action62( input, __0, __1, @@ -4360,7 +4538,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action93< +fn __action97< >( input: &str, __0: (usize, Expression, usize), @@ -4372,13 +4550,13 @@ fn __action93< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action61( + __action63( input, __0, __1, @@ -4391,7 +4569,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action94< +fn __action98< >( input: &str, __0: (usize, Expression, usize), @@ -4403,13 +4581,13 @@ fn __action94< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action62( + __action64( input, __0, __1, @@ -4422,7 +4600,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action95< +fn __action99< >( input: &str, __0: (usize, Expression, usize), @@ -4433,13 +4611,13 @@ fn __action95< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action63( + __action65( input, __0, __1, @@ -4451,7 +4629,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action96< +fn __action100< >( input: &str, __0: (usize, Expression, usize), @@ -4462,13 +4640,13 @@ fn __action96< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action64( + __action66( input, __0, __1, @@ -4480,7 +4658,7 @@ fn __action96< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action97< +fn __action101< >( input: &str, __0: (usize, Expression, usize), @@ -4492,13 +4670,13 @@ fn __action97< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action65( + __action67( input, __0, __1, @@ -4511,7 +4689,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action98< +fn __action102< >( input: &str, __0: (usize, Expression, usize), @@ -4523,13 +4701,13 @@ fn __action98< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action66( + __action68( input, __0, __1, @@ -4542,7 +4720,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action99< +fn __action103< >( input: &str, __0: (usize, Expression, usize), @@ -4553,13 +4731,13 @@ fn __action99< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action67( + __action69( input, __0, __1, @@ -4571,7 +4749,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action100< +fn __action104< >( input: &str, __0: (usize, Expression, usize), @@ -4582,13 +4760,13 @@ fn __action100< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action68( + __action70( input, __0, __1, @@ -4600,7 +4778,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action101< +fn __action105< >( input: &str, __0: (usize, Expression, usize), @@ -4610,13 +4788,13 @@ fn __action101< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action69( + __action71( input, __0, __1, @@ -4627,7 +4805,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action102< +fn __action106< >( input: &str, __0: (usize, Expression, usize), @@ -4637,13 +4815,13 @@ fn __action102< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action70( + __action72( input, __0, __1, @@ -4654,7 +4832,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action103< +fn __action107< >( input: &str, __0: (usize, Expression, usize), @@ -4664,13 +4842,13 @@ fn __action103< { let __start0 = __1.2; let __end0 = __2.0; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action71( + __action73( input, __0, __1, @@ -4681,7 +4859,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action104< +fn __action108< >( input: &str, __0: (usize, Expression, usize), @@ -4692,13 +4870,13 @@ fn __action104< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action72( + __action74( input, __0, __1, @@ -4710,7 +4888,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action105< +fn __action109< >( input: &str, __0: (usize, TokenType, usize), @@ -4720,13 +4898,13 @@ fn __action105< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action73( + __action75( input, __0, __1, @@ -4737,7 +4915,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action106< +fn __action110< >( input: &str, __0: (usize, Expression, usize), @@ -4749,13 +4927,13 @@ fn __action106< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action74( + __action76( input, __0, __1, @@ -4768,7 +4946,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action107< +fn __action111< >( input: &str, __0: (usize, Expression, usize), @@ -4784,13 +4962,13 @@ fn __action107< { let __start0 = __8.2; let __end0 = __8.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action75( + __action77( input, __0, __1, @@ -4807,7 +4985,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action108< +fn __action112< >( input: &str, __0: (usize, Expression, usize), @@ -4818,13 +4996,13 @@ fn __action108< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action76( + __action78( input, __0, __1, @@ -4836,7 +5014,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action109< +fn __action113< >( input: &str, __0: (usize, Expression, usize), @@ -4851,13 +5029,13 @@ fn __action109< { let __start0 = __7.2; let __end0 = __7.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action77( + __action79( input, __0, __1, @@ -4873,7 +5051,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action110< +fn __action114< >( input: &str, __0: (usize, Expression, usize), @@ -4887,13 +5065,13 @@ fn __action110< { let __start0 = __6.2; let __end0 = __6.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action78( + __action80( input, __0, __1, @@ -4908,7 +5086,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action111< +fn __action115< >( input: &str, __0: (usize, TokenType, usize), @@ -4918,13 +5096,13 @@ fn __action111< { let __start0 = __2.2; let __end0 = __2.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action79( + __action81( input, __0, __1, @@ -4935,7 +5113,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action112< +fn __action116< >( input: &str, __0: (usize, Expression, usize), @@ -4944,13 +5122,13 @@ fn __action112< { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action80( + __action82( input, __0, __1, @@ -4960,7 +5138,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action113< +fn __action117< >( input: &str, __0: (usize, Expression, usize), @@ -4973,13 +5151,13 @@ fn __action113< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action81( + __action83( input, __0, __1, @@ -4993,7 +5171,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action114< +fn __action118< >( input: &str, __0: (usize, Expression, usize), @@ -5005,13 +5183,13 @@ fn __action114< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action82( + __action84( input, __0, __1, @@ -5024,7 +5202,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action115< +fn __action119< >( input: &str, __0: (usize, TokenType, usize), @@ -5032,13 +5210,13 @@ fn __action115< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action83( + __action85( input, __0, __temp0, @@ -5047,7 +5225,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action116< +fn __action120< >( input: &str, __0: (usize, TokenType, usize), @@ -5055,13 +5233,13 @@ fn __action116< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action84( + __action86( input, __0, __temp0, @@ -5070,7 +5248,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action117< +fn __action121< >( input: &str, __0: (usize, TokenType, usize), @@ -5078,13 +5256,13 @@ fn __action117< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action85( + __action87( input, __0, __temp0, @@ -5093,7 +5271,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action118< +fn __action122< >( input: &str, __0: (usize, TokenType, usize), @@ -5101,13 +5279,13 @@ fn __action118< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action86( + __action88( input, __0, __temp0, @@ -5116,7 +5294,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action119< +fn __action123< >( input: &str, __0: (usize, TokenType, usize), @@ -5124,13 +5302,13 @@ fn __action119< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action87( + __action89( input, __0, __temp0, @@ -5139,7 +5317,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action120< +fn __action124< >( input: &str, __0: (usize, TokenType, usize), @@ -5147,13 +5325,13 @@ fn __action120< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action88( + __action90( input, __0, __temp0, @@ -5162,7 +5340,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action121< +fn __action125< >( input: &str, __0: (usize, Expression, usize), @@ -5173,13 +5351,13 @@ fn __action121< { let __start0 = __3.2; let __end0 = __3.2; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action89( + __action91( input, __0, __1, @@ -5191,7 +5369,63 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action122< +fn __action126< +>( + input: &str, + __0: (usize, TokenType, usize), + __1: (usize, Vec, usize), + __2: (usize, TokenType, usize), +) -> Expression +{ + let __start0 = __2.2; + let __end0 = __2.2; + let __temp0 = __action45( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action92( + input, + __0, + __1, + __2, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action127< +>( + input: &str, + __0: (usize, Expression, usize), + __1: (usize, TokenType, usize), + __2: (usize, Expression, usize), + __3: (usize, TokenType, usize), +) -> Expression +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action45( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action93( + input, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action128< >( input: &str, __0: (usize, TokenType, usize), @@ -5200,13 +5434,13 @@ fn __action122< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action43( + let __temp0 = __action45( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action90( + __action94( input, __0, __temp0, @@ -5216,7 +5450,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action123< +fn __action129< >( input: &str, __0: (usize, Expression, usize), @@ -5224,12 +5458,12 @@ fn __action123< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action48( + let __temp0 = __action50( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action59( input, __temp0, ) @@ -5237,7 +5471,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action124< +fn __action130< >( input: &str, __lookbehind: &usize, @@ -5246,13 +5480,13 @@ fn __action124< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action49( + let __temp0 = __action51( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action59( input, __temp0, ) @@ -5260,7 +5494,7 @@ fn __action124< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action125< +fn __action131< >( input: &str, __0: (usize, alloc::vec::Vec, usize), @@ -5269,12 +5503,12 @@ fn __action125< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action48( + let __temp0 = __action50( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action58( + __action60( input, __0, __temp0, @@ -5283,7 +5517,7 @@ fn __action125< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action126< +fn __action132< >( input: &str, __0: (usize, alloc::vec::Vec, usize), @@ -5291,13 +5525,13 @@ fn __action126< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action49( + let __temp0 = __action51( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action58( + __action60( input, __0, __temp0, From debefd5a48bfb82412bdd2da752745d400210d91 Mon Sep 17 00:00:00 2001 From: SyS Date: Tue, 31 Oct 2023 10:04:13 +0530 Subject: [PATCH 2/8] example usage of list --- examples/array.ms | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 examples/array.ms diff --git a/examples/array.ms b/examples/array.ms new file mode 100644 index 0000000..24932a2 --- /dev/null +++ b/examples/array.ms @@ -0,0 +1,7 @@ +x = [1,4,5,6,"malluscript"]; +x = x + "more data"; +i = 0; +i um 6 um onnallenkil avarthikuga { + ezhuthuga x[i] + " "; + i = i+1; +} \ No newline at end of file From 8556bdfeb420bf130ed030f1ba87aa9e7ca3ae5a Mon Sep 17 00:00:00 2001 From: SyS Date: Tue, 31 Oct 2023 18:21:20 +0530 Subject: [PATCH 3/8] frame address calculation should be done more precisely. --- src/executor/error.rs | 2 -- src/executor/mod.rs | 46 +++++++++++++++++++------------------------ src/executor/test.rs | 6 +++--- 3 files changed, 23 insertions(+), 31 deletions(-) diff --git a/src/executor/error.rs b/src/executor/error.rs index 27d5d8b..aa582dd 100644 --- a/src/executor/error.rs +++ b/src/executor/error.rs @@ -5,7 +5,6 @@ use std::process; pub enum RunTimeErrors { UndefinedSymbol(String), SymbolAlreadyDefined(String), - UnInitialzedData(String), InvalidAssignment, DivisionByZero, IncompatibleOperation, @@ -27,7 +26,6 @@ impl fmt::Display for RunTimeErrors { RunTimeErrors::SymbolAlreadyDefined(symbol) => { write!(f, "[Error]: Symbol {} already defined", symbol) } - RunTimeErrors::UnInitialzedData(data) => write!(f, "Uninitialised variable {}", data), RunTimeErrors::DivisionByZero => write!(f, "[Error]: Division by Zero"), RunTimeErrors::IncompatibleOperation => { write!(f, "[Error]: Incompatible operation between datatypes") diff --git a/src/executor/mod.rs b/src/executor/mod.rs index e8ca5fd..c8431dd 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -15,12 +15,14 @@ use crate::lexer::tokens::TokenType; pub type ScopeLevel = i64; +static GLOBAL_SCOPE: ScopeLevel = 0; + pub struct Executor { symbol_table: BTreeMap<(ScopeLevel, usize), DataTypes>, literal_table: HashMap, symbol_lookup_table: HashMap, function_table: HashMap, SourceUnit)>, - scope_level: ScopeLevel, + frame_level: ScopeLevel, return_storage: DataTypes, subroutine_exit_flag: bool, } @@ -35,7 +37,7 @@ impl Executor { literal_table, symbol_lookup_table, function_table: HashMap::new(), - scope_level: 0, + frame_level: GLOBAL_SCOPE, subroutine_exit_flag: false, return_storage: DataTypes::Integer(1), } @@ -97,10 +99,10 @@ impl Executor { Statement::Assignment((p, q), l, r) => match l { Expression::Symbol((_a, _b), TokenType::Symbol(address)) => { self.symbol_table - .entry((self.scope_level, *address)) + .entry((self.frame_level, *address)) .or_insert(DataTypes::Unknown); let data = self.eval_arithmetic_logic_expression(r)?; - self.symbol_table.insert((self.scope_level, *address), data); + self.symbol_table.insert((self.frame_level, *address), data); } Expression::ListSubScript((_a, _b), expr, index) => { let data = self.eval_arithmetic_logic_expression(r)?; @@ -111,11 +113,11 @@ impl Executor { }; self.symbol_table - .entry((self.scope_level, address)) + .entry((self.frame_level, address)) .or_insert(DataTypes::Unknown); let left = self .symbol_table - .get_mut(&(self.scope_level, address)) + .get_mut(&(self.frame_level, address)) .unwrap(); if let DataTypes::List(list) = left { @@ -216,20 +218,12 @@ impl Executor { _ => Err(((*a, *b), RunTimeErrors::InvalidExpression)), }, Expression::Symbol((a, b), TokenType::Symbol(address)) => { - let mut level = self.scope_level; - while level > -1 { - if !self.symbol_table.contains_key(&(level, *address)) { - level -= 1; - } else { - break; - } - } - if level == -1 { - return Err(( - (*a, *b), - RunTimeErrors::UndefinedSymbol(self.get_symbol_name(*address).unwrap()), - )); + let mut level = self.frame_level; + + if !self.symbol_table.contains_key(&(level, *address)) { + level = 0; } + match self.symbol_table.get(&(level, *address)) { Some(DataTypes::Integer(number)) => Ok(DataTypes::Integer(*number)), Some(DataTypes::Float(number)) => Ok(DataTypes::Float(*number)), @@ -237,7 +231,7 @@ impl Executor { Some(DataTypes::List(data)) => Ok(DataTypes::List(data.to_vec())), _ => Err(( (*a, *b), - RunTimeErrors::UnInitialzedData(self.get_symbol_name(*address).unwrap()), + RunTimeErrors::UndefinedSymbol(self.get_symbol_name(*address).unwrap()), )), } } @@ -289,20 +283,20 @@ impl Executor { if let Expression::Symbol(_, TokenType::Symbol(y)) = y { // allocation let data = self.eval_arithmetic_logic_expression(x)?.clone(); - self.symbol_table.insert((self.scope_level + 1, *y), data); + self.symbol_table.insert((self.frame_level + 1, *y), data); } else { return Err(((*p, *q), RunTimeErrors::InvalidFunctionDeclaration)); } } - self.scope_level += 1; + self.frame_level += 1; self.return_storage = DataTypes::Unknown; self.execute(&function.1)?; - let scope = self.scope_level; + let scope = self.frame_level; self.symbol_table - .retain(|(scope_level, _), _| *scope_level != scope); - self.scope_level -= 1; + .retain(|(frame_level, _), _| *frame_level != scope); + self.frame_level -= 1; } else { return Err(((*p, *q), RunTimeErrors::UndefinedSymbol(name))); } @@ -329,7 +323,7 @@ impl Executor { _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), }; - if let Some(data) = self.symbol_table.get_mut(&(self.scope_level, address)) { + if let Some(data) = self.symbol_table.get_mut(&(self.frame_level, address)) { if let DataTypes::List(list) = data { if index < 0 || index > (list.len() - 1) as i64 { return Err(( diff --git a/src/executor/test.rs b/src/executor/test.rs index 76b27bb..a721186 100644 --- a/src/executor/test.rs +++ b/src/executor/test.rs @@ -32,11 +32,11 @@ fn arithmetic_test() { "; let exec = get_executor(code).unwrap(); assert_eq!( - exec.symbol_table[&(exec.scope_level, exec.symbol_lookup_table["i"])], + exec.symbol_table[&(exec.frame_level, exec.symbol_lookup_table["i"])], DataTypes::Integer(162) ); assert_eq!( - exec.symbol_table[&(exec.scope_level, exec.symbol_lookup_table["j"])], + exec.symbol_table[&(exec.frame_level, exec.symbol_lookup_table["j"])], DataTypes::Integer(0) ); } @@ -55,7 +55,7 @@ fn malayalam_test() { "; let exec = get_executor(code).unwrap(); assert_eq!( - exec.symbol_table[&(exec.scope_level, exec.symbol_lookup_table["നമ്പർ"])], + exec.symbol_table[&(exec.frame_level, exec.symbol_lookup_table["നമ്പർ"])], DataTypes::Integer(10) ); } From 0f69b34e79e4317fef1d24584f3f5b60d0eb5202 Mon Sep 17 00:00:00 2001 From: SyS Date: Tue, 31 Oct 2023 20:02:39 +0530 Subject: [PATCH 4/8] pass by reference implemented --- src/executor/datatype.rs | 1 + src/executor/mod.rs | 55 +++++++++++++++++++++++++++++----------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/executor/datatype.rs b/src/executor/datatype.rs index 610a6b8..d1bee21 100644 --- a/src/executor/datatype.rs +++ b/src/executor/datatype.rs @@ -47,6 +47,7 @@ pub enum DataTypes { Bool(bool), Float(f64), List(Vec), + Ref((i64, usize)), Unknown, } diff --git a/src/executor/mod.rs b/src/executor/mod.rs index c8431dd..5130f2c 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -98,11 +98,17 @@ impl Executor { Statement::Assignment((p, q), l, r) => match l { Expression::Symbol((_a, _b), TokenType::Symbol(address)) => { - self.symbol_table - .entry((self.frame_level, *address)) - .or_insert(DataTypes::Unknown); + let mut frame_level = self.frame_level; + let mut data_address = *address; + + let left_type = self.symbol_table.get(&(self.frame_level, *address)); + if let Some(DataTypes::Ref((level, address))) = left_type { + frame_level = *level; + data_address = *address; + } + let data = self.eval_arithmetic_logic_expression(r)?; - self.symbol_table.insert((self.frame_level, *address), data); + self.symbol_table.insert((frame_level, data_address), data); } Expression::ListSubScript((_a, _b), expr, index) => { let data = self.eval_arithmetic_logic_expression(r)?; @@ -112,15 +118,17 @@ impl Executor { _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), }; - self.symbol_table - .entry((self.frame_level, address)) - .or_insert(DataTypes::Unknown); - let left = self - .symbol_table - .get_mut(&(self.frame_level, address)) - .unwrap(); + let mut frame_level = self.frame_level; + let mut data_address = address; + let left_type = self.symbol_table.get(&(self.frame_level, address)); + if let Some(DataTypes::Ref((level, address))) = left_type { + frame_level = *level; + data_address = *address; + } + + let left = self.symbol_table.get_mut(&(frame_level, data_address)); - if let DataTypes::List(list) = left { + if let Some(DataTypes::List(list)) = left { if index < 0 || index > (list.len() - 1) as i64 { return Err(( (*p, *q), @@ -229,6 +237,9 @@ impl Executor { Some(DataTypes::Float(number)) => Ok(DataTypes::Float(*number)), Some(DataTypes::String(data)) => Ok(DataTypes::String(data.to_string())), Some(DataTypes::List(data)) => Ok(DataTypes::List(data.to_vec())), + Some(DataTypes::Ref((level, address))) => { + Ok(self.symbol_table.get(&(*level, *address)).unwrap().clone()) + } _ => Err(( (*a, *b), RunTimeErrors::UndefinedSymbol(self.get_symbol_name(*address).unwrap()), @@ -283,7 +294,15 @@ impl Executor { if let Expression::Symbol(_, TokenType::Symbol(y)) = y { // allocation let data = self.eval_arithmetic_logic_expression(x)?.clone(); - self.symbol_table.insert((self.frame_level + 1, *y), data); + if let DataTypes::List(_) = data { + // lists will be passed by reference by default + self.symbol_table.insert( + (self.frame_level + 1, *y), + DataTypes::Ref((self.frame_level, *y)), + ); + } else { + self.symbol_table.insert((self.frame_level + 1, *y), data); + } } else { return Err(((*p, *q), RunTimeErrors::InvalidFunctionDeclaration)); } @@ -322,8 +341,14 @@ impl Executor { Ok(DataTypes::Integer(idx)) => idx, _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), }; - - if let Some(data) = self.symbol_table.get_mut(&(self.frame_level, address)) { + let mut frame_level = self.frame_level; + let mut data_address = address; + let left_type = self.symbol_table.get(&(self.frame_level, address)); + if let Some(DataTypes::Ref((level, address))) = left_type { + frame_level = *level; + data_address = *address; + } + if let Some(data) = self.symbol_table.get_mut(&(frame_level, data_address)) { if let DataTypes::List(list) = data { if index < 0 || index > (list.len() - 1) as i64 { return Err(( From a681d7b9c6fb7fbf76a8b17e848bb3732d9f81c7 Mon Sep 17 00:00:00 2001 From: SyS Date: Wed, 1 Nov 2023 11:35:06 +0530 Subject: [PATCH 5/8] print entire list with ease --- src/executor/datatype.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/executor/datatype.rs b/src/executor/datatype.rs index d1bee21..3b372d4 100644 --- a/src/executor/datatype.rs +++ b/src/executor/datatype.rs @@ -57,6 +57,23 @@ impl fmt::Display for DataTypes { DataTypes::String(s) => write!(f, "{}", literal_eval(s)), DataTypes::Integer(i) => write!(f, "{}", i), DataTypes::Float(n) => write!(f, "{}", n), + DataTypes::List(list) => { + let mut string = String::from("["); + let mut iter = list.iter().peekable(); + while let Some(x) = iter.next() { + if let DataTypes::String(_) = x { + string += &("\"".to_owned() + &x.to_string() + "\""); + } else { + string += &x.to_string(); + } + + if let Some(_) = iter.peek() { + string += ","; + } + } + string += "]"; + write!(f, "{}", string) + } _ => write!(f, ""), } } From ee30830c7a564a7a77517ae0078ccbb6d847dc51 Mon Sep 17 00:00:00 2001 From: SyS Date: Thu, 2 Nov 2023 10:31:32 +0530 Subject: [PATCH 6/8] support for multi dimensional subscripting --- src/executor/mod.rs | 77 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 11 deletions(-) diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 5130f2c..91d8ce0 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -112,12 +112,11 @@ impl Executor { } Expression::ListSubScript((_a, _b), expr, index) => { let data = self.eval_arithmetic_logic_expression(r)?; + let index = match self.eval_arithmetic_logic_expression(index) { + Ok(DataTypes::Integer(idx)) => idx, + _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), + }; if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = **expr { - let index = match self.eval_arithmetic_logic_expression(index) { - Ok(DataTypes::Integer(idx)) => idx, - _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), - }; - let mut frame_level = self.frame_level; let mut data_address = address; let left_type = self.symbol_table.get(&(self.frame_level, address)); @@ -140,6 +139,11 @@ impl Executor { } else { return Err(((*p, *q), RunTimeErrors::InvalidExpression)); } + } else if let Expression::ListSubScript((_a, _b), _, _) = **expr { + let mut indices = Vec::new(); + indices.push(index); + let reference = self.evaluate_list_subscript(&l, &mut indices)?; + *reference = data; } else { return Err(((*p, *q), RunTimeErrors::InvalidExpression)); } @@ -335,12 +339,12 @@ impl Executor { Ok(DataTypes::List(list)) } - Expression::ListSubScript((p, q), symbol, index) => { - if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = **symbol { - let index = match self.eval_arithmetic_logic_expression(index) { - Ok(DataTypes::Integer(idx)) => idx, - _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), - }; + Expression::ListSubScript((p, q), expr, index) => { + let index = match self.eval_arithmetic_logic_expression(index) { + Ok(DataTypes::Integer(idx)) => idx, + _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), + }; + if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = **expr { let mut frame_level = self.frame_level; let mut data_address = address; let left_type = self.symbol_table.get(&(self.frame_level, address)); @@ -365,10 +369,61 @@ impl Executor { let name = self.get_symbol_name(address).unwrap(); Err(((*p, *q), RunTimeErrors::UndefinedSymbol(name))) } + } else if let Expression::ListSubScript(_, _, _) = **expr { + let data = self.eval_arithmetic_logic_expression(&expr)?; + if let DataTypes::List(list) = data { + if index < 0 || index > (list.len() - 1) as i64 { + return Err(( + (*p, *q), + RunTimeErrors::IndexOutOfBounds(index, list.len() as i64), + )); + } + let value = &list[index as usize]; + Ok(value.clone()) + } else { + Err(((*p, *q), RunTimeErrors::InvalidExpression)) + } } else { Err(((*p, *q), RunTimeErrors::InvalidExpression)) } } } } + + pub fn evaluate_list_subscript( + &mut self, + expr: &Expression, + vec: &mut Vec, + ) -> Result<&mut DataTypes, ((usize, usize), error::RunTimeErrors)> { + if let Expression::ListSubScript((p, q), expr, index) = expr { + let index = match self.eval_arithmetic_logic_expression(&index) { + Ok(DataTypes::Integer(idx)) => idx, + _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), + }; + vec.push(index); + return self.evaluate_list_subscript(&expr, vec); + } else if let Expression::Symbol((a, b), TokenType::Symbol(address)) = expr { + let mut frame_level = self.frame_level; + let mut data_address = address; + let left_type = self.symbol_table.get(&(self.frame_level, *address)); + if let Some(DataTypes::Ref((level, address))) = left_type { + frame_level = *level; + data_address = address; + } + let mut data = self.symbol_table.get_mut(&(frame_level, *data_address)); + while let Some(index) = vec.pop() { + if let Some(DataTypes::List(list)) = data { + if index < 0 || index > (list.len() - 1) as i64 { + return Err(( + (*a, *b), + RunTimeErrors::IndexOutOfBounds(index, list.len() as i64), + )); + } + data = Some(&mut list[index as usize]); + } + } + return Ok(data.unwrap()); + } + return Err(((0, 0), RunTimeErrors::InvalidExpression)); + } } From fa366d137d6ffac6a17d8bc248542cb3a17387de Mon Sep 17 00:00:00 2001 From: SyS Date: Thu, 2 Nov 2023 10:34:43 +0530 Subject: [PATCH 7/8] few touchups and cleanups --- src/executor/datatype.rs | 2 +- src/executor/mod.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/executor/datatype.rs b/src/executor/datatype.rs index 3b372d4..cacc83f 100644 --- a/src/executor/datatype.rs +++ b/src/executor/datatype.rs @@ -67,7 +67,7 @@ impl fmt::Display for DataTypes { string += &x.to_string(); } - if let Some(_) = iter.peek() { + if iter.peek().is_some() { string += ","; } } diff --git a/src/executor/mod.rs b/src/executor/mod.rs index 91d8ce0..f4c554a 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -142,7 +142,7 @@ impl Executor { } else if let Expression::ListSubScript((_a, _b), _, _) = **expr { let mut indices = Vec::new(); indices.push(index); - let reference = self.evaluate_list_subscript(&l, &mut indices)?; + let reference = self.evaluate_list_subscript(l, &mut indices)?; *reference = data; } else { return Err(((*p, *q), RunTimeErrors::InvalidExpression)); @@ -370,7 +370,7 @@ impl Executor { Err(((*p, *q), RunTimeErrors::UndefinedSymbol(name))) } } else if let Expression::ListSubScript(_, _, _) = **expr { - let data = self.eval_arithmetic_logic_expression(&expr)?; + let data = self.eval_arithmetic_logic_expression(expr)?; if let DataTypes::List(list) = data { if index < 0 || index > (list.len() - 1) as i64 { return Err(( @@ -396,12 +396,12 @@ impl Executor { vec: &mut Vec, ) -> Result<&mut DataTypes, ((usize, usize), error::RunTimeErrors)> { if let Expression::ListSubScript((p, q), expr, index) = expr { - let index = match self.eval_arithmetic_logic_expression(&index) { + let index = match self.eval_arithmetic_logic_expression(index) { Ok(DataTypes::Integer(idx)) => idx, _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), }; vec.push(index); - return self.evaluate_list_subscript(&expr, vec); + return self.evaluate_list_subscript(expr, vec); } else if let Expression::Symbol((a, b), TokenType::Symbol(address)) = expr { let mut frame_level = self.frame_level; let mut data_address = address; @@ -424,6 +424,6 @@ impl Executor { } return Ok(data.unwrap()); } - return Err(((0, 0), RunTimeErrors::InvalidExpression)); + Err(((0, 0), RunTimeErrors::InvalidExpression)) } } From 7d3d62e15d47104d4a64d3f2bb205ed8f47e27e0 Mon Sep 17 00:00:00 2001 From: SyS Date: Mon, 6 Nov 2023 09:57:08 +0530 Subject: [PATCH 8/8] address of arguement should be passed in case of pass by reference not the reference. --- src/executor/mod.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/executor/mod.rs b/src/executor/mod.rs index f4c554a..6e398aa 100644 --- a/src/executor/mod.rs +++ b/src/executor/mod.rs @@ -298,11 +298,15 @@ impl Executor { if let Expression::Symbol(_, TokenType::Symbol(y)) = y { // allocation let data = self.eval_arithmetic_logic_expression(x)?.clone(); - if let DataTypes::List(_) = data { + if let ( + DataTypes::List(_), + Expression::Symbol(_, TokenType::Symbol(x)), + ) = (&data, x) + { // lists will be passed by reference by default self.symbol_table.insert( (self.frame_level + 1, *y), - DataTypes::Ref((self.frame_level, *y)), + DataTypes::Ref((self.frame_level, *x)), ); } else { self.symbol_table.insert((self.frame_level + 1, *y), data);