diff --git a/Cargo.lock b/Cargo.lock index 79c8034..68814a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -315,13 +315,12 @@ dependencies = [ [[package]] name = "malluscript" -version = "1.0.0" +version = "1.1.0" dependencies = [ "clap", "lalrpop", "lalrpop-util", "rustyline", - "serde", ] [[package]] @@ -512,12 +511,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "serde" -version = "1.0.156" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" - [[package]] name = "siphasher" version = "0.3.10" diff --git a/Cargo.toml b/Cargo.toml index fcaf922..af2f63d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,12 @@ [package] name = "malluscript" -version = "1.0.0" +version = "1.1.0" authors = ["SyS "] edition = "2018" build = "build.rs" -description = "Scripting language based on manglish and malayalam memes" +description = "An esoteric scripting language that lets to write computer programs in Malayalam" [dependencies] -serde = "1.0.117" lalrpop-util = "0.20.0" clap = "2.33" rustyline = "6.1" diff --git a/README.md b/README.md index 6e5ef64..98264b1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Mallu Script +# Malluscript

Malluscript
GitHub Actions status @@ -6,11 +6,16 @@ GitHub issues GitHub issues

-Malluscript + +

+Buy Me a Coffee at ko-fi.com +

+

+Malluscript

-Malluscript is an esoteric scripting language based on manglish and malayalam memes. The language uses trending Malayalam memetic words as keywords. The language is not strictly type-safe and uses only two datatypes strings and integers. Currently, malluscript is on the development phase and undergoing vigorous changes. Always check the release section for pre-built binaries for the interpreter. +Malluscript is an esoteric scripting language that allows one to write computer programs in Malayalam. The concept of Malluscript stems from the idea of promoting inclusivity and linguistic diversity within the world of coding. By enabling programmers to express their ideas and algorithms in Malayalam, Malluscript serves as a bridge between traditional programming languages and the rich linguistic heritage of the Malayalam-speaking community. Currently, Malluscript is on the development phase and undergoing vigorous changes. Always check the release section for pre-built binaries for the interpreter. **Note:** For support please join our [Discord](https://discord.gg/5CMMf4ckuk). @@ -26,7 +31,7 @@ The interpreter can be compiled as follows cd malluscript cargo build --release ``` -Note: You require rust compiler installed on your machine in order to compile the interpreter +Note: You require Rust compiler installed on your machine in order to compile the interpreter ## Executing malluscript programs Malluscript can be used in two ways @@ -93,7 +98,7 @@ Basic arithmetic operations can be done using `+`,`-`,`*`,`/`,`%` (modulo). Ever * `വാചകംവാങ്ങിക്കുക` ### Datatypes and Storage -Malluscript is not strictly type-safe.The language, currently, supports only integer,float and string literals as datatypes. +Malluscript is not strictly type-safe.The language supports integer,float and string literals as primary datatypes and it also support compound datatype called List. To assign it some value and declare a variable @@ -102,6 +107,19 @@ variable_name = 1; second_var = "ente string"; ``` +Lists in Malluscript are similar to compound types in other mainstream programming languages. A list can have different type of primary data in it. An example usage of List would be: + +``` +x = [1,4,5,6,"malluscript"]; +x = x + "more data"; +i = 0; +i um 6 um onnallenkil avarthikuga { + ezhuthuga x[i] + " "; + i = i+1; +} +``` +Using `+` operator along side a list data, will append the other operand into that list. List data can be accessed using subscript operators `[]`. Also unlike other datatypes when passed as an argument to a function, it will be *passed as reference* instead of *passed as value*. + ## Conditional Statements And Expressions The conditional expression has the following syntax @@ -223,6 +241,7 @@ Same in pure Malayalam would be More examples can be found in [examples](examples) ## Notes -The language as mentioned above is under the development phase and its structure can change overnight, suddenly. This language is not meant to disrespect anyone and wrote just for fun. +The language as mentioned above is under the development phase and its structure can change overnight, suddenly. Any kind of contribution is always welcome. If you have any ideas or improvements to provide for this project open a pull request or if you have any difficulties using this language open an issue :) + 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 diff --git a/examples/selectionsort.ms b/examples/selectionsort.ms new file mode 100644 index 0000000..b972de2 --- /dev/null +++ b/examples/selectionsort.ms @@ -0,0 +1,34 @@ +അടുക്കുക(അറ,വലിപ്പം) { + ക = 0; + ത = 0; + ക ഉം (വലിപ്പം - 1) ഉം തുല്യമല്ലെങ്കിൽ ആവർത്തിക്കുക { + ത = ക + 1; + ത ഉം വലിപ്പം ഉം തുല്യമല്ലെങ്കിൽ ആവർത്തിക്കുക { + അറ[ക] നെകാൾ അറ[ത] ചെറുതാണെങ്കിൽ { + താല്‍കാലികം = അറ[ക]; + അറ[ക] = അറ[ത]; + അറ[ത] = താല്‍കാലികം; + } + ത = ത + 1; + } + ക = ക + 1; + } +} + +എഴുതുക "വലിപ്പം പറയുക: "; +വലിപ്പം = അക്കംവാങ്ങിക്കുക; + +അണി = []; + +ക = 0; + +എഴുതുക "ഘടകം നിക്ഷേപിക്കുക:\n"; +ക ഉം വലിപ്പം ഉം തുല്യമല്ലെങ്കിൽ ആവർത്തിക്കുക { + അണി = അണി + അക്കംവാങ്ങിക്കുക; + ക = ക + 1; +} + +എഴുതുക അണി; +എഴുതുക "\nഅടുക്കുക അറ:\n"; +അടുക്കുക<അണി,വലിപ്പം>; +എഴുതുക അണി; \ No newline at end of file diff --git a/images/poster-transparent.png b/images/poster-transparent.png index 620a984..fc84204 100644 Binary files a/images/poster-transparent.png and b/images/poster-transparent.png differ 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..cacc83f 100644 --- a/src/executor/datatype.rs +++ b/src/executor/datatype.rs @@ -46,6 +46,8 @@ pub enum DataTypes { Integer(i64), Bool(bool), Float(f64), + List(Vec), + Ref((i64, usize)), Unknown, } @@ -55,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 iter.peek().is_some() { + string += ","; + } + } + string += "]"; + write!(f, "{}", string) + } _ => write!(f, ""), } } @@ -75,6 +94,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..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, @@ -15,6 +14,7 @@ pub enum RunTimeErrors { InvalidFunctionDeclaration, ArgumentCountMismatch, IntegerOverFlow, + IndexOutOfBounds(i64, i64), } impl fmt::Display for RunTimeErrors { @@ -26,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") @@ -49,6 +48,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..931156d 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), } @@ -89,22 +91,48 @@ impl Executor { } } - Statement::Write((_p, _q), expr) => { - print!("{}", self.eval_arithmetic_logic_expression(expr)?); + Statement::Write(offset, expr) => { + let mut data = self.eval_arithmetic_logic_expression(expr)?; + if let DataTypes::Ref(address) = data { + data = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + print!("{}", data); let _ = stdout().flush(); } - Statement::Assignment((p, q), l, r) => { - if let Expression::Symbol((_a, _b), TokenType::Symbol(address)) = l { - self.symbol_table - .entry((self.scope_level, *address)) - .or_insert(DataTypes::Unknown); + Statement::Assignment((p, q), l, r) => match l { + Expression::Symbol((_a, _b), TokenType::Symbol(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; + } + let data = self.eval_arithmetic_logic_expression(r)?; - self.symbol_table.insert((self.scope_level, *address), data); - } else { + self.symbol_table.insert((frame_level, data_address), data); + } + 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)), + }; + let mut indices = Vec::new(); + indices.push(index); + let reference = self.evaluate_list_subscript(expr, &mut indices)?; + *reference = data; + } + _ => { return Err(((*p, *q), RunTimeErrors::InvalidAssignment)); } - } + }, Statement::EmptyExpression((_p, _q), expr) => { self.eval_arithmetic_logic_expression(expr)?; } @@ -135,44 +163,198 @@ impl Executor { expr: &Expression, ) -> Result { match expr { - Expression::Add((_a, _b), l, r) => Ok(self.eval_arithmetic_logic_expression(l)? - + self.eval_arithmetic_logic_expression(r)?), + Expression::Add(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(l + r) + } + + Expression::Multiply(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(l * r) + } - Expression::Multiply((_a, _b), l, r) => Ok(self.eval_arithmetic_logic_expression(l)? - * self.eval_arithmetic_logic_expression(r)?), + Expression::Subtract(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(l - r) + } - Expression::Subtract((_a, _b), l, r) => Ok(self.eval_arithmetic_logic_expression(l)? - - self.eval_arithmetic_logic_expression(r)?), + Expression::Divide(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(l / r) + } - Expression::Divide((_a, _b), l, r) => Ok(self.eval_arithmetic_logic_expression(l)? - / self.eval_arithmetic_logic_expression(r)?), + Expression::Modulo(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(l % r) + } - Expression::Modulo((_a, _b), l, r) => Ok(self.eval_arithmetic_logic_expression(l)? - % self.eval_arithmetic_logic_expression(r)?), + Expression::UnaryMinus(offset, r) => { + let mut r = self.eval_arithmetic_logic_expression(r)?; - Expression::UnaryMinus((_a, _b), r) => { - Ok(DataTypes::Integer(-1) * self.eval_arithmetic_logic_expression(r)?) + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(DataTypes::Integer(-1) * r) } - Expression::Equals((_a, _b), l, r) => Ok(DataTypes::Bool( - self.eval_arithmetic_logic_expression(l)? - == self.eval_arithmetic_logic_expression(r)?, - )), + Expression::Equals(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(DataTypes::Bool(l == r)) + } - Expression::NotEquals((_a, _b), l, r) => Ok(DataTypes::Bool( - self.eval_arithmetic_logic_expression(l)? - != self.eval_arithmetic_logic_expression(r)?, - )), + Expression::NotEquals(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(DataTypes::Bool(l != r)) + } - Expression::GreaterThan((_a, _b), l, r) => Ok(DataTypes::Bool( - self.eval_arithmetic_logic_expression(l)? - > self.eval_arithmetic_logic_expression(r)?, - )), + Expression::GreaterThan(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(DataTypes::Bool(l > r)) + } - Expression::LessThan((_a, _b), l, r) => Ok(DataTypes::Bool( - self.eval_arithmetic_logic_expression(l)? - < self.eval_arithmetic_logic_expression(r)?, - )), + Expression::LessThan(offset, l, r) => { + let mut l = self.eval_arithmetic_logic_expression(l)?; + let mut r = self.eval_arithmetic_logic_expression(r)?; + if let DataTypes::Ref(address) = l { + l = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + if let DataTypes::Ref(address) = r { + r = self + .symbol_table + .get(&address) + .ok_or((*offset, RunTimeErrors::InvalidExpression))? + .clone(); + } + Ok(DataTypes::Bool(l < r)) + } Expression::Integer((a, b), l) => match l { TokenType::Integer(number) => Ok(DataTypes::Integer(*number)), @@ -183,27 +365,23 @@ 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)), 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(DataTypes::Ref((*level, *address))) + } _ => Err(( (*a, *b), - RunTimeErrors::UnInitialzedData(self.get_symbol_name(*address).unwrap()), + RunTimeErrors::UndefinedSymbol(self.get_symbol_name(*address).unwrap()), )), } } @@ -255,20 +433,32 @@ 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); + 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, *x)), + ); + } else { + 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))); } @@ -278,6 +468,65 @@ 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), expr, index) => { + let index = match self.eval_arithmetic_logic_expression(index) { + Ok(DataTypes::Integer(idx)) => idx, + _ => return Err(((*p, *q), RunTimeErrors::IncompatibleOperation)), + }; + let mut indices = Vec::new(); + indices.push(index); + let reference = self.evaluate_list_subscript(expr, &mut indices)?; + Ok(reference.clone()) + } + } + } + + 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]); + } else { + return Err(((*a, *b), RunTimeErrors::InvalidExpression)); + } + } + return Ok(data.unwrap()); } + Err(((0, 0), RunTimeErrors::InvalidExpression)) } } 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) ); } diff --git a/src/lexer/keywords.rs b/src/lexer/keywords.rs index 14075e3..c77e7dd 100644 --- a/src/lexer/keywords.rs +++ b/src/lexer/keywords.rs @@ -27,13 +27,13 @@ impl Keywords { ["adhallengil","adhallenkil", "അതല്ലെങ്കിൽ"] => TokenType::Else, ["aavarthikuga","avarthikuga","aavarthikuka","avarthikuka","ആവർത്തിക്കുക"] => TokenType::Loop, ["veluthan","വലുതാണ്"] => TokenType::GreaterThan, - ["veluthanenkil","വലുതാണെങ്കിൽ"] => TokenType::IfGreaterThan, + ["veluthanenkil","veluthanengil","വലുതാണെങ്കിൽ"] => TokenType::IfGreaterThan, ["thullyamalla","onnalla", "തുല്യമല്ല","ഒന്നല്ല"] => TokenType::NotEqual, - ["thullyamallenkil","onnallenkil", "തുല്യമല്ലെങ്കിൽ","ഒന്നല്ലെങ്കിൽ"] => TokenType::IfNotEqual, + ["thullyamallenkil","thullyamallengil","onnallenkil","onnallengil","തുല്യമല്ലെങ്കിൽ","ഒന്നല്ലെങ്കിൽ"] => TokenType::IfNotEqual, ["cheruthan", "ചെറുതാണ്", ] => TokenType::LessThan, - ["cheruthanenkil", "ചെറുതാണെങ്കിൽ", ] => TokenType::IfLessThan, - ["thullyaman","onnan", "തുല്യമാണ്","ഒന്നാണ്"] => TokenType::EqualTo, - ["thullyamanenkil","onnanenkil", "തുല്യമാണെങ്കിൽ","ഒന്നാണെങ്കിൽ"] => TokenType::IfEqualTo, + ["cheruthanenkil","cheruthanengil", "ചെറുതാണെങ്കിൽ", ] => TokenType::IfLessThan, + ["thullyaman","onnan","orupole","തുല്യമാണ്","ഒന്നാണ്","ഒരുപോലെ"] => TokenType::EqualTo, + ["thullyamanenkil","thullyamanengil","onnanenkil","onnanengil", "orupoleyanenkil","orupoleyanengil","തുല്യമാണെങ്കിൽ","ഒന്നാണെങ്കിൽ","ഒരുപോലെയാണെങ്കിൽ"] => TokenType::IfEqualTo, ["um", "ഉം"] => TokenType::Um, ["ne_kal", "നെകാൾ"] => TokenType::Nekal, ["kodukuga","kodukuka","madakiayakuga","madakiayakuka","കൊടുക്കുക","മടക്കിഅയയ്ക്കുക"] => TokenType::Return 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,