diff --git a/crates/lsp/Cargo.toml b/crates/lsp/Cargo.toml index ab278c1..1e410f8 100644 --- a/crates/lsp/Cargo.toml +++ b/crates/lsp/Cargo.toml @@ -1,38 +1,38 @@ -[package] -name = "ccls" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] - -env_logger = "0.9.0" -serde_json = "1.0.78" -serde = { version = "1.0", features = ["derive"] } -log = "0.4.18" - -lsp-server = "0.7.6" - -rowan = "0.15.15" - -lsp-types = {version = "0.94.1", features = ["proposed"]} -parser.workspace = true -vfs.workspace = true -syntax.workspace = true - -anyhow = "1.0.79" -dashmap = "5.5.3" -path-absolutize = "3.1.1" - -[profile] -dev.debug = 2 - -[dev-dependencies] -# for snapshot testing, yaml format -insta = { version = "1.41.1", features = ["yaml"] } - -[profile.dev.package] -# compile slightly slower once, but use less memory, have faster diffs -insta.opt-level = 3 -similar.opt-level = 3 +[package] +name = "ccls" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +env_logger = "0.9.0" +serde_json = "1.0.78" +serde = { version = "1.0", features = ["derive"] } +log = "0.4.18" + +lsp-server = "0.7.6" + +rowan = "0.15.15" + +lsp-types = {version = "0.94.1", features = ["proposed"]} +parser.workspace = true +vfs.workspace = true +syntax.workspace = true + +anyhow = "1.0.79" +dashmap = "5.5.3" +path-absolutize = "3.1.1" + +[profile] +dev.debug = 2 + +[dev-dependencies] +# for snapshot testing, yaml format +insta = { version = "1.41.1", features = ["yaml"] } + +[profile.dev.package] +# compile slightly slower once, but use less memory, have faster diffs +insta.opt-level = 3 +similar.opt-level = 3 diff --git a/crates/lsp/src/global_state.rs b/crates/lsp/src/global_state.rs index c8f6bf4..84a0ddf 100644 --- a/crates/lsp/src/global_state.rs +++ b/crates/lsp/src/global_state.rs @@ -44,9 +44,15 @@ impl From for TextDocument { } } +/// state of all (circom) source file pub struct GlobalState { + /// file id - ast from that file content pub ast_map: DashMap, + + /// file id - file content (+ end lines) pub file_map: DashMap, + + /// file id - database (template in4, function in4...) pub db: SemanticDB, } @@ -71,6 +77,7 @@ impl GlobalState { ast: &AstCircomProgram, token: &SyntaxToken, ) -> Vec { + // look up token in current file let semantic_data = self.db.semantic.get(&root.file_id).unwrap(); let mut result = lookup_definition(root, ast, semantic_data, token); @@ -78,6 +85,9 @@ impl GlobalState { return result; } + // if can not find that token in current file, + // and if token in a component call / declaration + // continue looking up in libs let p = root.get_path(); if lookup_node_wrap_token(TokenKind::ComponentDecl, token).is_some() @@ -98,17 +108,26 @@ impl GlobalState { } } } + result } pub fn goto_definition_handler(&self, id: RequestId, params: GotoDefinitionParams) -> Response { + // path to the element we want to get definition + // TODO eg: file/line/start column..end column let uri = params.text_document_position_params.text_document.uri; + // abtract syntax tree for the element from that uri + // TODO eg: let ast = self.ast_map.get(&uri.to_string()).unwrap(); + // the file contains the element from that uri + // TODO eg: let file = self.file_map.get(&uri.to_string()).unwrap(); let mut locations = Vec::new(); + // extract token from ast at position (file, params position) + // TODO eg: if let Some(token) = lookup_token_at_postion(&file, &ast, params.text_document_position_params.position) { @@ -126,6 +145,11 @@ impl GlobalState { } } + /// update a file of (circom) source code + /// parse new code --> syntax tree + /// remove old data of that file in semantic database + /// add new data (circom_program_semantic) + related libs into database + /// update corresponding file-map and ast-map in global-state pub fn handle_update(&mut self, text_document: &TextDocument) -> Result<()> { let text = &text_document.text; let url = &text_document.uri.to_string(); diff --git a/crates/lsp/src/handler/goto_definition.rs b/crates/lsp/src/handler/goto_definition.rs index feb8302..5a54caf 100644 --- a/crates/lsp/src/handler/goto_definition.rs +++ b/crates/lsp/src/handler/goto_definition.rs @@ -16,6 +16,7 @@ use syntax::syntax_node::SyntaxToken; use crate::database::{FileDB, SemanticData, TokenId}; +// find the first ancestor with given kind of a syntax token pub fn lookup_node_wrap_token(ast_type: TokenKind, token: &SyntaxToken) -> Option { let mut p = token.parent(); while let Some(t) = p { @@ -27,6 +28,7 @@ pub fn lookup_node_wrap_token(ast_type: TokenKind, token: &SyntaxToken) -> Optio None } +// return an Identifier/CircomString token at a position pub fn lookup_token_at_postion( file: &FileDB, ast: &AstCircomProgram, @@ -47,6 +49,7 @@ pub fn lookup_token_at_postion( }) } +// find all template name (in component declaration) which are used inside a template pub fn lookup_component(template: &AstTemplateDef, text: SyntaxText) -> Option { if let Some(statements) = template.statements() { for component in statements.find_children::() { @@ -60,6 +63,8 @@ pub fn lookup_component(template: &AstTemplateDef, text: SyntaxText) -> Option Vec { if let Some(include_lib) = lookup_node_wrap_token(TokenKind::IncludeKw, token) { if let Some(ast_include) = AstInclude::cast(include_lib) { @@ -86,6 +91,7 @@ pub fn lookup_definition( token: &SyntaxToken, ) -> Vec { let template_list = ast.template_list(); + // TODO: extract function list let mut res = Vec::new(); @@ -93,15 +99,19 @@ pub fn lookup_definition( return jump_to_lib(file, token); } + // signal from other template + // eg: in1, in2 from component call mul(in1, in2) let mut signal_outside = false; if let Some(component_call) = lookup_node_wrap_token(TokenKind::ComponentCall, token) { // find template called. if let Some(ast_component_call) = AstComponentCall::cast(component_call) { if let Some(signal) = ast_component_call.signal() { + // if target token is the parameter of a component call + // TODO: go to params in template!!! (failed) if signal.syntax().text() == token.text() { signal_outside = true; - // lookup template of componenet + // lookup template of component if let Some(current_template) = lookup_node_wrap_token(TokenKind::TemplateDef, token) { @@ -131,6 +141,8 @@ pub fn lookup_definition( } if !signal_outside { + // look up token in template information + // (template name, signal/variable/component in template) for template in template_list { let template_name = template.name().unwrap(); if template_name.name().unwrap().syntax().text() == token.text() { @@ -160,6 +172,9 @@ pub fn lookup_definition( res.extend(component_decl); } } + + // TODO: look up token in function information + // (function name, signal/variable/component in function) } res.into_iter() @@ -195,7 +210,6 @@ mod tests { fn goto_decl_test() { let file_path = "/src/test_files/handler/templates.circom"; let source = get_source_from_path(file_path); - let file = FileDB::create(&source, Url::from_file_path(Path::new("/tmp")).unwrap()); let syntax_node = SyntaxTreeBuilder::syntax_tree(&source); diff --git a/crates/lsp/src/handler/snapshots/ccls__handler__goto_definition__tests__test_lookup_node_wrap_token.snap b/crates/lsp/src/handler/snapshots/ccls__handler__goto_definition__tests__test_lookup_node_wrap_token.snap index 22acca3..7763cc7 100644 --- a/crates/lsp/src/handler/snapshots/ccls__handler__goto_definition__tests__test_lookup_node_wrap_token.snap +++ b/crates/lsp/src/handler/snapshots/ccls__handler__goto_definition__tests__test_lookup_node_wrap_token.snap @@ -1,13 +1,13 @@ ---- -source: crates/lsp/src/handler/goto_definition.rs -expression: string_syntax_node ---- -template X() { - signal x[100]; - signal input x expect Semicolon but got Assign= expect Semicolon but got Number10; - component x = Multiplier2(); - component y = X(); - component y = Multiplier2(); - component z = Multiplier2(); - - } +--- +source: crates/lsp/src/handler/goto_definition.rs +expression: string_syntax_node +--- +template X() { + signal x[100]; + signal input x expect Semicolon but got Assign= expect Semicolon but got Number10; + component x = Multiplier2(); + component y = X(); + component y = Multiplier2(); + component z = Multiplier2(); + + } diff --git a/crates/lsp/src/test_files/handler/templates.circom b/crates/lsp/src/test_files/handler/templates.circom index f47a902..1d0f67a 100644 --- a/crates/lsp/src/test_files/handler/templates.circom +++ b/crates/lsp/src/test_files/handler/templates.circom @@ -1,36 +1,36 @@ -pragma circom 2.0.0; - - template X() { - signal x[100]; - signal input x = 10; - component x = Multiplier2(); - component y = X(); - component y = Multiplier2(); - component z = Multiplier2(); - - } -template M() { - component h = X(); - component k = Multiplier2(); - test - } -template Multiplier2 () { - template m = M(); - // hello world - signal input a; - signal input b; - signal output c; - component y = X(); - - mintlkrekerjke; - component e = Y(); - component z = Y(); - component h = Y(); - signal output d; - c <== a * b; - } -template Y() { - component y = X(); - component a = X(); - +pragma circom 2.0.0; + + template X() { + signal x[100]; + signal input x = 10; + component x = Multiplier2(); + component y = X(); + component y = Multiplier2(); + component z = Multiplier2(); + + } +template M() { + component h = X(); + component k = Multiplier2(); + test + } +template Multiplier2 () { + template m = M(); + // hello world + signal input a; + signal input b; + signal output c; + component y = X(); + + mintlkrekerjke; + component e = Y(); + component z = Y(); + component h = Y(); + signal output d; + c <== a * b; + } +template Y() { + component y = X(); + component a = X(); + } \ No newline at end of file diff --git a/crates/parser/src/grammar.rs b/crates/parser/src/grammar.rs index 3b759dc..5de71db 100644 --- a/crates/parser/src/grammar.rs +++ b/crates/parser/src/grammar.rs @@ -6,7 +6,7 @@ mod declaration; mod expression; mod function; mod include; -mod list_identity; +mod list; mod main_component; mod pragma; mod statement; diff --git a/crates/parser/src/grammar/block.rs b/crates/parser/src/grammar/block.rs index 8932bf0..5e3d396 100644 --- a/crates/parser/src/grammar/block.rs +++ b/crates/parser/src/grammar/block.rs @@ -41,7 +41,6 @@ pub fn block(p: &mut Parser) { p.close(stmt_marker, StatementList); p.expect(RCurly); - p.close(m, Block); p.dec_rcurly(); diff --git a/crates/parser/src/grammar/declaration.rs b/crates/parser/src/grammar/declaration.rs index f9f809a..5023b8b 100644 --- a/crates/parser/src/grammar/declaration.rs +++ b/crates/parser/src/grammar/declaration.rs @@ -1,200 +1,212 @@ -use super::{ - expression::{expression, tuple, tuple_init}, - *, -}; - -// [N][M-1] -fn array(p: &mut Parser) -> bool { - let is_array = p.at(LBracket); - - while p.at(LBracket) { - p.expect(LBracket); - expression(p); - p.expect(RBracket); - } - - is_array -} - -/* -"signal" --> None -"signal input" --> Some(true) -"signal output" --> Some(false) -*/ -fn signal_header(p: &mut Parser) -> Option { - let m = p.open(); - p.expect(SignalKw); - - let res = if p.at(InputKw) { - Some(true) - } else if p.at(OutputKw) { - Some(false) - } else { - None - }; - - if res.is_some() { - p.advance(); - } - - // signal tags - // {tag1, tag2, tag2} - // TODO: support list of tags - if p.at(LCurly) { - p.expect(Identifier); - p.expect(RCurly); - } - - p.close(m, SignalHeader); - res -} - -pub(crate) fn var_init(p: &mut Parser) { - let var_identifier_open_marker = p.open(); - - // name of variable - p.expect(Identifier); - // eg: [N - 1][M] - array(p); - - p.close(var_identifier_open_marker, VarIdentifier); - - // assign for variable - // eg: = 10 - if p.at_var_assign() { - p.advance(); - expression(p); - } -} - -// eg: in[N - 1] <== c.in; -pub(crate) fn signal_init(p: &mut Parser, assign_able: bool) { - let signal_identifier_open_marker = p.open(); - // name of signal - p.expect(Identifier); - // eg: [N][M-1] - array(p); - p.close(signal_identifier_open_marker, SignalIdentifier); - - // assign for intermediate and outputs signals - // eg: <== Multiplier2().out - if assign_able && p.at_inline_assign_signal() { - p.advance(); - expression(p); - } -} - -/** - * Declaration := "var" (SimpleSymbol, ..., SimpleSymbol) TupleInitialization | - * "var" iden1 = init1, iden2 = init2, iden3 - */ -pub(super) fn var_declaration(p: &mut Parser) { - let m = p.open(); - p.expect(VarKw); - - // tuple of variables - // eg: var (in1, in2, in3) = (1, 2, 3); - if p.at(LParen) { - tuple(p); - if p.at_var_assign() { - tuple_init(p); - } - } else { - // list of variables - // var in1[N], in2 = 5; - var_init(p); - while p.at(Comma) && !p.eof() { - p.skip(); - var_init(p); - } - } - - p.close(m, VarDecl); -} - -/* -* signal are immutable (can not modify after init value) -* can not initialize value for input signal -* since circom 2.0.4, it is also allowed to initialize -intermediate and outputs signals right after their declaration -*/ -pub(super) fn signal_declaration(p: &mut Parser) { - // TODO: can we remove that? - if !p.at(SignalKw) { - p.advance_with_error("Signal error"); - return; - } - - let m = p.open(); - let io_signal = signal_header(p); - let assign_able = io_signal != Some(true); - - // tuple of signal - // eg: signal (in1, in2, in3) <== tuple_value; - if p.at(LParen) { - tuple(p); - // can not assign for input signal - if assign_able && p.at_inline_assign_signal() { - tuple_init(p); - } - } else { - // list of signals - // signal in1[N], in2 <== signal_value; - signal_init(p, assign_able); - while p.at(Comma) && !p.eof() { - p.skip(); - signal_init(p, assign_able); - } - } - - let close_kind = match io_signal { - Some(true) => InputSignalDecl, - Some(false) => OutputSignalDecl, - None => SignalDecl, - }; - - p.close(m, close_kind); -} - -/* -* initialization in the definition of arrays of components is not allowed -*/ -pub(super) fn component_declaration(p: &mut Parser) { - let m = p.open(); - p.expect(ComponentKw); - - let m_c = p.open(); - p.expect(Identifier); - - // support array component - // eg: comp[N - 1][10] - let is_array = array(p); - p.close(m_c, ComponentIdentifier); - - // do not assign for array components - if !is_array && p.at(Assign) { - p.expect(Assign); - - // TODO: support `parallel` tag - // eg: component comp = parallel NameTemplate(...){...} - - // template name - let m_c = p.open(); - p.expect(Identifier); - p.close(m_c, TemplateName); - - // template params - tuple(p); - } - - p.close(m, ComponentDecl); -} - -pub(super) fn declaration(p: &mut Parser) { - match p.current() { - SignalKw => signal_declaration(p), - VarKw => var_declaration(p), - ComponentKw => component_declaration(p), - _ => unreachable!(), - } -} +use super::{ + expression::expression, + list::{tuple_expression, tuple_identifier}, + *, +}; +use crate::parser::Parser; + +// [N][M-1] +fn array(p: &mut Parser) -> bool { + let is_array = p.at(LBracket); + + while p.at(LBracket) { + p.expect(LBracket); + expression(p); + p.expect(RBracket); + } + + is_array +} + +/* +* eg: a, a[N], a[N][M - 1],... +*/ +pub(crate) fn complex_identifier(p: &mut Parser) { + let open_marker = p.open(); + + // name + p.expect(Identifier); + + // eg: [N - 1][M] + array(p); + + p.close(open_marker, ComplexIdentifier); +} + +/* +"signal" --> None +"signal input" --> Some(true) +"signal output" --> Some(false) +*/ +fn signal_header(p: &mut Parser) -> Option { + let m = p.open(); + p.expect(SignalKw); + + let result = match p.current() { + InputKw => Some(true), + OutputKw => Some(false), + _ => None, + }; + + if result.is_some() { + p.advance(); + } + + // signal tags + // {tag1, tag2, tag2} + // TODO: support list of tags + if p.at(LCurly) { + p.expect(Identifier); + p.expect(RCurly); + } + + p.close(m, SignalHeader); + result +} + +/* +var_init does not include `var` keyword +eg: tmp = 10; +*/ +pub(crate) fn var_init(p: &mut Parser) { + // var identifier + // eg: a[N] + complex_identifier(p); + + // assign for variable + // eg: = 10 + if p.at_var_assign() { + p.advance(); + expression(p); + } +} + +// eg: in[N - 1] <== c.in; +pub(crate) fn signal_init(p: &mut Parser, assign_able: bool) { + // signal identifier + // eg: in[N] + complex_identifier(p); + + // assign for intermediate and outputs signals + // eg: <== Multiplier2().out + if assign_able && p.at_inline_assign_signal() { + p.advance(); + expression(p); + } +} + +/** + * Declaration := "var" (SimpleSymbol, ..., SimpleSymbol) TupleInitialization | + * "var" iden1 = init1, iden2 = init2, iden3 + */ +pub(super) fn var_declaration(p: &mut Parser) { + let m = p.open(); + p.expect(VarKw); + + // tuple of variables + // eg: var (in1, in2, in3) = (1, 2, 3); + if p.at(LParen) { + tuple_identifier(p); + if p.at_var_assign() { + p.advance(); + expression(p); + } + } else { + // list of variables + // var in1[N], in2 = 5; + var_init(p); + while p.at(Comma) && !p.eof() { + p.skip(); + var_init(p); + } + } + + p.close(m, VarDecl); +} + +/* +* signal are immutable (can not modify after init value) +* can not initialize value for input signal +* since circom 2.0.4, it is also allowed to initialize +intermediate and outputs signals right after their declaration +*/ +pub(super) fn signal_declaration(p: &mut Parser) { + // TODO: can we remove that? + if !p.at(SignalKw) { + p.advance_with_error("Signal error"); + return; + } + + let m = p.open(); + let io_signal = signal_header(p); + let assign_able = io_signal != Some(true); + + // tuple of signal + // eg: signal (in1, in2, in3) <== tuple_value; + if p.at(LParen) { + tuple_identifier(p); + // can not assign for input signal + if assign_able && p.at_inline_assign_signal() { + p.advance(); + expression(p); + } + } else { + // list of signals + // signal in1[N], in2 <== signal_value; + signal_init(p, assign_able); + while p.at(Comma) && !p.eof() { + p.skip(); + signal_init(p, assign_able); + } + } + + let close_kind = match io_signal { + Some(true) => InputSignalDecl, + Some(false) => OutputSignalDecl, + None => SignalDecl, + }; + + p.close(m, close_kind); +} + +/* +* initialization in the definition of arrays of components is not allowed +*/ +pub(super) fn component_declaration(p: &mut Parser) { + let m = p.open(); + p.expect(ComponentKw); + + // component identifier + // eg: comp[N - 1][10] + complex_identifier(p); + + // do not assign for array components + // but we will not catch this error + if p.at(Assign) { + p.expect(Assign); + + // TODO: support `parallel` tag + // eg: component comp = parallel NameTemplate(...){...} + + // template name + let m_c = p.open(); + p.expect(Identifier); + p.close(m_c, TemplateName); + + // template params + let parameter_marker = p.open(); + tuple_expression(p); + p.close(parameter_marker, Call); + } + + p.close(m, ComponentDecl); +} + +pub(super) fn declaration(p: &mut Parser) { + match p.current() { + SignalKw => signal_declaration(p), + VarKw => var_declaration(p), + ComponentKw => component_declaration(p), + _ => unreachable!(), + } +} diff --git a/crates/parser/src/grammar/expression.rs b/crates/parser/src/grammar/expression.rs index c53c09c..8b069a5 100644 --- a/crates/parser/src/grammar/expression.rs +++ b/crates/parser/src/grammar/expression.rs @@ -1,175 +1,182 @@ +use list::tuple_expression; + use crate::parser::Marker; use super::*; pub(super) fn expression(p: &mut Parser) { - let m = p.open(); + let open_marker = p.open(); circom_expression(p); - p.close(m, Expression); + p.close(open_marker, Expression); } /** - * grammar: "(param1, param2,..., paramn)" - * can be an empty () + * TODO: why parse a stament inside expression module??? + * manage 2 cases: normal expression (a++, a-b,...), tenary_conditional_statement (a ? b : c) + * circom_expression = expr ? expr: expr | + * expr */ -pub(super) fn function_params(p: &mut Parser) { - let m = p.open(); - p.expect(LParen); - - while !p.at(RParen) && !p.eof() { - expression(p); - if p.at(Comma) { - p.expect(Comma) - } else { - break; +fn circom_expression(p: &mut Parser) { + if let Some(lhs) = expression_rec(p, 0) { + let current_kind = p.current(); + + if matches!(current_kind, MarkQuestion) { + tenary_conditional_statement(p, lhs); } } - - p.expect(RParen); - // TODO: what kind of it? - p.close(m, Tuple); } /** - * grammar: "(Symbol_1, Symbol_2,..., Symbol_n)" - * can be an empty tuple (for function cal: Mul()) - */ -pub(super) fn tuple(p: &mut Parser) { - let m = p.open(); - p.expect(LParen); - - // iden1, iden2, iden3 - list_identity::parse(p); - - p.expect(RParen); - p.close(m, Tuple); -} - -/** - * grammar: - * "= | <== | <--" expression - */ -pub(super) fn tuple_init(p: &mut Parser) { - let m = p.open(); - p.expect_any(&[Assign, RAssignSignal, RAssignConstraintSignal]); - expression(p); - p.close(m, TupleInit); -} - -fn expression_atom(p: &mut Parser) -> Option { - let m_close: Marker; - match p.current() { - Number | Identifier => { - let m = p.open(); - p.advance(); - m_close = p.close(m, ExpressionAtom); - Some(m_close) - } - LParen => { - let m = p.open(); - p.expect(LParen); - expression_rec(p, 0); - p.expect(RParen); - m_close = p.close(m, Tuple); - Some(m_close) - } - _ => { - p.advance_with_error("Invalid Token"); - None - } - } + * grammar: ? : +* is also an expression, +* whose open and close events are already in the Parser event list +* lhs is that open event +*/ +pub fn tenary_conditional_statement(p: &mut Parser, lhs: Marker) { + // + let open_marker = p.open_before(lhs); + p.close(open_marker, Condition); + + // ? + p.expect(MarkQuestion); + + // ? + let first_expression = p.open(); + expression_rec(p, 0); + p.close(first_expression, Expression); + + // ? : + p.expect(Colon); + + // ? : + let last_expression = p.open(); + expression_rec(p, 0); + p.close(last_expression, Expression); + + p.close(open_marker, TenaryConditional); } /** * return marker which bound the expression */ pub fn expression_rec(p: &mut Parser, pb: u16) -> Option { - let parse_able: Option = if let Some(pp) = p.current().prefix() { - let kind = p.current(); - let m = p.open(); - p.advance(); - expression_rec(p, pp); - Some(p.close(m, kind)) - } else { - expression_atom(p) + // consume all first prefix tokens (++a, --a, -a, +a, !a) + // next, consume first atom (identifier/number/tuple) + let parse_able: Option = { + if let Some(pp) = p.current().prefix() { + let kind = p.current(); + let open_marker = p.open(); + // consume prefix token (++, --, -, +, !) + p.advance(); + // continue with the next tokens + expression_rec(p, pp); + Some(p.close(open_marker, kind)) + } else { + expression_atom(p) + } }; parse_able?; let mut lhs = parse_able.unwrap(); - // TODO: function call - if p.at(LParen) { - let m = p.open_before(lhs); - // tuple(p); - function_params(p); - lhs = p.close(m, Call); - } - while !p.eof() { - let current_kind = p.current(); - if let Some((lp, rp)) = current_kind.infix() { + let kind = p.current(); + + if let Some((lp, rp)) = kind.infix() { + // infix case: + + // is already consume in parse_able + + // TODO: what does it mean??? if rp <= pb { return None; } - let m = p.open_before(lhs); + // open event that wrap the first parameter () + let open_marker = p.open_before(lhs); + + // consume the infix token p.advance(); + + // extract the second parameter expression_rec(p, lp); - lhs = p.close(m, current_kind); - continue; - } - if let Some(pp) = current_kind.postfix() { + lhs = p.close(open_marker, kind); + } else if let Some(pp) = kind.postfix() { if pp <= pb { return None; } - let m = p.open_before(lhs); - p.advance(); - if matches!(current_kind, LBracket) { - expression_rec(p, 0); - p.expect(RBracket); - } else { - p.expect(Identifier); - } - lhs = if matches!(current_kind, Dot) { - p.close(m, ComponentCall) - } else { - p.close(m, ArrayQuery) - }; - continue; + match kind { + LParen => { + // function call + let open_marker = p.open_before(lhs); + tuple_expression(p); + lhs = p.close(open_marker, Call); + } + LBracket => { + // array subscript: abc[N - 1] + let open_marker = p.open_before(lhs); + p.expect(LBracket); + expression(p); + p.expect(RBracket); + p.close(open_marker, ArrayQuery); + } + Dot => { + // attribute access + // abc[N - 1].def OR abc.def --> component call + let open_marker = p.open_before(lhs); + p.expect(Dot); + p.expect(Identifier); + p.close(open_marker, ComponentCall); + } + UnitDec | UnitInc => { + let open_marker = p.open_before(lhs); + // consume token ++/-- and do nothing + p.advance(); + p.close(open_marker, kind); + } + _ => { + // not a postfix token + p.advance_with_error(&format!("Expect a postfix token, but found {:?}", kind)); + break; + } + }; + } else { + break; } - break; } + + // return the outer open marker Some(lhs) } /** - * circom_expression = expr ? expr: expr | - * expr + * the unit element in expression + * eg: a, b, 5, 100, () */ -fn circom_expression(p: &mut Parser) { - if let Some(mut lhs) = expression_rec(p, 0) { - let current_kind = p.current(); - if matches!(current_kind, MarkQuestion) { - let m = p.open_before(lhs); - lhs = p.close(m, Condition); +fn expression_atom(p: &mut Parser) -> Option { + let kind = p.current(); - let m = p.open_before(lhs); + match kind { + Number | Identifier => { + let open_marker = p.open(); p.advance(); - - let first_expression = p.open(); - expression_rec(p, 0); - p.close(first_expression, Expression); - - p.expect(Colon); - - let last_expression = p.open(); + let m_close = p.close(open_marker, ExpressionAtom); + Some(m_close) + } + LParen => { + // () + let open_marker = p.open(); + p.expect(LParen); expression_rec(p, 0); - p.close(last_expression, Expression); - - p.close(m, TenaryConditional); + p.expect(RParen); + let m_close = p.close(open_marker, Expression); + Some(m_close) + } + _ => { + p.advance_with_error("Invalid Token"); + None } } } diff --git a/crates/parser/src/grammar/function.rs b/crates/parser/src/grammar/function.rs index 249259b..1e89e97 100644 --- a/crates/parser/src/grammar/function.rs +++ b/crates/parser/src/grammar/function.rs @@ -1,3 +1,5 @@ +use list::tuple_identifier; + use crate::grammar::*; // fucntion name() @@ -10,11 +12,9 @@ pub fn function_parse(p: &mut Parser) { p.expect(Identifier); p.close(fn_name_marker, FunctionName); - p.expect(LParen); - let arg_marker = p.open(); - list_identity::parse(p); - p.close(arg_marker, ParameterList); - p.expect(RParen); + let parameter_marker = p.open(); + tuple_identifier(p); + p.close(parameter_marker, ParameterList); block::block(p); diff --git a/crates/parser/src/grammar/list.rs b/crates/parser/src/grammar/list.rs new file mode 100644 index 0000000..bf97c21 --- /dev/null +++ b/crates/parser/src/grammar/list.rs @@ -0,0 +1,67 @@ +use crate::grammar::{expression::expression, *}; + +/** + * grammar: "(expression-1, expression-2,..., expression-n)" + * can be an empty () + */ +pub(super) fn tuple_expression(p: &mut Parser) { + // let m = p.open(); + p.expect(LParen); + + // expression-1, expression-2,..., expression-n) + while !p.at(RParen) && !p.eof() { + expression(p); + + // there are no expressions remaining + if !p.eat(Comma) { + break; + } + } + + p.expect(RParen); + + // p.close(m, ExpressionList); +} + +/** + * grammar: "(iden1, iden2,..., idenn)" + * can be an empty () + */ +pub(super) fn tuple_identifier(p: &mut Parser) { + // let m = p.open(); + p.expect(LParen); + + // iden1, iden2, iden3 + while p.at(Identifier) && !p.eof() { + p.expect(Identifier); + + if !p.eat(Comma) { + break; + } + } + + p.expect(RParen); + // p.close(m, IdentifierList); +} + +/** + * grammar: "[iden1, iden2,..., idenn]" + * can be an empty () + * only use in main component. + */ +pub(super) fn list_identifier(p: &mut Parser) { + // let m = p.open(); + p.expect(LBracket); + + // iden1, iden2, iden3 + while p.at(Identifier) && !p.eof() { + p.expect(Identifier); + + if !p.eat(Comma) { + break; + } + } + + p.expect(RBracket); + // p.close(m, IdentifierList); +} diff --git a/crates/parser/src/grammar/list_identity.rs b/crates/parser/src/grammar/list_identity.rs deleted file mode 100644 index ca3214c..0000000 --- a/crates/parser/src/grammar/list_identity.rs +++ /dev/null @@ -1,13 +0,0 @@ -use super::*; - -// a, b, c, d -pub fn parse(p: &mut Parser) { - while p.at(Identifier) && !p.eof() { - p.expect(Identifier); - if p.at(Comma) { - p.expect(Comma) - } else { - break; - } - } -} diff --git a/crates/parser/src/grammar/main_component.rs b/crates/parser/src/grammar/main_component.rs index fc804f4..2fd307b 100644 --- a/crates/parser/src/grammar/main_component.rs +++ b/crates/parser/src/grammar/main_component.rs @@ -1,3 +1,5 @@ +use list::list_identifier; + use super::*; /* @@ -13,7 +15,7 @@ pub fn main_component(p: &mut Parser) { p.expect(LCurly); p.expect(PublicKw); p.expect(LBracket); - list_identity::parse(p); + list_identifier(p); p.expect(RBracket); } diff --git a/crates/parser/src/grammar/statement.rs b/crates/parser/src/grammar/statement.rs index e2b1a1b..93976d9 100644 --- a/crates/parser/src/grammar/statement.rs +++ b/crates/parser/src/grammar/statement.rs @@ -1,14 +1,12 @@ -use crate::token_kind::TokenKind; - use super::{block::block, expression::expression, *}; pub(super) fn statement(p: &mut Parser) { - let m = p.open(); + // let open_marker = p.open(); match p.current() { IfKw => if_statement(p), _ => statement_no_condition(p), } - p.close(m, Statement); + // p.close(open_marker, Statement); } /* @@ -18,17 +16,22 @@ else */ fn if_statement(p: &mut Parser) { - let m = p.open(); + let open_marker = p.open(); + + // if () p.expect(IfKw); p.expect(LParen); - expression::expression(p); + expression(p); p.expect(RParen); statement(p); + + // else if p.at(ElseKw) { p.expect(ElseKw); statement(p); } - p.close(m, IfKw); + + p.close(open_marker, IfStatement); } /** @@ -64,7 +67,7 @@ for (/; ; ) */ fn for_statement(p: &mut Parser) { - let m = p.open(); + let open_marker = p.open(); // for ( p.expect(ForKw); @@ -89,8 +92,8 @@ fn for_statement(p: &mut Parser) { // for (i = 1; i < N; i++) { } statement(p); - // statement_no_condition(p); - p.close(m, ForLoop); + + p.close(open_marker, ForLoop); } /* @@ -98,103 +101,86 @@ while () */ fn while_statement(p: &mut Parser) { + let open_marker = p.open(); + p.expect(WhileKw); p.expect(LParen); expression(p); p.expect(RParen); statement(p); + + p.close(open_marker, WhileLoop); } /* assert() */ fn assert_statement(p: &mut Parser) { - let m = p.open(); + let open_marker = p.open(); + p.expect(AssertKw); p.expect(LParen); expression(p); p.expect(RParen); - p.close(m, AssertKw); + + p.close(open_marker, AssertStatement); } /* -log() +log(, , ... ) */ fn log_statement(p: &mut Parser) { - let m = p.open(); + let open_marker = p.open(); + p.expect(LogKw); p.expect(LParen); + + // list circom string/expression while !p.eof() { - if p.at(RParen) { - break; - } match p.current() { + RParen => break, CircomString => p.advance(), _ => expression(p), } - if !p.at(Comma) { + + if !p.eat(Comma) { break; - } else { - p.advance(); } } + p.expect(RParen); - p.close(m, LogKw); + + p.close(open_marker, LogStatement); } /* return */ fn return_statement(p: &mut Parser) { - let m = p.open(); + let open_marker = p.open(); p.expect(ReturnKw); expression(p); - p.close(m, ReturnKw); + p.close(open_marker, ReturnStatement); } /* - + +optional: +eg: out[1] <== in[0] + in[2] */ fn assignment_statement(p: &mut Parser) { - let m = p.open(); - - if p.at(Identifier) { - let m_id = p.open(); - // abc - let m_name = p.open(); - p.expect(Identifier); - p.close(m_name, ComponentIdentifier); - - // abc[N - 1] - if p.at(LBracket) { - p.expect(LBracket); - expression(p); - p.expect(RBracket); - } + let open_marker = p.open(); - if p.at(Dot) { - // abc[N - 1].def OR abc.def --> component call - p.expect(Dot); - p.expect(Identifier); - p.close(m_id, ComponentCall); - } else { - // abc[N - 1] OR abc --> expression - p.close(m_id, Expression); - } - } else { - // assignment without identifier - expression(p); - } + // left expression + expression(p); // assign part if p.at_assign_token() { - let is_self_assign = p.at_any(&[TokenKind::UnitDec, TokenKind::UnitInc]); p.advance(); - if is_self_assign == false { - expression(p); - } - p.close(m, AssignStatement); - } else { - p.close(m, Error); + + // right expression + expression(p); } + + p.close(open_marker, AssignStatement); } diff --git a/crates/parser/src/grammar/template.rs b/crates/parser/src/grammar/template.rs index 9cfa7cb..0a1bd5d 100644 --- a/crates/parser/src/grammar/template.rs +++ b/crates/parser/src/grammar/template.rs @@ -1,4 +1,7 @@ +use list::tuple_identifier; + use crate::grammar::*; + /** * template Identifier() {content} * template Identifier( param_1, ... , param_n ) { content } @@ -13,11 +16,9 @@ pub fn template(p: &mut Parser) { p.expect(Identifier); p.close(name_marker, TemplateName); - p.expect(LParen); - let arg_marker = p.open(); - list_identity::parse(p); - p.close(arg_marker, ParameterList); - p.expect(RParen); + let parameter_marker = p.open(); + tuple_identifier(p); + p.close(parameter_marker, ParameterList); block::block(p); diff --git a/crates/parser/src/input.rs b/crates/parser/src/input.rs index 6278fd8..57e7317 100644 --- a/crates/parser/src/input.rs +++ b/crates/parser/src/input.rs @@ -137,7 +137,6 @@ mod tests { return r; }"#; test(source, "test_function"); - test(source, "test_function"); } #[test] diff --git a/crates/parser/src/parser.rs b/crates/parser/src/parser.rs index 20b3091..086519c 100644 --- a/crates/parser/src/parser.rs +++ b/crates/parser/src/parser.rs @@ -70,8 +70,8 @@ impl<'a> Parser<'a> { } } - pub fn close(&mut self, marker_open: Marker, kind: TokenKind) -> Marker { - match marker_open { + pub fn close(&mut self, open_marker: Marker, kind: TokenKind) -> Marker { + match open_marker { Marker::Open(index) => { self.events[index] = Event::Open { kind }; self.events.push(Event::Close); diff --git a/crates/parser/src/snapshots/parser__input__tests__test_comment_error.snap b/crates/parser/src/snapshots/parser__input__tests__test_comment_error.snap index 5ddaf83..1c9d3ba 100644 --- a/crates/parser/src/snapshots/parser__input__tests__test_comment_error.snap +++ b/crates/parser/src/snapshots/parser__input__tests__test_comment_error.snap @@ -1,34 +1,34 @@ ---- -source: crates/parser/src/input.rs -expression: input ---- -kind: - - EndLine - - WhiteSpace - - PragmaKw - - WhiteSpace - - Version - - Semicolon - - EndLine - - WhiteSpace - - Error -source: "\n pragma 2.1.1;\n /*a + b == 10*\n a + 10\n template\n\n /*\n " -position: - - start: 0 - end: 1 - - start: 1 - end: 9 - - start: 9 - end: 15 - - start: 15 - end: 16 - - start: 16 - end: 21 - - start: 21 - end: 22 - - start: 22 - end: 23 - - start: 23 - end: 31 - - start: 31 - end: 94 +--- +source: crates/parser/src/input.rs +expression: input +--- +kind: + - EndLine + - WhiteSpace + - PragmaKw + - WhiteSpace + - Version + - Semicolon + - EndLine + - WhiteSpace + - Error +source: "\n pragma 2.1.1;\n /*a + b == 10*\n a + 10\n template\n\n /*\n " +position: + - start: 0 + end: 1 + - start: 1 + end: 9 + - start: 9 + end: 15 + - start: 15 + end: 16 + - start: 16 + end: 21 + - start: 21 + end: 22 + - start: 22 + end: 23 + - start: 23 + end: 31 + - start: 31 + end: 94 diff --git a/crates/parser/src/snapshots/parser__input__tests__test_pragma.snap b/crates/parser/src/snapshots/parser__input__tests__test_pragma.snap index c85ae09..7187f99 100644 --- a/crates/parser/src/snapshots/parser__input__tests__test_pragma.snap +++ b/crates/parser/src/snapshots/parser__input__tests__test_pragma.snap @@ -1,52 +1,52 @@ ---- -source: crates/parser/src/input.rs -expression: input ---- -kind: - - EndLine - - WhiteSpace - - BlockComment - - EndLine - - EndLine - - WhiteSpace - - PragmaKw - - WhiteSpace - - Circom - - WhiteSpace - - Version - - Semicolon - - EndLine - - EndLine - - WhiteSpace -source: "\n /* test pragma token kinds */\n\n pragma circom 2.0.0;\n\n " -position: - - start: 0 - end: 1 - - start: 1 - end: 9 - - start: 9 - end: 38 - - start: 38 - end: 39 - - start: 39 - end: 40 - - start: 40 - end: 44 - - start: 44 - end: 50 - - start: 50 - end: 51 - - start: 51 - end: 57 - - start: 57 - end: 58 - - start: 58 - end: 63 - - start: 63 - end: 64 - - start: 64 - end: 65 - - start: 65 - end: 66 - - start: 66 - end: 70 +--- +source: crates/parser/src/input.rs +expression: input +--- +kind: + - EndLine + - WhiteSpace + - BlockComment + - EndLine + - EndLine + - WhiteSpace + - PragmaKw + - WhiteSpace + - Circom + - WhiteSpace + - Version + - Semicolon + - EndLine + - EndLine + - WhiteSpace +source: "\n /* test pragma token kinds */\n\n pragma circom 2.0.0;\n\n " +position: + - start: 0 + end: 1 + - start: 1 + end: 9 + - start: 9 + end: 38 + - start: 38 + end: 39 + - start: 39 + end: 40 + - start: 40 + end: 44 + - start: 44 + end: 50 + - start: 50 + end: 51 + - start: 51 + end: 57 + - start: 57 + end: 58 + - start: 58 + end: 63 + - start: 63 + end: 64 + - start: 64 + end: 65 + - start: 65 + end: 66 + - start: 66 + end: 70 diff --git a/crates/parser/src/token_kind.rs b/crates/parser/src/token_kind.rs index 3a8621e..ef40c54 100644 --- a/crates/parser/src/token_kind.rs +++ b/crates/parser/src/token_kind.rs @@ -189,36 +189,49 @@ pub enum TokenKind { ReturnKw, #[token("assert")] AssertKw, - // Complex token kind - ForLoop, + // Statements + IfStatement, + AssertStatement, + LogStatement, + ReturnStatement, AssignStatement, + ForLoop, + WhileLoop, + // Program CircomProgram, - SignalOfComponent, - SignalHeader, - Block, - Tuple, - TupleInit, - Call, - TenaryConditional, - Condition, - ExpressionAtom, - Expression, + // Function FunctionDef, - Statement, - StatementList, - ComponentDecl, + FunctionName, + // Template TemplateDef, TemplateName, - FunctionName, - ParameterList, + // ComplexIdentifier, which will replace: + // ___ SignalIdentifier, + // ___ VarIdentifier, + // ___ ComponentIdentifier, + ComplexIdentifier, + // Signal SignalDecl, - VarIdentifier, - VarDecl, InputSignalDecl, OutputSignalDecl, + SignalHeader, + // Variable + VarDecl, + // Component + ComponentDecl, ComponentCall, - ComponentIdentifier, - SignalIdentifier, + SignalOfComponent, + // Expression + ExpressionAtom, + Expression, + // Complex token kind + Block, + ParameterList, + Call, + TenaryConditional, + Condition, + Statement, + StatementList, ArrayQuery, ParserError, BlockComment, @@ -278,8 +291,7 @@ impl TokenKind { | Self::GreaterThan | Self::LessThanAndEqual | Self::GreaterThanAndEqual => Some((79, 80)), - Self::Equal - | Self::NotEqual => Some((74, 75)), + Self::Equal | Self::NotEqual => Some((74, 75)), // other bitwise operators Self::BitAnd => Some((69, 70)), Self::BitXor => Some((64, 65)), // exclusive or @@ -289,9 +301,12 @@ impl TokenKind { Self::BoolOr => Some((49, 50)), // ---------- // TODO: how about conditional operation ( ? : ) - // associativity: right to left [ a ? b : c --> ??? ] + // associativity: right to left [ a ? b : c --> ??? ] + // ---------- - // associativity: right to left [ a = b = c --> a = (b = c) ] + // associativity: right to left [ a = b = c --> a = (b = c) ] + // DO NOT CONSIDER ASSIGMENT OPERATORS AS INFIX TOKENS + /* // assignment operators Self::Assign // signal assigment operators @@ -314,6 +329,7 @@ impl TokenKind { | Self::IntDivAssign | Self::ModAssign | Self::PowerAssign => Some((44, 45)), + */ // TODO: how about comma (expression separator) Self::Comma => Some((39, 40)), // not an infix operator @@ -376,10 +392,9 @@ impl TokenKind { | Self::DivAssign | Self::IntDivAssign | Self::ModAssign - | Self::PowerAssign - // unit inc/dec - | Self::UnitInc - | Self::UnitDec + | Self::PowerAssign // unit inc/dec + // | Self::UnitInc + // | Self::UnitDec ) } diff --git a/crates/syntax/src/abstract_syntax_tree/ast.rs b/crates/syntax/src/abstract_syntax_tree/ast.rs index 7682d18..3eef19c 100644 --- a/crates/syntax/src/abstract_syntax_tree/ast.rs +++ b/crates/syntax/src/abstract_syntax_tree/ast.rs @@ -14,54 +14,43 @@ ast_node!(AstSignalHeader, SignalHeader); ast_node!(AstInputSignalDecl, InputSignalDecl); ast_node!(AstOutputSignalDecl, OutputSignalDecl); ast_node!(AstSignalDecl, SignalDecl); -ast_node!(AstSignalIdentifier, SignalIdentifier); impl AstInputSignalDecl { - pub fn signal_identifier(&self) -> Option { + pub fn signal_identifier(&self) -> Option { support::child(self.syntax()) } } impl AstOutputSignalDecl { - pub fn signal_identifier(&self) -> Option { + pub fn signal_identifier(&self) -> Option { support::child(self.syntax()) } } impl AstSignalDecl { - pub fn signal_identifier(&self) -> Option { - support::child(self.syntax()) - } -} - -impl AstSignalIdentifier { - pub fn name(&self) -> Option { + pub fn signal_identifier(&self) -> Option { support::child(self.syntax()) } } ast_node!(AstVarDecl, VarDecl); -ast_node!(AstVarIdentifier, VarIdentifier); impl AstVarDecl { - pub fn var_identifier(&self) -> Option { - support::child(self.syntax()) - } -} - -impl AstVarIdentifier { - pub fn name(&self) -> Option { + pub fn var_identifier(&self) -> Option { support::child(self.syntax()) } } ast_node!(AstComponentDecl, ComponentDecl); +// component hash = Poseidon(2); +// template --> Poseidon +// component_identifier --> hash impl AstComponentDecl { pub fn template(&self) -> Option { support::child(self.syntax()) } - pub fn component_identifier(&self) -> Option { + pub fn component_identifier(&self) -> Option { support::child(self.syntax()) } } @@ -97,6 +86,23 @@ impl AstPragma { } ast_node!(AstParameterList, TokenKind::ParameterList); +impl AstParameterList { + pub fn parameters(&self) -> Vec { + self.syntax() + .children() + .filter_map(AstIdentifier::cast) + .collect() + } +} + +ast_node!(AstComplexIdentifier, ComplexIdentifier); + +impl AstComplexIdentifier { + pub fn name(&self) -> Option { + support::child(self.syntax()) + } +} + ast_node!(AstIdentifier, Identifier); impl AstIdentifier { @@ -168,7 +174,7 @@ impl AstCircomProgram { ast_node!(AstComponentCall, ComponentCall); impl AstComponentCall { - pub fn component_name(&self) -> Option { + pub fn component_name(&self) -> Option { support::child(self.syntax()) } pub fn signal(&self) -> Option { @@ -176,14 +182,6 @@ impl AstComponentCall { } } -ast_node!(AstComponentIdentifier, ComponentIdentifier); - -impl AstComponentIdentifier { - pub fn name(&self) -> Option { - support::child(self.syntax()) - } -} - ast_node!(AstCircomString, CircomString); impl AstCircomString { pub fn value(&self) -> String { diff --git a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block.circom.snap index 1b3d146..6b68e8b 100644 --- a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block.circom.snap +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block.circom.snap @@ -26,7 +26,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | InputKw 50..55 "input" | | | | WhiteSpace 55..56 | | | | | WhiteSpace 55..56 " " -| | | SignalIdentifier 56..61 +| | | ComplexIdentifier 56..61 | | | | Identifier 56..58 | | | | | Identifier 56..58 "in" | | | | LBracket 58..59 @@ -53,7 +53,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | OutputKw 83..89 "output" | | | | WhiteSpace 89..90 | | | | | WhiteSpace 89..90 " " -| | | SignalIdentifier 90..93 +| | | ComplexIdentifier 90..93 | | | | Identifier 90..93 | | | | | Identifier 90..93 "out" | | Semicolon 93..94 @@ -67,7 +67,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | ComponentKw 108..117 "component" | | | WhiteSpace 117..118 | | | | WhiteSpace 117..118 " " -| | | ComponentIdentifier 118..127 +| | | ComplexIdentifier 118..127 | | | | Identifier 118..122 | | | | | Identifier 118..122 "comp" | | | | LBracket 122..123 @@ -98,407 +98,412 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | EndLine 157..159 "\r\n" | | WhiteSpace 159..171 | | | WhiteSpace 159..171 " " -| | Statement 171..257 -| | | ForLoop 171..257 -| | | | ForKw 171..174 -| | | | | ForKw 171..174 "for" -| | | | LParen 174..175 -| | | | | LParen 174..175 "(" -| | | | VarDecl 175..184 -| | | | | VarKw 175..178 -| | | | | | VarKw 175..178 "var" -| | | | | WhiteSpace 178..179 -| | | | | | WhiteSpace 178..179 " " -| | | | | VarIdentifier 179..181 -| | | | | | Identifier 179..180 -| | | | | | | Identifier 179..180 "i" -| | | | | | WhiteSpace 180..181 -| | | | | | | WhiteSpace 180..181 " " -| | | | | Assign 181..182 -| | | | | | Assign 181..182 "=" -| | | | | WhiteSpace 182..183 -| | | | | | WhiteSpace 182..183 " " -| | | | | Expression 183..184 -| | | | | | ExpressionAtom 183..184 -| | | | | | | Number 183..184 -| | | | | | | | Number 183..184 "0" -| | | | Semicolon 184..185 -| | | | | Semicolon 184..185 ";" -| | | | WhiteSpace 185..186 -| | | | | WhiteSpace 185..186 " " -| | | | Expression 186..193 -| | | | | LessThan 186..193 -| | | | | | ExpressionAtom 186..187 -| | | | | | | Identifier 186..187 -| | | | | | | | Identifier 186..187 "i" -| | | | | | WhiteSpace 187..188 -| | | | | | | WhiteSpace 187..188 " " -| | | | | | LessThan 188..189 -| | | | | | | LessThan 188..189 "<" -| | | | | | WhiteSpace 189..190 -| | | | | | | WhiteSpace 189..190 " " -| | | | | | Sub 190..193 -| | | | | | | ExpressionAtom 190..191 -| | | | | | | | Identifier 190..191 -| | | | | | | | | Identifier 190..191 "N" -| | | | | | | Sub 191..192 -| | | | | | | | Sub 191..192 "-" -| | | | | | | ExpressionAtom 192..193 -| | | | | | | | Number 192..193 -| | | | | | | | | Number 192..193 "1" -| | | | Semicolon 193..194 -| | | | | Semicolon 193..194 ";" -| | | | WhiteSpace 194..195 -| | | | | WhiteSpace 194..195 " " -| | | | AssignStatement 195..198 -| | | | | Expression 195..196 -| | | | | | ComponentIdentifier 195..196 +| | ForLoop 171..257 +| | | ForKw 171..174 +| | | | ForKw 171..174 "for" +| | | LParen 174..175 +| | | | LParen 174..175 "(" +| | | VarDecl 175..184 +| | | | VarKw 175..178 +| | | | | VarKw 175..178 "var" +| | | | WhiteSpace 178..179 +| | | | | WhiteSpace 178..179 " " +| | | | ComplexIdentifier 179..181 +| | | | | Identifier 179..180 +| | | | | | Identifier 179..180 "i" +| | | | | WhiteSpace 180..181 +| | | | | | WhiteSpace 180..181 " " +| | | | Assign 181..182 +| | | | | Assign 181..182 "=" +| | | | WhiteSpace 182..183 +| | | | | WhiteSpace 182..183 " " +| | | | Expression 183..184 +| | | | | ExpressionAtom 183..184 +| | | | | | Number 183..184 +| | | | | | | Number 183..184 "0" +| | | Semicolon 184..185 +| | | | Semicolon 184..185 ";" +| | | WhiteSpace 185..186 +| | | | WhiteSpace 185..186 " " +| | | Expression 186..193 +| | | | LessThan 186..193 +| | | | | ExpressionAtom 186..187 +| | | | | | Identifier 186..187 +| | | | | | | Identifier 186..187 "i" +| | | | | WhiteSpace 187..188 +| | | | | | WhiteSpace 187..188 " " +| | | | | LessThan 188..189 +| | | | | | LessThan 188..189 "<" +| | | | | WhiteSpace 189..190 +| | | | | | WhiteSpace 189..190 " " +| | | | | Sub 190..193 +| | | | | | ExpressionAtom 190..191 +| | | | | | | Identifier 190..191 +| | | | | | | | Identifier 190..191 "N" +| | | | | | Sub 191..192 +| | | | | | | Sub 191..192 "-" +| | | | | | ExpressionAtom 192..193 +| | | | | | | Number 192..193 +| | | | | | | | Number 192..193 "1" +| | | Semicolon 193..194 +| | | | Semicolon 193..194 ";" +| | | WhiteSpace 194..195 +| | | | WhiteSpace 194..195 " " +| | | AssignStatement 195..198 +| | | | Expression 195..198 +| | | | | UnitInc 195..198 +| | | | | | ExpressionAtom 195..196 | | | | | | | Identifier 195..196 | | | | | | | | Identifier 195..196 "i" -| | | | | UnitInc 196..198 -| | | | | | UnitInc 196..198 "++" -| | | | RParen 198..199 -| | | | | RParen 198..199 ")" -| | | | Statement 199..257 -| | | | | Block 199..257 -| | | | | | LCurly 199..200 -| | | | | | | LCurly 199..200 "{" -| | | | | | EndLine 200..202 -| | | | | | | EndLine 200..202 "\r\n" -| | | | | | WhiteSpace 202..218 -| | | | | | | WhiteSpace 202..218 " " -| | | | | | StatementList 218..256 -| | | | | | | Statement 218..242 -| | | | | | | | AssignStatement 218..241 -| | | | | | | | | Expression 218..226 -| | | | | | | | | | ComponentIdentifier 218..222 -| | | | | | | | | | | Identifier 218..222 -| | | | | | | | | | | | Identifier 218..222 "comp" -| | | | | | | | | | LBracket 222..223 -| | | | | | | | | | | LBracket 222..223 "[" -| | | | | | | | | | Expression 223..224 -| | | | | | | | | | | ExpressionAtom 223..224 -| | | | | | | | | | | | Identifier 223..224 -| | | | | | | | | | | | | Identifier 223..224 "i" -| | | | | | | | | | RBracket 224..225 -| | | | | | | | | | | RBracket 224..225 "]" -| | | | | | | | | | WhiteSpace 225..226 -| | | | | | | | | | | WhiteSpace 225..226 " " -| | | | | | | | | Assign 226..227 -| | | | | | | | | | Assign 226..227 "=" -| | | | | | | | | WhiteSpace 227..228 -| | | | | | | | | | WhiteSpace 227..228 " " -| | | | | | | | | Expression 228..241 -| | | | | | | | | | Call 228..241 -| | | | | | | | | | | ExpressionAtom 228..239 -| | | | | | | | | | | | Identifier 228..239 -| | | | | | | | | | | | | Identifier 228..239 "Multiplier2" -| | | | | | | | | | | Tuple 239..241 -| | | | | | | | | | | | LParen 239..240 -| | | | | | | | | | | | | LParen 239..240 "(" -| | | | | | | | | | | | RParen 240..241 -| | | | | | | | | | | | | RParen 240..241 ")" -| | | | | | | | Semicolon 241..242 -| | | | | | | | | Semicolon 241..242 ";" -| | | | | | | EndLine 242..244 -| | | | | | | | EndLine 242..244 "\r\n" -| | | | | | | WhiteSpace 244..256 -| | | | | | | | WhiteSpace 244..256 " " -| | | | | | RCurly 256..257 -| | | | | | | RCurly 256..257 "}" +| | | | | | UnitInc 196..198 +| | | | | | | UnitInc 196..198 "++" +| | | RParen 198..199 +| | | | RParen 198..199 ")" +| | | Block 199..257 +| | | | LCurly 199..200 +| | | | | LCurly 199..200 "{" +| | | | EndLine 200..202 +| | | | | EndLine 200..202 "\r\n" +| | | | WhiteSpace 202..218 +| | | | | WhiteSpace 202..218 " " +| | | | StatementList 218..256 +| | | | | AssignStatement 218..241 +| | | | | | Expression 218..226 +| | | | | | | ArrayQuery 218..225 +| | | | | | | | ExpressionAtom 218..222 +| | | | | | | | | Identifier 218..222 +| | | | | | | | | | Identifier 218..222 "comp" +| | | | | | | | LBracket 222..223 +| | | | | | | | | LBracket 222..223 "[" +| | | | | | | | Expression 223..224 +| | | | | | | | | ExpressionAtom 223..224 +| | | | | | | | | | Identifier 223..224 +| | | | | | | | | | | Identifier 223..224 "i" +| | | | | | | | RBracket 224..225 +| | | | | | | | | RBracket 224..225 "]" +| | | | | | | WhiteSpace 225..226 +| | | | | | | | WhiteSpace 225..226 " " +| | | | | | Assign 226..227 +| | | | | | | Assign 226..227 "=" +| | | | | | WhiteSpace 227..228 +| | | | | | | WhiteSpace 227..228 " " +| | | | | | Expression 228..241 +| | | | | | | Call 228..241 +| | | | | | | | ExpressionAtom 228..239 +| | | | | | | | | Identifier 228..239 +| | | | | | | | | | Identifier 228..239 "Multiplier2" +| | | | | | | | LParen 239..240 +| | | | | | | | | LParen 239..240 "(" +| | | | | | | | RParen 240..241 +| | | | | | | | | RParen 240..241 ")" +| | | | | Semicolon 241..242 +| | | | | | Semicolon 241..242 ";" +| | | | | EndLine 242..244 +| | | | | | EndLine 242..244 "\r\n" +| | | | | WhiteSpace 244..256 +| | | | | | WhiteSpace 244..256 " " +| | | | RCurly 256..257 +| | | | | RCurly 256..257 "}" | | EndLine 257..259 | | | EndLine 257..259 "\r\n" | | WhiteSpace 259..271 | | | WhiteSpace 259..271 " " -| | Statement 271..293 -| | | AssignStatement 271..292 +| | AssignStatement 271..292 +| | | Expression 271..283 | | | | ComponentCall 271..282 -| | | | | ComponentIdentifier 271..275 -| | | | | | Identifier 271..275 -| | | | | | | Identifier 271..275 "comp" -| | | | | LBracket 275..276 -| | | | | | LBracket 275..276 "[" -| | | | | Expression 276..277 -| | | | | | ExpressionAtom 276..277 -| | | | | | | Number 276..277 -| | | | | | | | Number 276..277 "0" -| | | | | RBracket 277..278 -| | | | | | RBracket 277..278 "]" +| | | | | ArrayQuery 271..278 +| | | | | | ExpressionAtom 271..275 +| | | | | | | Identifier 271..275 +| | | | | | | | Identifier 271..275 "comp" +| | | | | | LBracket 275..276 +| | | | | | | LBracket 275..276 "[" +| | | | | | Expression 276..277 +| | | | | | | ExpressionAtom 276..277 +| | | | | | | | Number 276..277 +| | | | | | | | | Number 276..277 "0" +| | | | | | RBracket 277..278 +| | | | | | | RBracket 277..278 "]" | | | | | Dot 278..279 | | | | | | Dot 278..279 "." | | | | | Identifier 279..282 | | | | | | Identifier 279..282 "in1" | | | | WhiteSpace 282..283 | | | | | WhiteSpace 282..283 " " -| | | | RAssignConstraintSignal 283..286 -| | | | | RAssignConstraintSignal 283..286 "<==" -| | | | WhiteSpace 286..287 -| | | | | WhiteSpace 286..287 " " -| | | | Expression 287..292 -| | | | | ArrayQuery 287..292 -| | | | | | ExpressionAtom 287..289 -| | | | | | | Identifier 287..289 -| | | | | | | | Identifier 287..289 "in" -| | | | | | LBracket 289..290 -| | | | | | | LBracket 289..290 "[" +| | | RAssignConstraintSignal 283..286 +| | | | RAssignConstraintSignal 283..286 "<==" +| | | WhiteSpace 286..287 +| | | | WhiteSpace 286..287 " " +| | | Expression 287..292 +| | | | ArrayQuery 287..292 +| | | | | ExpressionAtom 287..289 +| | | | | | Identifier 287..289 +| | | | | | | Identifier 287..289 "in" +| | | | | LBracket 289..290 +| | | | | | LBracket 289..290 "[" +| | | | | Expression 290..291 | | | | | | ExpressionAtom 290..291 | | | | | | | Number 290..291 | | | | | | | | Number 290..291 "0" -| | | | | | RBracket 291..292 -| | | | | | | RBracket 291..292 "]" -| | | Semicolon 292..293 -| | | | Semicolon 292..293 ";" +| | | | | RBracket 291..292 +| | | | | | RBracket 291..292 "]" +| | Semicolon 292..293 +| | | Semicolon 292..293 ";" | | EndLine 293..295 | | | EndLine 293..295 "\r\n" | | WhiteSpace 295..307 | | | WhiteSpace 295..307 " " -| | Statement 307..329 -| | | AssignStatement 307..328 +| | AssignStatement 307..328 +| | | Expression 307..319 | | | | ComponentCall 307..318 -| | | | | ComponentIdentifier 307..311 -| | | | | | Identifier 307..311 -| | | | | | | Identifier 307..311 "comp" -| | | | | LBracket 311..312 -| | | | | | LBracket 311..312 "[" -| | | | | Expression 312..313 -| | | | | | ExpressionAtom 312..313 -| | | | | | | Number 312..313 -| | | | | | | | Number 312..313 "0" -| | | | | RBracket 313..314 -| | | | | | RBracket 313..314 "]" +| | | | | ArrayQuery 307..314 +| | | | | | ExpressionAtom 307..311 +| | | | | | | Identifier 307..311 +| | | | | | | | Identifier 307..311 "comp" +| | | | | | LBracket 311..312 +| | | | | | | LBracket 311..312 "[" +| | | | | | Expression 312..313 +| | | | | | | ExpressionAtom 312..313 +| | | | | | | | Number 312..313 +| | | | | | | | | Number 312..313 "0" +| | | | | | RBracket 313..314 +| | | | | | | RBracket 313..314 "]" | | | | | Dot 314..315 | | | | | | Dot 314..315 "." | | | | | Identifier 315..318 | | | | | | Identifier 315..318 "in2" | | | | WhiteSpace 318..319 | | | | | WhiteSpace 318..319 " " -| | | | RAssignConstraintSignal 319..322 -| | | | | RAssignConstraintSignal 319..322 "<==" -| | | | WhiteSpace 322..323 -| | | | | WhiteSpace 322..323 " " -| | | | Expression 323..328 -| | | | | ArrayQuery 323..328 -| | | | | | ExpressionAtom 323..325 -| | | | | | | Identifier 323..325 -| | | | | | | | Identifier 323..325 "in" -| | | | | | LBracket 325..326 -| | | | | | | LBracket 325..326 "[" +| | | RAssignConstraintSignal 319..322 +| | | | RAssignConstraintSignal 319..322 "<==" +| | | WhiteSpace 322..323 +| | | | WhiteSpace 322..323 " " +| | | Expression 323..328 +| | | | ArrayQuery 323..328 +| | | | | ExpressionAtom 323..325 +| | | | | | Identifier 323..325 +| | | | | | | Identifier 323..325 "in" +| | | | | LBracket 325..326 +| | | | | | LBracket 325..326 "[" +| | | | | Expression 326..327 | | | | | | ExpressionAtom 326..327 | | | | | | | Number 326..327 | | | | | | | | Number 326..327 "1" -| | | | | | RBracket 327..328 -| | | | | | | RBracket 327..328 "]" -| | | Semicolon 328..329 -| | | | Semicolon 328..329 ";" +| | | | | RBracket 327..328 +| | | | | | RBracket 327..328 "]" +| | Semicolon 328..329 +| | | Semicolon 328..329 ";" | | EndLine 329..331 | | | EndLine 329..331 "\r\n" | | WhiteSpace 331..343 | | | WhiteSpace 331..343 " " -| | Statement 343..481 -| | | ForLoop 343..481 -| | | | ForKw 343..346 -| | | | | ForKw 343..346 "for" -| | | | LParen 346..347 -| | | | | LParen 346..347 "(" -| | | | VarDecl 347..356 -| | | | | VarKw 347..350 -| | | | | | VarKw 347..350 "var" -| | | | | WhiteSpace 350..351 -| | | | | | WhiteSpace 350..351 " " -| | | | | VarIdentifier 351..353 -| | | | | | Identifier 351..352 -| | | | | | | Identifier 351..352 "i" -| | | | | | WhiteSpace 352..353 -| | | | | | | WhiteSpace 352..353 " " -| | | | | Assign 353..354 -| | | | | | Assign 353..354 "=" -| | | | | WhiteSpace 354..355 -| | | | | | WhiteSpace 354..355 " " -| | | | | Expression 355..356 -| | | | | | ExpressionAtom 355..356 -| | | | | | | Number 355..356 -| | | | | | | | Number 355..356 "0" -| | | | Semicolon 356..357 -| | | | | Semicolon 356..357 ";" -| | | | WhiteSpace 357..358 -| | | | | WhiteSpace 357..358 " " -| | | | Expression 358..365 -| | | | | LessThan 358..365 -| | | | | | ExpressionAtom 358..359 -| | | | | | | Identifier 358..359 -| | | | | | | | Identifier 358..359 "i" -| | | | | | WhiteSpace 359..360 -| | | | | | | WhiteSpace 359..360 " " -| | | | | | LessThan 360..361 -| | | | | | | LessThan 360..361 "<" -| | | | | | WhiteSpace 361..362 -| | | | | | | WhiteSpace 361..362 " " -| | | | | | Sub 362..365 -| | | | | | | ExpressionAtom 362..363 -| | | | | | | | Identifier 362..363 -| | | | | | | | | Identifier 362..363 "N" -| | | | | | | Sub 363..364 -| | | | | | | | Sub 363..364 "-" -| | | | | | | ExpressionAtom 364..365 -| | | | | | | | Number 364..365 -| | | | | | | | | Number 364..365 "2" -| | | | Semicolon 365..366 -| | | | | Semicolon 365..366 ";" -| | | | WhiteSpace 366..367 -| | | | | WhiteSpace 366..367 " " -| | | | AssignStatement 367..370 -| | | | | Expression 367..368 -| | | | | | ComponentIdentifier 367..368 +| | ForLoop 343..481 +| | | ForKw 343..346 +| | | | ForKw 343..346 "for" +| | | LParen 346..347 +| | | | LParen 346..347 "(" +| | | VarDecl 347..356 +| | | | VarKw 347..350 +| | | | | VarKw 347..350 "var" +| | | | WhiteSpace 350..351 +| | | | | WhiteSpace 350..351 " " +| | | | ComplexIdentifier 351..353 +| | | | | Identifier 351..352 +| | | | | | Identifier 351..352 "i" +| | | | | WhiteSpace 352..353 +| | | | | | WhiteSpace 352..353 " " +| | | | Assign 353..354 +| | | | | Assign 353..354 "=" +| | | | WhiteSpace 354..355 +| | | | | WhiteSpace 354..355 " " +| | | | Expression 355..356 +| | | | | ExpressionAtom 355..356 +| | | | | | Number 355..356 +| | | | | | | Number 355..356 "0" +| | | Semicolon 356..357 +| | | | Semicolon 356..357 ";" +| | | WhiteSpace 357..358 +| | | | WhiteSpace 357..358 " " +| | | Expression 358..365 +| | | | LessThan 358..365 +| | | | | ExpressionAtom 358..359 +| | | | | | Identifier 358..359 +| | | | | | | Identifier 358..359 "i" +| | | | | WhiteSpace 359..360 +| | | | | | WhiteSpace 359..360 " " +| | | | | LessThan 360..361 +| | | | | | LessThan 360..361 "<" +| | | | | WhiteSpace 361..362 +| | | | | | WhiteSpace 361..362 " " +| | | | | Sub 362..365 +| | | | | | ExpressionAtom 362..363 +| | | | | | | Identifier 362..363 +| | | | | | | | Identifier 362..363 "N" +| | | | | | Sub 363..364 +| | | | | | | Sub 363..364 "-" +| | | | | | ExpressionAtom 364..365 +| | | | | | | Number 364..365 +| | | | | | | | Number 364..365 "2" +| | | Semicolon 365..366 +| | | | Semicolon 365..366 ";" +| | | WhiteSpace 366..367 +| | | | WhiteSpace 366..367 " " +| | | AssignStatement 367..370 +| | | | Expression 367..370 +| | | | | UnitInc 367..370 +| | | | | | ExpressionAtom 367..368 | | | | | | | Identifier 367..368 | | | | | | | | Identifier 367..368 "i" -| | | | | UnitInc 368..370 -| | | | | | UnitInc 368..370 "++" -| | | | RParen 370..371 -| | | | | RParen 370..371 ")" -| | | | Statement 371..481 -| | | | | Block 371..481 -| | | | | | LCurly 371..372 -| | | | | | | LCurly 371..372 "{" -| | | | | | EndLine 372..374 -| | | | | | | EndLine 372..374 "\r\n" -| | | | | | WhiteSpace 374..390 -| | | | | | | WhiteSpace 374..390 " " -| | | | | | StatementList 390..480 -| | | | | | | Statement 390..420 -| | | | | | | | AssignStatement 390..419 -| | | | | | | | | ComponentCall 390..403 -| | | | | | | | | | ComponentIdentifier 390..394 -| | | | | | | | | | | Identifier 390..394 -| | | | | | | | | | | | Identifier 390..394 "comp" -| | | | | | | | | | LBracket 394..395 -| | | | | | | | | | | LBracket 394..395 "[" -| | | | | | | | | | Expression 395..398 -| | | | | | | | | | | Add 395..398 -| | | | | | | | | | | | ExpressionAtom 395..396 -| | | | | | | | | | | | | Identifier 395..396 -| | | | | | | | | | | | | | Identifier 395..396 "i" -| | | | | | | | | | | | Add 396..397 -| | | | | | | | | | | | | Add 396..397 "+" -| | | | | | | | | | | | ExpressionAtom 397..398 -| | | | | | | | | | | | | Number 397..398 -| | | | | | | | | | | | | | Number 397..398 "1" -| | | | | | | | | | RBracket 398..399 -| | | | | | | | | | | RBracket 398..399 "]" -| | | | | | | | | | Dot 399..400 -| | | | | | | | | | | Dot 399..400 "." -| | | | | | | | | | Identifier 400..403 -| | | | | | | | | | | Identifier 400..403 "in1" -| | | | | | | | | WhiteSpace 403..404 -| | | | | | | | | | WhiteSpace 403..404 " " -| | | | | | | | | RAssignConstraintSignal 404..407 -| | | | | | | | | | RAssignConstraintSignal 404..407 "<==" -| | | | | | | | | WhiteSpace 407..408 -| | | | | | | | | | WhiteSpace 407..408 " " -| | | | | | | | | Expression 408..419 -| | | | | | | | | | ComponentCall 408..419 -| | | | | | | | | | | ArrayQuery 408..415 -| | | | | | | | | | | | ExpressionAtom 408..412 -| | | | | | | | | | | | | Identifier 408..412 -| | | | | | | | | | | | | | Identifier 408..412 "comp" -| | | | | | | | | | | | LBracket 412..413 -| | | | | | | | | | | | | LBracket 412..413 "[" -| | | | | | | | | | | | ExpressionAtom 413..414 -| | | | | | | | | | | | | Identifier 413..414 -| | | | | | | | | | | | | | Identifier 413..414 "i" -| | | | | | | | | | | | RBracket 414..415 -| | | | | | | | | | | | | RBracket 414..415 "]" -| | | | | | | | | | | Dot 415..416 -| | | | | | | | | | | | Dot 415..416 "." -| | | | | | | | | | | Identifier 416..419 -| | | | | | | | | | | | Identifier 416..419 "out" -| | | | | | | | Semicolon 419..420 -| | | | | | | | | Semicolon 419..420 ";" -| | | | | | | EndLine 420..422 -| | | | | | | | EndLine 420..422 "\r\n" -| | | | | | | WhiteSpace 422..438 -| | | | | | | | WhiteSpace 422..438 " " -| | | | | | | Statement 438..464 -| | | | | | | | AssignStatement 438..463 -| | | | | | | | | ComponentCall 438..451 -| | | | | | | | | | ComponentIdentifier 438..442 -| | | | | | | | | | | Identifier 438..442 -| | | | | | | | | | | | Identifier 438..442 "comp" -| | | | | | | | | | LBracket 442..443 -| | | | | | | | | | | LBracket 442..443 "[" -| | | | | | | | | | Expression 443..446 -| | | | | | | | | | | Add 443..446 -| | | | | | | | | | | | ExpressionAtom 443..444 -| | | | | | | | | | | | | Identifier 443..444 -| | | | | | | | | | | | | | Identifier 443..444 "i" -| | | | | | | | | | | | Add 444..445 -| | | | | | | | | | | | | Add 444..445 "+" -| | | | | | | | | | | | ExpressionAtom 445..446 -| | | | | | | | | | | | | Number 445..446 -| | | | | | | | | | | | | | Number 445..446 "1" -| | | | | | | | | | RBracket 446..447 -| | | | | | | | | | | RBracket 446..447 "]" -| | | | | | | | | | Dot 447..448 -| | | | | | | | | | | Dot 447..448 "." -| | | | | | | | | | Identifier 448..451 -| | | | | | | | | | | Identifier 448..451 "in2" -| | | | | | | | | WhiteSpace 451..452 -| | | | | | | | | | WhiteSpace 451..452 " " -| | | | | | | | | RAssignConstraintSignal 452..455 -| | | | | | | | | | RAssignConstraintSignal 452..455 "<==" -| | | | | | | | | WhiteSpace 455..456 -| | | | | | | | | | WhiteSpace 455..456 " " -| | | | | | | | | Expression 456..463 -| | | | | | | | | | ArrayQuery 456..463 -| | | | | | | | | | | ExpressionAtom 456..458 -| | | | | | | | | | | | Identifier 456..458 -| | | | | | | | | | | | | Identifier 456..458 "in" -| | | | | | | | | | | LBracket 458..459 -| | | | | | | | | | | | LBracket 458..459 "[" -| | | | | | | | | | | Add 459..462 -| | | | | | | | | | | | ExpressionAtom 459..460 -| | | | | | | | | | | | | Identifier 459..460 -| | | | | | | | | | | | | | Identifier 459..460 "i" -| | | | | | | | | | | | Add 460..461 -| | | | | | | | | | | | | Add 460..461 "+" -| | | | | | | | | | | | ExpressionAtom 461..462 -| | | | | | | | | | | | | Number 461..462 -| | | | | | | | | | | | | | Number 461..462 "2" -| | | | | | | | | | | RBracket 462..463 -| | | | | | | | | | | | RBracket 462..463 "]" -| | | | | | | | Semicolon 463..464 -| | | | | | | | | Semicolon 463..464 ";" -| | | | | | | EndLine 464..466 -| | | | | | | | EndLine 464..466 "\r\n" -| | | | | | | EndLine 466..468 -| | | | | | | | EndLine 466..468 "\r\n" -| | | | | | | WhiteSpace 468..480 -| | | | | | | | WhiteSpace 468..480 " " -| | | | | | RCurly 480..481 -| | | | | | | RCurly 480..481 "}" +| | | | | | UnitInc 368..370 +| | | | | | | UnitInc 368..370 "++" +| | | RParen 370..371 +| | | | RParen 370..371 ")" +| | | Block 371..481 +| | | | LCurly 371..372 +| | | | | LCurly 371..372 "{" +| | | | EndLine 372..374 +| | | | | EndLine 372..374 "\r\n" +| | | | WhiteSpace 374..390 +| | | | | WhiteSpace 374..390 " " +| | | | StatementList 390..480 +| | | | | AssignStatement 390..419 +| | | | | | Expression 390..404 +| | | | | | | ComponentCall 390..403 +| | | | | | | | ArrayQuery 390..399 +| | | | | | | | | ExpressionAtom 390..394 +| | | | | | | | | | Identifier 390..394 +| | | | | | | | | | | Identifier 390..394 "comp" +| | | | | | | | | LBracket 394..395 +| | | | | | | | | | LBracket 394..395 "[" +| | | | | | | | | Expression 395..398 +| | | | | | | | | | Add 395..398 +| | | | | | | | | | | ExpressionAtom 395..396 +| | | | | | | | | | | | Identifier 395..396 +| | | | | | | | | | | | | Identifier 395..396 "i" +| | | | | | | | | | | Add 396..397 +| | | | | | | | | | | | Add 396..397 "+" +| | | | | | | | | | | ExpressionAtom 397..398 +| | | | | | | | | | | | Number 397..398 +| | | | | | | | | | | | | Number 397..398 "1" +| | | | | | | | | RBracket 398..399 +| | | | | | | | | | RBracket 398..399 "]" +| | | | | | | | Dot 399..400 +| | | | | | | | | Dot 399..400 "." +| | | | | | | | Identifier 400..403 +| | | | | | | | | Identifier 400..403 "in1" +| | | | | | | WhiteSpace 403..404 +| | | | | | | | WhiteSpace 403..404 " " +| | | | | | RAssignConstraintSignal 404..407 +| | | | | | | RAssignConstraintSignal 404..407 "<==" +| | | | | | WhiteSpace 407..408 +| | | | | | | WhiteSpace 407..408 " " +| | | | | | Expression 408..419 +| | | | | | | ComponentCall 408..419 +| | | | | | | | ArrayQuery 408..415 +| | | | | | | | | ExpressionAtom 408..412 +| | | | | | | | | | Identifier 408..412 +| | | | | | | | | | | Identifier 408..412 "comp" +| | | | | | | | | LBracket 412..413 +| | | | | | | | | | LBracket 412..413 "[" +| | | | | | | | | Expression 413..414 +| | | | | | | | | | ExpressionAtom 413..414 +| | | | | | | | | | | Identifier 413..414 +| | | | | | | | | | | | Identifier 413..414 "i" +| | | | | | | | | RBracket 414..415 +| | | | | | | | | | RBracket 414..415 "]" +| | | | | | | | Dot 415..416 +| | | | | | | | | Dot 415..416 "." +| | | | | | | | Identifier 416..419 +| | | | | | | | | Identifier 416..419 "out" +| | | | | Semicolon 419..420 +| | | | | | Semicolon 419..420 ";" +| | | | | EndLine 420..422 +| | | | | | EndLine 420..422 "\r\n" +| | | | | WhiteSpace 422..438 +| | | | | | WhiteSpace 422..438 " " +| | | | | AssignStatement 438..463 +| | | | | | Expression 438..452 +| | | | | | | ComponentCall 438..451 +| | | | | | | | ArrayQuery 438..447 +| | | | | | | | | ExpressionAtom 438..442 +| | | | | | | | | | Identifier 438..442 +| | | | | | | | | | | Identifier 438..442 "comp" +| | | | | | | | | LBracket 442..443 +| | | | | | | | | | LBracket 442..443 "[" +| | | | | | | | | Expression 443..446 +| | | | | | | | | | Add 443..446 +| | | | | | | | | | | ExpressionAtom 443..444 +| | | | | | | | | | | | Identifier 443..444 +| | | | | | | | | | | | | Identifier 443..444 "i" +| | | | | | | | | | | Add 444..445 +| | | | | | | | | | | | Add 444..445 "+" +| | | | | | | | | | | ExpressionAtom 445..446 +| | | | | | | | | | | | Number 445..446 +| | | | | | | | | | | | | Number 445..446 "1" +| | | | | | | | | RBracket 446..447 +| | | | | | | | | | RBracket 446..447 "]" +| | | | | | | | Dot 447..448 +| | | | | | | | | Dot 447..448 "." +| | | | | | | | Identifier 448..451 +| | | | | | | | | Identifier 448..451 "in2" +| | | | | | | WhiteSpace 451..452 +| | | | | | | | WhiteSpace 451..452 " " +| | | | | | RAssignConstraintSignal 452..455 +| | | | | | | RAssignConstraintSignal 452..455 "<==" +| | | | | | WhiteSpace 455..456 +| | | | | | | WhiteSpace 455..456 " " +| | | | | | Expression 456..463 +| | | | | | | ArrayQuery 456..463 +| | | | | | | | ExpressionAtom 456..458 +| | | | | | | | | Identifier 456..458 +| | | | | | | | | | Identifier 456..458 "in" +| | | | | | | | LBracket 458..459 +| | | | | | | | | LBracket 458..459 "[" +| | | | | | | | Expression 459..462 +| | | | | | | | | Add 459..462 +| | | | | | | | | | ExpressionAtom 459..460 +| | | | | | | | | | | Identifier 459..460 +| | | | | | | | | | | | Identifier 459..460 "i" +| | | | | | | | | | Add 460..461 +| | | | | | | | | | | Add 460..461 "+" +| | | | | | | | | | ExpressionAtom 461..462 +| | | | | | | | | | | Number 461..462 +| | | | | | | | | | | | Number 461..462 "2" +| | | | | | | | RBracket 462..463 +| | | | | | | | | RBracket 462..463 "]" +| | | | | Semicolon 463..464 +| | | | | | Semicolon 463..464 ";" +| | | | | EndLine 464..466 +| | | | | | EndLine 464..466 "\r\n" +| | | | | EndLine 466..468 +| | | | | | EndLine 466..468 "\r\n" +| | | | | WhiteSpace 468..480 +| | | | | | WhiteSpace 468..480 " " +| | | | RCurly 480..481 +| | | | | RCurly 480..481 "}" | | EndLine 481..483 | | | EndLine 481..483 "\r\n" | | WhiteSpace 483..495 | | | WhiteSpace 483..495 " " -| | Statement 495..517 -| | | AssignStatement 495..516 -| | | | Expression 495..499 -| | | | | ComponentIdentifier 495..498 -| | | | | | Identifier 495..498 -| | | | | | | Identifier 495..498 "out" -| | | | | WhiteSpace 498..499 -| | | | | | WhiteSpace 498..499 " " -| | | | RAssignConstraintSignal 499..502 -| | | | | RAssignConstraintSignal 499..502 "<==" -| | | | WhiteSpace 502..503 -| | | | | WhiteSpace 502..503 " " -| | | | Expression 503..516 -| | | | | ComponentCall 503..516 -| | | | | | ArrayQuery 503..512 -| | | | | | | ExpressionAtom 503..507 -| | | | | | | | Identifier 503..507 -| | | | | | | | | Identifier 503..507 "comp" -| | | | | | | LBracket 507..508 -| | | | | | | | LBracket 507..508 "[" +| | AssignStatement 495..516 +| | | Expression 495..499 +| | | | ExpressionAtom 495..498 +| | | | | Identifier 495..498 +| | | | | | Identifier 495..498 "out" +| | | | WhiteSpace 498..499 +| | | | | WhiteSpace 498..499 " " +| | | RAssignConstraintSignal 499..502 +| | | | RAssignConstraintSignal 499..502 "<==" +| | | WhiteSpace 502..503 +| | | | WhiteSpace 502..503 " " +| | | Expression 503..516 +| | | | ComponentCall 503..516 +| | | | | ArrayQuery 503..512 +| | | | | | ExpressionAtom 503..507 +| | | | | | | Identifier 503..507 +| | | | | | | | Identifier 503..507 "comp" +| | | | | | LBracket 507..508 +| | | | | | | LBracket 507..508 "[" +| | | | | | Expression 508..511 | | | | | | | Sub 508..511 | | | | | | | | ExpressionAtom 508..509 | | | | | | | | | Identifier 508..509 @@ -508,14 +513,14 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | | | ExpressionAtom 510..511 | | | | | | | | | Number 510..511 | | | | | | | | | | Number 510..511 "2" -| | | | | | | RBracket 511..512 -| | | | | | | | RBracket 511..512 "]" -| | | | | | Dot 512..513 -| | | | | | | Dot 512..513 "." -| | | | | | Identifier 513..516 -| | | | | | | Identifier 513..516 "out" -| | | Semicolon 516..517 -| | | | Semicolon 516..517 ";" +| | | | | | RBracket 511..512 +| | | | | | | RBracket 511..512 "]" +| | | | | Dot 512..513 +| | | | | | Dot 512..513 "." +| | | | | Identifier 513..516 +| | | | | | Identifier 513..516 "out" +| | Semicolon 516..517 +| | | Semicolon 516..517 ";" | | WhiteSpace 517..518 | | | WhiteSpace 517..518 " " | | EndLine 518..520 diff --git a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block_comment.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block_comment.circom.snap index dd8199e..87734d1 100644 --- a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block_comment.circom.snap +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__block_comment.circom.snap @@ -1,24 +1,24 @@ ---- -source: crates/syntax/src/syntax.rs -expression: "crate :: view_syntax :: view_ast(& syntax)" ---- - CircomProgram 0..47 -| EndLine 0..2 -| | EndLine 0..2 "\r\n" -| BlockComment 2..25 -| | BlockComment 2..25 "/*\r\ncomment\r\nblocks\r\n*/" -| EndLine 25..27 -| | EndLine 25..27 "\r\n" -| Pragma 27..47 -| | PragmaKw 27..33 -| | | PragmaKw 27..33 "pragma" -| | WhiteSpace 33..34 -| | | WhiteSpace 33..34 " " -| | Circom 34..40 -| | | Circom 34..40 "circom" -| | WhiteSpace 40..41 -| | | WhiteSpace 40..41 " " -| | Version 41..46 -| | | Version 41..46 "2.0.0" -| | Semicolon 46..47 -| | | Semicolon 46..47 ";" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + CircomProgram 0..47 +| EndLine 0..2 +| | EndLine 0..2 "\r\n" +| BlockComment 2..25 +| | BlockComment 2..25 "/*\r\ncomment\r\nblocks\r\n*/" +| EndLine 25..27 +| | EndLine 25..27 "\r\n" +| Pragma 27..47 +| | PragmaKw 27..33 +| | | PragmaKw 27..33 "pragma" +| | WhiteSpace 33..34 +| | | WhiteSpace 33..34 " " +| | Circom 34..40 +| | | Circom 34..40 "circom" +| | WhiteSpace 40..41 +| | | WhiteSpace 40..41 " " +| | Version 41..46 +| | | Version 41..46 "2.0.0" +| | Semicolon 46..47 +| | | Semicolon 46..47 ";" diff --git a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__full_circom_program.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__full_circom_program.circom.snap index dfe9522..4a6a0a1 100644 --- a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__full_circom_program.circom.snap +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__full_circom_program.circom.snap @@ -2,7 +2,7 @@ source: crates/syntax/src/syntax.rs expression: "crate :: view_syntax :: view_ast(& syntax)" --- - CircomProgram 0..2508 + CircomProgram 0..2427 | BlockComment 0..764 | | BlockComment 0..764 "/*\r\n Copyright 2018 0KIMS association.\r\n\r\n This file is part of circom (Zero Knowledge Circuit Compiler).\r\n\r\n circom is a free software: you can redistribute it and/or modify it\r\n under the terms of the GNU General Public License as published by\r\n the Free Software Foundation, either version 3 of the License, or\r\n (at your option) any later version.\r\n\r\n circom is distributed in the hope that it will be useful, but WITHOUT\r\n ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r\n or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\r\n License for more details.\r\n\r\n You should have received a copy of the GNU General Public License\r\n along with circom. If not, see .\r\n*/" | EndLine 764..766 @@ -46,13 +46,13 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | FunctionName 1616..1621 | | | Identifier 1616..1621 | | | | Identifier 1616..1621 "nbits" -| | LParen 1621..1622 -| | | LParen 1621..1622 "(" -| | ParameterList 1622..1623 +| | ParameterList 1621..1624 +| | | LParen 1621..1622 +| | | | LParen 1621..1622 "(" | | | Identifier 1622..1623 | | | | Identifier 1622..1623 "a" -| | RParen 1623..1624 -| | | RParen 1623..1624 ")" +| | | RParen 1623..1624 +| | | | RParen 1623..1624 ")" | | WhiteSpace 1624..1625 | | | WhiteSpace 1624..1625 " " | | Block 1625..1735 @@ -68,7 +68,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1632..1635 "var" | | | | | WhiteSpace 1635..1636 | | | | | | WhiteSpace 1635..1636 " " -| | | | | VarIdentifier 1636..1638 +| | | | | ComplexIdentifier 1636..1638 | | | | | | Identifier 1636..1637 | | | | | | | Identifier 1636..1637 "n" | | | | | | WhiteSpace 1637..1638 @@ -92,7 +92,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1648..1651 "var" | | | | | WhiteSpace 1651..1652 | | | | | | WhiteSpace 1651..1652 " " -| | | | | VarIdentifier 1652..1654 +| | | | | ComplexIdentifier 1652..1654 | | | | | | Identifier 1652..1653 | | | | | | | Identifier 1652..1653 "r" | | | | | | WhiteSpace 1653..1654 @@ -111,7 +111,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | EndLine 1658..1660 "\r\n" | | | | WhiteSpace 1660..1664 | | | | | WhiteSpace 1660..1664 " " -| | | | Statement 1664..1717 +| | | | WhileLoop 1664..1717 | | | | | WhileKw 1664..1669 | | | | | | WhileKw 1664..1669 "while" | | | | | WhiteSpace 1669..1670 @@ -138,69 +138,66 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | RParen 1676..1677 ")" | | | | | WhiteSpace 1677..1678 | | | | | | WhiteSpace 1677..1678 " " -| | | | | Statement 1678..1717 -| | | | | | Block 1678..1717 -| | | | | | | LCurly 1678..1679 -| | | | | | | | LCurly 1678..1679 "{" -| | | | | | | EndLine 1679..1681 -| | | | | | | | EndLine 1679..1681 "\r\n" -| | | | | | | WhiteSpace 1681..1689 -| | | | | | | | WhiteSpace 1681..1689 " " -| | | | | | | StatementList 1689..1716 -| | | | | | | | Statement 1689..1693 -| | | | | | | | | AssignStatement 1689..1692 -| | | | | | | | | | Expression 1689..1690 -| | | | | | | | | | | ComponentIdentifier 1689..1690 -| | | | | | | | | | | | Identifier 1689..1690 -| | | | | | | | | | | | | Identifier 1689..1690 "r" +| | | | | Block 1678..1717 +| | | | | | LCurly 1678..1679 +| | | | | | | LCurly 1678..1679 "{" +| | | | | | EndLine 1679..1681 +| | | | | | | EndLine 1679..1681 "\r\n" +| | | | | | WhiteSpace 1681..1689 +| | | | | | | WhiteSpace 1681..1689 " " +| | | | | | StatementList 1689..1716 +| | | | | | | AssignStatement 1689..1692 +| | | | | | | | Expression 1689..1692 +| | | | | | | | | UnitInc 1689..1692 +| | | | | | | | | | ExpressionAtom 1689..1690 +| | | | | | | | | | | Identifier 1689..1690 +| | | | | | | | | | | | Identifier 1689..1690 "r" | | | | | | | | | | UnitInc 1690..1692 | | | | | | | | | | | UnitInc 1690..1692 "++" -| | | | | | | | | Semicolon 1692..1693 -| | | | | | | | | | Semicolon 1692..1693 ";" -| | | | | | | | EndLine 1693..1695 -| | | | | | | | | EndLine 1693..1695 "\r\n" -| | | | | | | | WhiteSpace 1695..1703 -| | | | | | | | | WhiteSpace 1695..1703 " " -| | | | | | | | Statement 1703..1710 -| | | | | | | | | AssignStatement 1703..1709 -| | | | | | | | | | Expression 1703..1705 -| | | | | | | | | | | ComponentIdentifier 1703..1704 -| | | | | | | | | | | | Identifier 1703..1704 -| | | | | | | | | | | | | Identifier 1703..1704 "n" -| | | | | | | | | | | WhiteSpace 1704..1705 -| | | | | | | | | | | | WhiteSpace 1704..1705 " " -| | | | | | | | | | MulAssign 1705..1707 -| | | | | | | | | | | MulAssign 1705..1707 "*=" -| | | | | | | | | | WhiteSpace 1707..1708 -| | | | | | | | | | | WhiteSpace 1707..1708 " " -| | | | | | | | | | Expression 1708..1709 -| | | | | | | | | | | ExpressionAtom 1708..1709 -| | | | | | | | | | | | Number 1708..1709 -| | | | | | | | | | | | | Number 1708..1709 "2" -| | | | | | | | | Semicolon 1709..1710 -| | | | | | | | | | Semicolon 1709..1710 ";" -| | | | | | | | EndLine 1710..1712 -| | | | | | | | | EndLine 1710..1712 "\r\n" -| | | | | | | | WhiteSpace 1712..1716 -| | | | | | | | | WhiteSpace 1712..1716 " " -| | | | | | | RCurly 1716..1717 -| | | | | | | | RCurly 1716..1717 "}" +| | | | | | | Semicolon 1692..1693 +| | | | | | | | Semicolon 1692..1693 ";" +| | | | | | | EndLine 1693..1695 +| | | | | | | | EndLine 1693..1695 "\r\n" +| | | | | | | WhiteSpace 1695..1703 +| | | | | | | | WhiteSpace 1695..1703 " " +| | | | | | | AssignStatement 1703..1709 +| | | | | | | | Expression 1703..1705 +| | | | | | | | | ExpressionAtom 1703..1704 +| | | | | | | | | | Identifier 1703..1704 +| | | | | | | | | | | Identifier 1703..1704 "n" +| | | | | | | | | WhiteSpace 1704..1705 +| | | | | | | | | | WhiteSpace 1704..1705 " " +| | | | | | | | MulAssign 1705..1707 +| | | | | | | | | MulAssign 1705..1707 "*=" +| | | | | | | | WhiteSpace 1707..1708 +| | | | | | | | | WhiteSpace 1707..1708 " " +| | | | | | | | Expression 1708..1709 +| | | | | | | | | ExpressionAtom 1708..1709 +| | | | | | | | | | Number 1708..1709 +| | | | | | | | | | | Number 1708..1709 "2" +| | | | | | | Semicolon 1709..1710 +| | | | | | | | Semicolon 1709..1710 ";" +| | | | | | | EndLine 1710..1712 +| | | | | | | | EndLine 1710..1712 "\r\n" +| | | | | | | WhiteSpace 1712..1716 +| | | | | | | | WhiteSpace 1712..1716 " " +| | | | | | RCurly 1716..1717 +| | | | | | | RCurly 1716..1717 "}" | | | | EndLine 1717..1719 | | | | | EndLine 1717..1719 "\r\n" | | | | WhiteSpace 1719..1723 | | | | | WhiteSpace 1719..1723 " " -| | | | Statement 1723..1732 -| | | | | ReturnKw 1723..1731 -| | | | | | ReturnKw 1723..1729 -| | | | | | | ReturnKw 1723..1729 "return" -| | | | | | WhiteSpace 1729..1730 -| | | | | | | WhiteSpace 1729..1730 " " -| | | | | | Expression 1730..1731 -| | | | | | | ExpressionAtom 1730..1731 -| | | | | | | | Identifier 1730..1731 -| | | | | | | | | Identifier 1730..1731 "r" -| | | | | Semicolon 1731..1732 -| | | | | | Semicolon 1731..1732 ";" +| | | | ReturnStatement 1723..1731 +| | | | | ReturnKw 1723..1729 +| | | | | | ReturnKw 1723..1729 "return" +| | | | | WhiteSpace 1729..1730 +| | | | | | WhiteSpace 1729..1730 " " +| | | | | Expression 1730..1731 +| | | | | | ExpressionAtom 1730..1731 +| | | | | | | Identifier 1730..1731 +| | | | | | | | Identifier 1730..1731 "r" +| | | | Semicolon 1731..1732 +| | | | | Semicolon 1731..1732 ";" | | | | EndLine 1732..1734 | | | | | EndLine 1732..1734 "\r\n" | | | RCurly 1734..1735 @@ -211,7 +208,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | EndLine 1737..1739 "\r\n" | EndLine 1739..1741 | | EndLine 1739..1741 "\r\n" -| TemplateDef 1741..2508 +| TemplateDef 1741..2425 | | TemplateKw 1741..1749 | | | TemplateKw 1741..1749 "template" | | WhiteSpace 1749..1750 @@ -219,9 +216,9 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | TemplateName 1750..1756 | | | Identifier 1750..1756 | | | | Identifier 1750..1756 "BinSum" -| | LParen 1756..1757 -| | | LParen 1756..1757 "(" -| | ParameterList 1757..1763 +| | ParameterList 1756..1764 +| | | LParen 1756..1757 +| | | | LParen 1756..1757 "(" | | | Identifier 1757..1758 | | | | Identifier 1757..1758 "n" | | | Comma 1758..1759 @@ -230,24 +227,24 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | WhiteSpace 1759..1760 " " | | | Identifier 1760..1763 | | | | Identifier 1760..1763 "ops" -| | RParen 1763..1764 -| | | RParen 1763..1764 ")" +| | | RParen 1763..1764 +| | | | RParen 1763..1764 ")" | | WhiteSpace 1764..1765 | | | WhiteSpace 1764..1765 " " -| | Block 1765..2508 +| | Block 1765..2425 | | | LCurly 1765..1766 | | | | LCurly 1765..1766 "{" | | | EndLine 1766..1768 | | | | EndLine 1766..1768 "\r\n" | | | WhiteSpace 1768..1772 | | | | WhiteSpace 1768..1772 " " -| | | StatementList 1772..2483 +| | | StatementList 1772..2424 | | | | VarDecl 1772..1803 | | | | | VarKw 1772..1775 | | | | | | VarKw 1772..1775 "var" | | | | | WhiteSpace 1775..1776 | | | | | | WhiteSpace 1775..1776 " " -| | | | | VarIdentifier 1776..1781 +| | | | | ComplexIdentifier 1776..1781 | | | | | | Identifier 1776..1780 | | | | | | | Identifier 1776..1780 "nout" | | | | | | WhiteSpace 1780..1781 @@ -261,40 +258,39 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | | ExpressionAtom 1783..1788 | | | | | | | | Identifier 1783..1788 | | | | | | | | | Identifier 1783..1788 "nbits" -| | | | | | | Tuple 1788..1803 -| | | | | | | | LParen 1788..1789 -| | | | | | | | | LParen 1788..1789 "(" -| | | | | | | | Expression 1789..1802 -| | | | | | | | | Mul 1789..1802 -| | | | | | | | | | Tuple 1789..1798 -| | | | | | | | | | | LParen 1789..1790 -| | | | | | | | | | | | LParen 1789..1790 "(" -| | | | | | | | | | | Sub 1790..1797 -| | | | | | | | | | | | Power 1790..1795 -| | | | | | | | | | | | | ExpressionAtom 1790..1791 -| | | | | | | | | | | | | | Number 1790..1791 -| | | | | | | | | | | | | | | Number 1790..1791 "2" -| | | | | | | | | | | | | Power 1791..1793 -| | | | | | | | | | | | | | Power 1791..1793 "**" -| | | | | | | | | | | | | ExpressionAtom 1793..1794 -| | | | | | | | | | | | | | Identifier 1793..1794 -| | | | | | | | | | | | | | | Identifier 1793..1794 "n" -| | | | | | | | | | | | | WhiteSpace 1794..1795 -| | | | | | | | | | | | | | WhiteSpace 1794..1795 " " -| | | | | | | | | | | | Sub 1795..1796 -| | | | | | | | | | | | | Sub 1795..1796 "-" -| | | | | | | | | | | | ExpressionAtom 1796..1797 -| | | | | | | | | | | | | Number 1796..1797 -| | | | | | | | | | | | | | Number 1796..1797 "1" -| | | | | | | | | | | RParen 1797..1798 -| | | | | | | | | | | | RParen 1797..1798 ")" -| | | | | | | | | | Mul 1798..1799 -| | | | | | | | | | | Mul 1798..1799 "*" -| | | | | | | | | | ExpressionAtom 1799..1802 -| | | | | | | | | | | Identifier 1799..1802 -| | | | | | | | | | | | Identifier 1799..1802 "ops" -| | | | | | | | RParen 1802..1803 -| | | | | | | | | RParen 1802..1803 ")" +| | | | | | | LParen 1788..1789 +| | | | | | | | LParen 1788..1789 "(" +| | | | | | | Expression 1789..1802 +| | | | | | | | Mul 1789..1802 +| | | | | | | | | Expression 1789..1798 +| | | | | | | | | | LParen 1789..1790 +| | | | | | | | | | | LParen 1789..1790 "(" +| | | | | | | | | | Sub 1790..1797 +| | | | | | | | | | | Power 1790..1795 +| | | | | | | | | | | | ExpressionAtom 1790..1791 +| | | | | | | | | | | | | Number 1790..1791 +| | | | | | | | | | | | | | Number 1790..1791 "2" +| | | | | | | | | | | | Power 1791..1793 +| | | | | | | | | | | | | Power 1791..1793 "**" +| | | | | | | | | | | | ExpressionAtom 1793..1794 +| | | | | | | | | | | | | Identifier 1793..1794 +| | | | | | | | | | | | | | Identifier 1793..1794 "n" +| | | | | | | | | | | | WhiteSpace 1794..1795 +| | | | | | | | | | | | | WhiteSpace 1794..1795 " " +| | | | | | | | | | | Sub 1795..1796 +| | | | | | | | | | | | Sub 1795..1796 "-" +| | | | | | | | | | | ExpressionAtom 1796..1797 +| | | | | | | | | | | | Number 1796..1797 +| | | | | | | | | | | | | Number 1796..1797 "1" +| | | | | | | | | | RParen 1797..1798 +| | | | | | | | | | | RParen 1797..1798 ")" +| | | | | | | | | Mul 1798..1799 +| | | | | | | | | | Mul 1798..1799 "*" +| | | | | | | | | ExpressionAtom 1799..1802 +| | | | | | | | | | Identifier 1799..1802 +| | | | | | | | | | | Identifier 1799..1802 "ops" +| | | | | | | RParen 1802..1803 +| | | | | | | | RParen 1802..1803 ")" | | | | Semicolon 1803..1804 | | | | | Semicolon 1803..1804 ";" | | | | EndLine 1804..1806 @@ -311,7 +307,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | | InputKw 1817..1822 "input" | | | | | | WhiteSpace 1822..1823 | | | | | | | WhiteSpace 1822..1823 " " -| | | | | SignalIdentifier 1823..1833 +| | | | | ComplexIdentifier 1823..1833 | | | | | | Identifier 1823..1825 | | | | | | | Identifier 1823..1825 "in" | | | | | | LBracket 1825..1826 @@ -346,7 +342,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | | OutputKw 1847..1853 "output" | | | | | | WhiteSpace 1853..1854 | | | | | | | WhiteSpace 1853..1854 " " -| | | | | SignalIdentifier 1854..1863 +| | | | | ComplexIdentifier 1854..1863 | | | | | | Identifier 1854..1857 | | | | | | | Identifier 1854..1857 "out" | | | | | | LBracket 1857..1858 @@ -370,7 +366,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1872..1875 "var" | | | | | WhiteSpace 1875..1876 | | | | | | WhiteSpace 1875..1876 " " -| | | | | VarIdentifier 1876..1880 +| | | | | ComplexIdentifier 1876..1880 | | | | | | Identifier 1876..1879 | | | | | | | Identifier 1876..1879 "lin" | | | | | | WhiteSpace 1879..1880 @@ -394,7 +390,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1890..1893 "var" | | | | | WhiteSpace 1893..1894 | | | | | | WhiteSpace 1893..1894 " " -| | | | | VarIdentifier 1894..1899 +| | | | | ComplexIdentifier 1894..1899 | | | | | | Identifier 1894..1898 | | | | | | | Identifier 1894..1898 "lout" | | | | | | WhiteSpace 1898..1899 @@ -420,7 +416,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1911..1914 "var" | | | | | WhiteSpace 1914..1915 | | | | | | WhiteSpace 1914..1915 " " -| | | | | VarIdentifier 1915..1916 +| | | | | ComplexIdentifier 1915..1916 | | | | | | Identifier 1915..1916 | | | | | | | Identifier 1915..1916 "k" | | | | Semicolon 1916..1917 @@ -434,7 +430,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1923..1926 "var" | | | | | WhiteSpace 1926..1927 | | | | | | WhiteSpace 1926..1927 " " -| | | | | VarIdentifier 1927..1928 +| | | | | ComplexIdentifier 1927..1928 | | | | | | Identifier 1927..1928 | | | | | | | Identifier 1927..1928 "j" | | | | Semicolon 1928..1929 @@ -450,7 +446,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | VarKw 1937..1940 "var" | | | | | WhiteSpace 1940..1941 | | | | | | WhiteSpace 1940..1941 " " -| | | | | VarIdentifier 1941..1943 +| | | | | ComplexIdentifier 1941..1943 | | | | | | Identifier 1941..1943 | | | | | | | Identifier 1941..1943 "e2" | | | | Semicolon 1943..1944 @@ -461,573 +457,556 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | EndLine 1946..1948 "\r\n" | | | | WhiteSpace 1948..1952 | | | | | WhiteSpace 1948..1952 " " -| | | | Statement 1952..1959 -| | | | | AssignStatement 1952..1958 -| | | | | | Expression 1952..1955 -| | | | | | | ComponentIdentifier 1952..1954 -| | | | | | | | Identifier 1952..1954 -| | | | | | | | | Identifier 1952..1954 "e2" -| | | | | | | WhiteSpace 1954..1955 -| | | | | | | | WhiteSpace 1954..1955 " " -| | | | | | Assign 1955..1956 -| | | | | | | Assign 1955..1956 "=" -| | | | | | WhiteSpace 1956..1957 -| | | | | | | WhiteSpace 1956..1957 " " -| | | | | | Expression 1957..1958 -| | | | | | | ExpressionAtom 1957..1958 -| | | | | | | | Number 1957..1958 -| | | | | | | | | Number 1957..1958 "1" -| | | | | Semicolon 1958..1959 -| | | | | | Semicolon 1958..1959 ";" +| | | | AssignStatement 1952..1958 +| | | | | Expression 1952..1955 +| | | | | | ExpressionAtom 1952..1954 +| | | | | | | Identifier 1952..1954 +| | | | | | | | Identifier 1952..1954 "e2" +| | | | | | WhiteSpace 1954..1955 +| | | | | | | WhiteSpace 1954..1955 " " +| | | | | Assign 1955..1956 +| | | | | | Assign 1955..1956 "=" +| | | | | WhiteSpace 1956..1957 +| | | | | | WhiteSpace 1956..1957 " " +| | | | | Expression 1957..1958 +| | | | | | ExpressionAtom 1957..1958 +| | | | | | | Number 1957..1958 +| | | | | | | | Number 1957..1958 "1" +| | | | Semicolon 1958..1959 +| | | | | Semicolon 1958..1959 ";" | | | | EndLine 1959..1961 | | | | | EndLine 1959..1961 "\r\n" | | | | WhiteSpace 1961..1965 | | | | | WhiteSpace 1961..1965 " " -| | | | Statement 1965..2481 -| | | | | ForLoop 1965..2481 -| | | | | | ForKw 1965..1968 -| | | | | | | ForKw 1965..1968 "for" -| | | | | | WhiteSpace 1968..1969 -| | | | | | | WhiteSpace 1968..1969 " " -| | | | | | LParen 1969..1970 -| | | | | | | LParen 1969..1970 "(" -| | | | | | AssignStatement 1970..1973 -| | | | | | | Expression 1970..1971 -| | | | | | | | ComponentIdentifier 1970..1971 -| | | | | | | | | Identifier 1970..1971 -| | | | | | | | | | Identifier 1970..1971 "k" -| | | | | | | Assign 1971..1972 -| | | | | | | | Assign 1971..1972 "=" -| | | | | | | Expression 1972..1973 -| | | | | | | | ExpressionAtom 1972..1973 -| | | | | | | | | Number 1972..1973 -| | | | | | | | | | Number 1972..1973 "0" -| | | | | | Semicolon 1973..1974 -| | | | | | | Semicolon 1973..1974 ";" -| | | | | | WhiteSpace 1974..1975 -| | | | | | | WhiteSpace 1974..1975 " " -| | | | | | Expression 1975..1978 -| | | | | | | LessThan 1975..1978 -| | | | | | | | ExpressionAtom 1975..1976 -| | | | | | | | | Identifier 1975..1976 -| | | | | | | | | | Identifier 1975..1976 "k" -| | | | | | | | LessThan 1976..1977 -| | | | | | | | | LessThan 1976..1977 "<" -| | | | | | | | ExpressionAtom 1977..1978 -| | | | | | | | | Identifier 1977..1978 -| | | | | | | | | | Identifier 1977..1978 "n" -| | | | | | Semicolon 1978..1979 -| | | | | | | Semicolon 1978..1979 ";" -| | | | | | WhiteSpace 1979..1980 -| | | | | | | WhiteSpace 1979..1980 " " -| | | | | | AssignStatement 1980..1983 -| | | | | | | Expression 1980..1981 -| | | | | | | | ComponentIdentifier 1980..1981 +| | | | ForLoop 1965..2422 +| | | | | ForKw 1965..1968 +| | | | | | ForKw 1965..1968 "for" +| | | | | WhiteSpace 1968..1969 +| | | | | | WhiteSpace 1968..1969 " " +| | | | | LParen 1969..1970 +| | | | | | LParen 1969..1970 "(" +| | | | | AssignStatement 1970..1973 +| | | | | | Expression 1970..1971 +| | | | | | | ExpressionAtom 1970..1971 +| | | | | | | | Identifier 1970..1971 +| | | | | | | | | Identifier 1970..1971 "k" +| | | | | | Assign 1971..1972 +| | | | | | | Assign 1971..1972 "=" +| | | | | | Expression 1972..1973 +| | | | | | | ExpressionAtom 1972..1973 +| | | | | | | | Number 1972..1973 +| | | | | | | | | Number 1972..1973 "0" +| | | | | Semicolon 1973..1974 +| | | | | | Semicolon 1973..1974 ";" +| | | | | WhiteSpace 1974..1975 +| | | | | | WhiteSpace 1974..1975 " " +| | | | | Expression 1975..1978 +| | | | | | LessThan 1975..1978 +| | | | | | | ExpressionAtom 1975..1976 +| | | | | | | | Identifier 1975..1976 +| | | | | | | | | Identifier 1975..1976 "k" +| | | | | | | LessThan 1976..1977 +| | | | | | | | LessThan 1976..1977 "<" +| | | | | | | ExpressionAtom 1977..1978 +| | | | | | | | Identifier 1977..1978 +| | | | | | | | | Identifier 1977..1978 "n" +| | | | | Semicolon 1978..1979 +| | | | | | Semicolon 1978..1979 ";" +| | | | | WhiteSpace 1979..1980 +| | | | | | WhiteSpace 1979..1980 " " +| | | | | AssignStatement 1980..1983 +| | | | | | Expression 1980..1983 +| | | | | | | UnitInc 1980..1983 +| | | | | | | | ExpressionAtom 1980..1981 | | | | | | | | | Identifier 1980..1981 | | | | | | | | | | Identifier 1980..1981 "k" -| | | | | | | UnitInc 1981..1983 -| | | | | | | | UnitInc 1981..1983 "++" -| | | | | | RParen 1983..1984 -| | | | | | | RParen 1983..1984 ")" -| | | | | | WhiteSpace 1984..1985 -| | | | | | | WhiteSpace 1984..1985 " " -| | | | | | Statement 1985..2481 -| | | | | | | Block 1985..2481 -| | | | | | | | LCurly 1985..1986 -| | | | | | | | | LCurly 1985..1986 "{" -| | | | | | | | EndLine 1986..1988 -| | | | | | | | | EndLine 1986..1988 "\r\n" -| | | | | | | | WhiteSpace 1988..1996 -| | | | | | | | | WhiteSpace 1988..1996 " " -| | | | | | | | StatementList 1996..2480 -| | | | | | | | | Statement 1996..2065 -| | | | | | | | | | ForLoop 1996..2065 -| | | | | | | | | | | ForKw 1996..1999 -| | | | | | | | | | | | ForKw 1996..1999 "for" -| | | | | | | | | | | WhiteSpace 1999..2000 -| | | | | | | | | | | | WhiteSpace 1999..2000 " " -| | | | | | | | | | | LParen 2000..2001 -| | | | | | | | | | | | LParen 2000..2001 "(" -| | | | | | | | | | | AssignStatement 2001..2004 -| | | | | | | | | | | | Expression 2001..2002 -| | | | | | | | | | | | | ComponentIdentifier 2001..2002 -| | | | | | | | | | | | | | Identifier 2001..2002 -| | | | | | | | | | | | | | | Identifier 2001..2002 "j" -| | | | | | | | | | | | Assign 2002..2003 -| | | | | | | | | | | | | Assign 2002..2003 "=" -| | | | | | | | | | | | Expression 2003..2004 -| | | | | | | | | | | | | ExpressionAtom 2003..2004 -| | | | | | | | | | | | | | Number 2003..2004 -| | | | | | | | | | | | | | | Number 2003..2004 "0" -| | | | | | | | | | | Semicolon 2004..2005 -| | | | | | | | | | | | Semicolon 2004..2005 ";" -| | | | | | | | | | | WhiteSpace 2005..2006 -| | | | | | | | | | | | WhiteSpace 2005..2006 " " -| | | | | | | | | | | Expression 2006..2011 -| | | | | | | | | | | | LessThan 2006..2011 -| | | | | | | | | | | | | ExpressionAtom 2006..2007 -| | | | | | | | | | | | | | Identifier 2006..2007 -| | | | | | | | | | | | | | | Identifier 2006..2007 "j" -| | | | | | | | | | | | | LessThan 2007..2008 -| | | | | | | | | | | | | | LessThan 2007..2008 "<" -| | | | | | | | | | | | | ExpressionAtom 2008..2011 -| | | | | | | | | | | | | | Identifier 2008..2011 -| | | | | | | | | | | | | | | Identifier 2008..2011 "ops" -| | | | | | | | | | | Semicolon 2011..2012 -| | | | | | | | | | | | Semicolon 2011..2012 ";" -| | | | | | | | | | | WhiteSpace 2012..2013 -| | | | | | | | | | | | WhiteSpace 2012..2013 " " -| | | | | | | | | | | AssignStatement 2013..2016 -| | | | | | | | | | | | Expression 2013..2014 -| | | | | | | | | | | | | ComponentIdentifier 2013..2014 -| | | | | | | | | | | | | | Identifier 2013..2014 -| | | | | | | | | | | | | | | Identifier 2013..2014 "j" -| | | | | | | | | | | | UnitInc 2014..2016 -| | | | | | | | | | | | | UnitInc 2014..2016 "++" -| | | | | | | | | | | RParen 2016..2017 -| | | | | | | | | | | | RParen 2016..2017 ")" -| | | | | | | | | | | WhiteSpace 2017..2018 -| | | | | | | | | | | | WhiteSpace 2017..2018 " " -| | | | | | | | | | | Statement 2018..2065 -| | | | | | | | | | | | Block 2018..2065 -| | | | | | | | | | | | | LCurly 2018..2019 -| | | | | | | | | | | | | | LCurly 2018..2019 "{" -| | | | | | | | | | | | | EndLine 2019..2021 -| | | | | | | | | | | | | | EndLine 2019..2021 "\r\n" -| | | | | | | | | | | | | WhiteSpace 2021..2033 -| | | | | | | | | | | | | | WhiteSpace 2021..2033 " " -| | | | | | | | | | | | | StatementList 2033..2064 -| | | | | | | | | | | | | | Statement 2033..2054 -| | | | | | | | | | | | | | | AssignStatement 2033..2053 -| | | | | | | | | | | | | | | | Expression 2033..2037 -| | | | | | | | | | | | | | | | | ComponentIdentifier 2033..2036 -| | | | | | | | | | | | | | | | | | Identifier 2033..2036 -| | | | | | | | | | | | | | | | | | | Identifier 2033..2036 "lin" -| | | | | | | | | | | | | | | | | WhiteSpace 2036..2037 -| | | | | | | | | | | | | | | | | | WhiteSpace 2036..2037 " " -| | | | | | | | | | | | | | | | AddAssign 2037..2039 -| | | | | | | | | | | | | | | | | AddAssign 2037..2039 "+=" -| | | | | | | | | | | | | | | | WhiteSpace 2039..2040 -| | | | | | | | | | | | | | | | | WhiteSpace 2039..2040 " " -| | | | | | | | | | | | | | | | Expression 2040..2053 -| | | | | | | | | | | | | | | | | Mul 2040..2053 -| | | | | | | | | | | | | | | | | | ArrayQuery 2040..2048 -| | | | | | | | | | | | | | | | | | | ArrayQuery 2040..2045 -| | | | | | | | | | | | | | | | | | | | ExpressionAtom 2040..2042 -| | | | | | | | | | | | | | | | | | | | | Identifier 2040..2042 -| | | | | | | | | | | | | | | | | | | | | | Identifier 2040..2042 "in" -| | | | | | | | | | | | | | | | | | | | LBracket 2042..2043 -| | | | | | | | | | | | | | | | | | | | | LBracket 2042..2043 "[" -| | | | | | | | | | | | | | | | | | | | ExpressionAtom 2043..2044 -| | | | | | | | | | | | | | | | | | | | | Identifier 2043..2044 -| | | | | | | | | | | | | | | | | | | | | | Identifier 2043..2044 "j" -| | | | | | | | | | | | | | | | | | | | RBracket 2044..2045 -| | | | | | | | | | | | | | | | | | | | | RBracket 2044..2045 "]" -| | | | | | | | | | | | | | | | | | | LBracket 2045..2046 -| | | | | | | | | | | | | | | | | | | | LBracket 2045..2046 "[" -| | | | | | | | | | | | | | | | | | | ExpressionAtom 2046..2047 -| | | | | | | | | | | | | | | | | | | | Identifier 2046..2047 -| | | | | | | | | | | | | | | | | | | | | Identifier 2046..2047 "k" -| | | | | | | | | | | | | | | | | | | RBracket 2047..2048 -| | | | | | | | | | | | | | | | | | | | RBracket 2047..2048 "]" -| | | | | | | | | | | | | | | | | | WhiteSpace 2048..2049 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2048..2049 " " -| | | | | | | | | | | | | | | | | | Mul 2049..2050 -| | | | | | | | | | | | | | | | | | | Mul 2049..2050 "*" -| | | | | | | | | | | | | | | | | | WhiteSpace 2050..2051 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2050..2051 " " -| | | | | | | | | | | | | | | | | | ExpressionAtom 2051..2053 -| | | | | | | | | | | | | | | | | | | Identifier 2051..2053 -| | | | | | | | | | | | | | | | | | | | Identifier 2051..2053 "e2" -| | | | | | | | | | | | | | | Semicolon 2053..2054 -| | | | | | | | | | | | | | | | Semicolon 2053..2054 ";" -| | | | | | | | | | | | | | EndLine 2054..2056 -| | | | | | | | | | | | | | | EndLine 2054..2056 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2056..2064 -| | | | | | | | | | | | | | | WhiteSpace 2056..2064 " " -| | | | | | | | | | | | | RCurly 2064..2065 -| | | | | | | | | | | | | | RCurly 2064..2065 "}" -| | | | | | | | | EndLine 2065..2067 -| | | | | | | | | | EndLine 2065..2067 "\r\n" -| | | | | | | | | WhiteSpace 2067..2075 -| | | | | | | | | | WhiteSpace 2067..2075 " " -| | | | | | | | | Statement 2075..2088 -| | | | | | | | | | AssignStatement 2075..2087 -| | | | | | | | | | | Expression 2075..2078 -| | | | | | | | | | | | ComponentIdentifier 2075..2077 -| | | | | | | | | | | | | Identifier 2075..2077 -| | | | | | | | | | | | | | Identifier 2075..2077 "e2" -| | | | | | | | | | | | WhiteSpace 2077..2078 -| | | | | | | | | | | | | WhiteSpace 2077..2078 " " -| | | | | | | | | | | Assign 2078..2079 -| | | | | | | | | | | | Assign 2078..2079 "=" -| | | | | | | | | | | WhiteSpace 2079..2080 -| | | | | | | | | | | | WhiteSpace 2079..2080 " " -| | | | | | | | | | | Expression 2080..2087 -| | | | | | | | | | | | Add 2080..2087 -| | | | | | | | | | | | | ExpressionAtom 2080..2082 -| | | | | | | | | | | | | | Identifier 2080..2082 -| | | | | | | | | | | | | | | Identifier 2080..2082 "e2" -| | | | | | | | | | | | | WhiteSpace 2082..2083 -| | | | | | | | | | | | | | WhiteSpace 2082..2083 " " -| | | | | | | | | | | | | Add 2083..2084 -| | | | | | | | | | | | | | Add 2083..2084 "+" -| | | | | | | | | | | | | WhiteSpace 2084..2085 -| | | | | | | | | | | | | | WhiteSpace 2084..2085 " " -| | | | | | | | | | | | | ExpressionAtom 2085..2087 -| | | | | | | | | | | | | | Identifier 2085..2087 -| | | | | | | | | | | | | | | Identifier 2085..2087 "e2" -| | | | | | | | | | Semicolon 2087..2088 -| | | | | | | | | | | Semicolon 2087..2088 ";" -| | | | | | | | | EndLine 2088..2090 -| | | | | | | | | | EndLine 2088..2090 "\r\n" -| | | | | | | | | WhiteSpace 2090..2094 -| | | | | | | | | | WhiteSpace 2090..2094 " " -| | | | | | | | | EndLine 2094..2096 -| | | | | | | | | | EndLine 2094..2096 "\r\n" -| | | | | | | | | WhiteSpace 2096..2104 -| | | | | | | | | | WhiteSpace 2096..2104 " " -| | | | | | | | | Statement 2104..2111 -| | | | | | | | | | AssignStatement 2104..2110 -| | | | | | | | | | | Expression 2104..2107 -| | | | | | | | | | | | ComponentIdentifier 2104..2106 -| | | | | | | | | | | | | Identifier 2104..2106 -| | | | | | | | | | | | | | Identifier 2104..2106 "e2" -| | | | | | | | | | | | WhiteSpace 2106..2107 -| | | | | | | | | | | | | WhiteSpace 2106..2107 " " -| | | | | | | | | | | Assign 2107..2108 -| | | | | | | | | | | | Assign 2107..2108 "=" -| | | | | | | | | | | WhiteSpace 2108..2109 -| | | | | | | | | | | | WhiteSpace 2108..2109 " " -| | | | | | | | | | | Expression 2109..2110 -| | | | | | | | | | | | ExpressionAtom 2109..2110 -| | | | | | | | | | | | | Number 2109..2110 -| | | | | | | | | | | | | | Number 2109..2110 "1" -| | | | | | | | | | Semicolon 2110..2111 -| | | | | | | | | | | Semicolon 2110..2111 ";" -| | | | | | | | | EndLine 2111..2113 -| | | | | | | | | | EndLine 2111..2113 "\r\n" -| | | | | | | | | WhiteSpace 2113..2121 -| | | | | | | | | | WhiteSpace 2113..2121 " " -| | | | | | | | | Statement 2121..2411 -| | | | | | | | | | ForLoop 2121..2411 -| | | | | | | | | | | ForKw 2121..2124 -| | | | | | | | | | | | ForKw 2121..2124 "for" -| | | | | | | | | | | WhiteSpace 2124..2125 -| | | | | | | | | | | | WhiteSpace 2124..2125 " " -| | | | | | | | | | | LParen 2125..2126 -| | | | | | | | | | | | LParen 2125..2126 "(" -| | | | | | | | | | | AssignStatement 2126..2129 -| | | | | | | | | | | | Expression 2126..2127 -| | | | | | | | | | | | | ComponentIdentifier 2126..2127 -| | | | | | | | | | | | | | Identifier 2126..2127 -| | | | | | | | | | | | | | | Identifier 2126..2127 "k" -| | | | | | | | | | | | Assign 2127..2128 -| | | | | | | | | | | | | Assign 2127..2128 "=" -| | | | | | | | | | | | Expression 2128..2129 -| | | | | | | | | | | | | ExpressionAtom 2128..2129 -| | | | | | | | | | | | | | Number 2128..2129 -| | | | | | | | | | | | | | | Number 2128..2129 "0" -| | | | | | | | | | | Semicolon 2129..2130 -| | | | | | | | | | | | Semicolon 2129..2130 ";" -| | | | | | | | | | | WhiteSpace 2130..2131 -| | | | | | | | | | | | WhiteSpace 2130..2131 " " -| | | | | | | | | | | Expression 2131..2137 -| | | | | | | | | | | | LessThan 2131..2137 -| | | | | | | | | | | | | ExpressionAtom 2131..2132 -| | | | | | | | | | | | | | Identifier 2131..2132 -| | | | | | | | | | | | | | | Identifier 2131..2132 "k" -| | | | | | | | | | | | | LessThan 2132..2133 -| | | | | | | | | | | | | | LessThan 2132..2133 "<" -| | | | | | | | | | | | | ExpressionAtom 2133..2137 -| | | | | | | | | | | | | | Identifier 2133..2137 -| | | | | | | | | | | | | | | Identifier 2133..2137 "nout" -| | | | | | | | | | | Semicolon 2137..2138 -| | | | | | | | | | | | Semicolon 2137..2138 ";" -| | | | | | | | | | | WhiteSpace 2138..2139 -| | | | | | | | | | | | WhiteSpace 2138..2139 " " -| | | | | | | | | | | AssignStatement 2139..2142 -| | | | | | | | | | | | Expression 2139..2140 -| | | | | | | | | | | | | ComponentIdentifier 2139..2140 -| | | | | | | | | | | | | | Identifier 2139..2140 -| | | | | | | | | | | | | | | Identifier 2139..2140 "k" -| | | | | | | | | | | | UnitInc 2140..2142 -| | | | | | | | | | | | | UnitInc 2140..2142 "++" -| | | | | | | | | | | RParen 2142..2143 -| | | | | | | | | | | | RParen 2142..2143 ")" -| | | | | | | | | | | WhiteSpace 2143..2144 -| | | | | | | | | | | | WhiteSpace 2143..2144 " " -| | | | | | | | | | | Statement 2144..2411 -| | | | | | | | | | | | Block 2144..2411 -| | | | | | | | | | | | | LCurly 2144..2145 -| | | | | | | | | | | | | | LCurly 2144..2145 "{" -| | | | | | | | | | | | | EndLine 2145..2147 -| | | | | | | | | | | | | | EndLine 2145..2147 "\r\n" -| | | | | | | | | | | | | WhiteSpace 2147..2159 -| | | | | | | | | | | | | | WhiteSpace 2147..2159 " " -| | | | | | | | | | | | | StatementList 2159..2410 -| | | | | | | | | | | | | | Statement 2159..2185 -| | | | | | | | | | | | | | | AssignStatement 2159..2184 -| | | | | | | | | | | | | | | | Expression 2159..2166 -| | | | | | | | | | | | | | | | | ComponentIdentifier 2159..2162 -| | | | | | | | | | | | | | | | | | Identifier 2159..2162 -| | | | | | | | | | | | | | | | | | | Identifier 2159..2162 "out" -| | | | | | | | | | | | | | | | | LBracket 2162..2163 -| | | | | | | | | | | | | | | | | | LBracket 2162..2163 "[" -| | | | | | | | | | | | | | | | | Expression 2163..2164 -| | | | | | | | | | | | | | | | | | ExpressionAtom 2163..2164 -| | | | | | | | | | | | | | | | | | | Identifier 2163..2164 -| | | | | | | | | | | | | | | | | | | | Identifier 2163..2164 "k" -| | | | | | | | | | | | | | | | | RBracket 2164..2165 -| | | | | | | | | | | | | | | | | | RBracket 2164..2165 "]" -| | | | | | | | | | | | | | | | | WhiteSpace 2165..2166 -| | | | | | | | | | | | | | | | | | WhiteSpace 2165..2166 " " -| | | | | | | | | | | | | | | | RAssignSignal 2166..2169 -| | | | | | | | | | | | | | | | | RAssignSignal 2166..2169 "<--" -| | | | | | | | | | | | | | | | WhiteSpace 2169..2170 -| | | | | | | | | | | | | | | | | WhiteSpace 2169..2170 " " -| | | | | | | | | | | | | | | | Expression 2170..2184 -| | | | | | | | | | | | | | | | | BitAnd 2170..2184 -| | | | | | | | | | | | | | | | | | Tuple 2170..2180 -| | | | | | | | | | | | | | | | | | | LParen 2170..2171 -| | | | | | | | | | | | | | | | | | | | LParen 2170..2171 "(" -| | | | | | | | | | | | | | | | | | | ShiftR 2171..2179 -| | | | | | | | | | | | | | | | | | | | ExpressionAtom 2171..2174 -| | | | | | | | | | | | | | | | | | | | | Identifier 2171..2174 -| | | | | | | | | | | | | | | | | | | | | | Identifier 2171..2174 "lin" -| | | | | | | | | | | | | | | | | | | | WhiteSpace 2174..2175 -| | | | | | | | | | | | | | | | | | | | | WhiteSpace 2174..2175 " " -| | | | | | | | | | | | | | | | | | | | ShiftR 2175..2177 -| | | | | | | | | | | | | | | | | | | | | ShiftR 2175..2177 ">>" -| | | | | | | | | | | | | | | | | | | | WhiteSpace 2177..2178 -| | | | | | | | | | | | | | | | | | | | | WhiteSpace 2177..2178 " " -| | | | | | | | | | | | | | | | | | | | ExpressionAtom 2178..2179 -| | | | | | | | | | | | | | | | | | | | | Identifier 2178..2179 -| | | | | | | | | | | | | | | | | | | | | | Identifier 2178..2179 "k" -| | | | | | | | | | | | | | | | | | | RParen 2179..2180 -| | | | | | | | | | | | | | | | | | | | RParen 2179..2180 ")" -| | | | | | | | | | | | | | | | | | WhiteSpace 2180..2181 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2180..2181 " " -| | | | | | | | | | | | | | | | | | BitAnd 2181..2182 -| | | | | | | | | | | | | | | | | | | BitAnd 2181..2182 "&" -| | | | | | | | | | | | | | | | | | WhiteSpace 2182..2183 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2182..2183 " " -| | | | | | | | | | | | | | | | | | ExpressionAtom 2183..2184 -| | | | | | | | | | | | | | | | | | | Number 2183..2184 -| | | | | | | | | | | | | | | | | | | | Number 2183..2184 "1" -| | | | | | | | | | | | | | | Semicolon 2184..2185 -| | | | | | | | | | | | | | | | Semicolon 2184..2185 ";" -| | | | | | | | | | | | | | EndLine 2185..2187 -| | | | | | | | | | | | | | | EndLine 2185..2187 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2187..2191 -| | | | | | | | | | | | | | | WhiteSpace 2187..2191 " " -| | | | | | | | | | | | | | EndLine 2191..2193 -| | | | | | | | | | | | | | | EndLine 2191..2193 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2193..2205 -| | | | | | | | | | | | | | | WhiteSpace 2193..2205 " " -| | | | | | | | | | | | | | CommentLine 2205..2228 -| | | | | | | | | | | | | | | CommentLine 2205..2228 "// Ensure out is binary" -| | | | | | | | | | | | | | EndLine 2228..2230 -| | | | | | | | | | | | | | | EndLine 2228..2230 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2230..2242 -| | | | | | | | | | | | | | | WhiteSpace 2230..2242 " " -| | | | | | | | | | | | | | Statement 2242..2277 -| | | | | | | | | | | | | | | Error 2242..2249 -| | | | | | | | | | | | | | | | Expression 2242..2249 -| | | | | | | | | | | | | | | | | ComponentIdentifier 2242..2245 -| | | | | | | | | | | | | | | | | | Identifier 2242..2245 -| | | | | | | | | | | | | | | | | | | Identifier 2242..2245 "out" -| | | | | | | | | | | | | | | | | LBracket 2245..2246 -| | | | | | | | | | | | | | | | | | LBracket 2245..2246 "[" -| | | | | | | | | | | | | | | | | Expression 2246..2247 -| | | | | | | | | | | | | | | | | | ExpressionAtom 2246..2247 -| | | | | | | | | | | | | | | | | | | Identifier 2246..2247 -| | | | | | | | | | | | | | | | | | | | Identifier 2246..2247 "k" -| | | | | | | | | | | | | | | | | RBracket 2247..2248 -| | | | | | | | | | | | | | | | | | RBracket 2247..2248 "]" -| | | | | | | | | | | | | | | | | WhiteSpace 2248..2249 -| | | | | | | | | | | | | | | | | | WhiteSpace 2248..2249 " " -| | | | | | | | | | | | | | | Error 2249..2277 -| | | | | | | | | | | | | | | | Error 2249..2277 -| | | | | | | | | | | | | | | | | Error 2249..2277 "expect Semicolon but got Mul" -| | | | | | | | | | | | | | Statement 2277..2310 -| | | | | | | | | | | | | | | Error 2277..2279 -| | | | | | | | | | | | | | | | Expression 2277..2278 -| | | | | | | | | | | | | | | | | Error 2277..2278 -| | | | | | | | | | | | | | | | | | Mul 2277..2278 -| | | | | | | | | | | | | | | | | | | Mul 2277..2278 "*" -| | | | | | | | | | | | | | | | WhiteSpace 2278..2279 -| | | | | | | | | | | | | | | | | WhiteSpace 2278..2279 " " -| | | | | | | | | | | | | | | Error 2279..2310 -| | | | | | | | | | | | | | | | Error 2279..2310 -| | | | | | | | | | | | | | | | | Error 2279..2310 "expect Semicolon but got LParen" -| | | | | | | | | | | | | | Statement 2310..2329 -| | | | | | | | | | | | | | | Error 2310..2328 -| | | | | | | | | | | | | | | | Expression 2310..2328 -| | | | | | | | | | | | | | | | | EqualSignal 2310..2328 -| | | | | | | | | | | | | | | | | | Tuple 2310..2322 -| | | | | | | | | | | | | | | | | | | LParen 2310..2311 -| | | | | | | | | | | | | | | | | | | | LParen 2310..2311 "(" -| | | | | | | | | | | | | | | | | | | Sub 2311..2321 -| | | | | | | | | | | | | | | | | | | | ArrayQuery 2311..2317 -| | | | | | | | | | | | | | | | | | | | | ExpressionAtom 2311..2314 -| | | | | | | | | | | | | | | | | | | | | | Identifier 2311..2314 -| | | | | | | | | | | | | | | | | | | | | | | Identifier 2311..2314 "out" -| | | | | | | | | | | | | | | | | | | | | LBracket 2314..2315 -| | | | | | | | | | | | | | | | | | | | | | LBracket 2314..2315 "[" -| | | | | | | | | | | | | | | | | | | | | ExpressionAtom 2315..2316 -| | | | | | | | | | | | | | | | | | | | | | Identifier 2315..2316 -| | | | | | | | | | | | | | | | | | | | | | | Identifier 2315..2316 "k" -| | | | | | | | | | | | | | | | | | | | | RBracket 2316..2317 -| | | | | | | | | | | | | | | | | | | | | | RBracket 2316..2317 "]" -| | | | | | | | | | | | | | | | | | | | WhiteSpace 2317..2318 -| | | | | | | | | | | | | | | | | | | | | WhiteSpace 2317..2318 " " -| | | | | | | | | | | | | | | | | | | | Sub 2318..2319 -| | | | | | | | | | | | | | | | | | | | | Sub 2318..2319 "-" -| | | | | | | | | | | | | | | | | | | | WhiteSpace 2319..2320 -| | | | | | | | | | | | | | | | | | | | | WhiteSpace 2319..2320 " " -| | | | | | | | | | | | | | | | | | | | ExpressionAtom 2320..2321 -| | | | | | | | | | | | | | | | | | | | | Number 2320..2321 -| | | | | | | | | | | | | | | | | | | | | | Number 2320..2321 "1" -| | | | | | | | | | | | | | | | | | | RParen 2321..2322 -| | | | | | | | | | | | | | | | | | | | RParen 2321..2322 ")" -| | | | | | | | | | | | | | | | | | WhiteSpace 2322..2323 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2322..2323 " " -| | | | | | | | | | | | | | | | | | EqualSignal 2323..2326 -| | | | | | | | | | | | | | | | | | | EqualSignal 2323..2326 "===" -| | | | | | | | | | | | | | | | | | WhiteSpace 2326..2327 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2326..2327 " " -| | | | | | | | | | | | | | | | | | ExpressionAtom 2327..2328 -| | | | | | | | | | | | | | | | | | | Number 2327..2328 -| | | | | | | | | | | | | | | | | | | | Number 2327..2328 "0" -| | | | | | | | | | | | | | | Semicolon 2328..2329 -| | | | | | | | | | | | | | | | Semicolon 2328..2329 ";" -| | | | | | | | | | | | | | EndLine 2329..2331 -| | | | | | | | | | | | | | | EndLine 2329..2331 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2331..2335 -| | | | | | | | | | | | | | | WhiteSpace 2331..2335 " " -| | | | | | | | | | | | | | EndLine 2335..2337 -| | | | | | | | | | | | | | | EndLine 2335..2337 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2337..2349 -| | | | | | | | | | | | | | | WhiteSpace 2337..2349 " " -| | | | | | | | | | | | | | Statement 2349..2369 -| | | | | | | | | | | | | | | AssignStatement 2349..2368 -| | | | | | | | | | | | | | | | Expression 2349..2354 -| | | | | | | | | | | | | | | | | ComponentIdentifier 2349..2353 -| | | | | | | | | | | | | | | | | | Identifier 2349..2353 -| | | | | | | | | | | | | | | | | | | Identifier 2349..2353 "lout" -| | | | | | | | | | | | | | | | | WhiteSpace 2353..2354 -| | | | | | | | | | | | | | | | | | WhiteSpace 2353..2354 " " -| | | | | | | | | | | | | | | | AddAssign 2354..2356 -| | | | | | | | | | | | | | | | | AddAssign 2354..2356 "+=" -| | | | | | | | | | | | | | | | WhiteSpace 2356..2357 -| | | | | | | | | | | | | | | | | WhiteSpace 2356..2357 " " -| | | | | | | | | | | | | | | | Expression 2357..2368 -| | | | | | | | | | | | | | | | | Mul 2357..2368 -| | | | | | | | | | | | | | | | | | ArrayQuery 2357..2363 -| | | | | | | | | | | | | | | | | | | ExpressionAtom 2357..2360 -| | | | | | | | | | | | | | | | | | | | Identifier 2357..2360 -| | | | | | | | | | | | | | | | | | | | | Identifier 2357..2360 "out" -| | | | | | | | | | | | | | | | | | | LBracket 2360..2361 -| | | | | | | | | | | | | | | | | | | | LBracket 2360..2361 "[" -| | | | | | | | | | | | | | | | | | | ExpressionAtom 2361..2362 -| | | | | | | | | | | | | | | | | | | | Identifier 2361..2362 -| | | | | | | | | | | | | | | | | | | | | Identifier 2361..2362 "k" -| | | | | | | | | | | | | | | | | | | RBracket 2362..2363 -| | | | | | | | | | | | | | | | | | | | RBracket 2362..2363 "]" -| | | | | | | | | | | | | | | | | | WhiteSpace 2363..2364 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2363..2364 " " -| | | | | | | | | | | | | | | | | | Mul 2364..2365 -| | | | | | | | | | | | | | | | | | | Mul 2364..2365 "*" -| | | | | | | | | | | | | | | | | | WhiteSpace 2365..2366 -| | | | | | | | | | | | | | | | | | | WhiteSpace 2365..2366 " " -| | | | | | | | | | | | | | | | | | ExpressionAtom 2366..2368 -| | | | | | | | | | | | | | | | | | | Identifier 2366..2368 -| | | | | | | | | | | | | | | | | | | | Identifier 2366..2368 "e2" -| | | | | | | | | | | | | | | Semicolon 2368..2369 -| | | | | | | | | | | | | | | | Semicolon 2368..2369 ";" -| | | | | | | | | | | | | | EndLine 2369..2371 -| | | | | | | | | | | | | | | EndLine 2369..2371 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2371..2375 -| | | | | | | | | | | | | | | WhiteSpace 2371..2375 " " -| | | | | | | | | | | | | | EndLine 2375..2377 -| | | | | | | | | | | | | | | EndLine 2375..2377 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2377..2389 -| | | | | | | | | | | | | | | WhiteSpace 2377..2389 " " -| | | | | | | | | | | | | | Statement 2389..2400 -| | | | | | | | | | | | | | | AssignStatement 2389..2399 -| | | | | | | | | | | | | | | | Expression 2389..2392 -| | | | | | | | | | | | | | | | | ComponentIdentifier 2389..2391 -| | | | | | | | | | | | | | | | | | Identifier 2389..2391 -| | | | | | | | | | | | | | | | | | | Identifier 2389..2391 "e2" -| | | | | | | | | | | | | | | | | WhiteSpace 2391..2392 -| | | | | | | | | | | | | | | | | | WhiteSpace 2391..2392 " " -| | | | | | | | | | | | | | | | Assign 2392..2393 -| | | | | | | | | | | | | | | | | Assign 2392..2393 "=" -| | | | | | | | | | | | | | | | WhiteSpace 2393..2394 -| | | | | | | | | | | | | | | | | WhiteSpace 2393..2394 " " -| | | | | | | | | | | | | | | | Expression 2394..2399 -| | | | | | | | | | | | | | | | | Add 2394..2399 -| | | | | | | | | | | | | | | | | | ExpressionAtom 2394..2396 -| | | | | | | | | | | | | | | | | | | Identifier 2394..2396 -| | | | | | | | | | | | | | | | | | | | Identifier 2394..2396 "e2" -| | | | | | | | | | | | | | | | | | Add 2396..2397 -| | | | | | | | | | | | | | | | | | | Add 2396..2397 "+" -| | | | | | | | | | | | | | | | | | ExpressionAtom 2397..2399 -| | | | | | | | | | | | | | | | | | | Identifier 2397..2399 -| | | | | | | | | | | | | | | | | | | | Identifier 2397..2399 "e2" -| | | | | | | | | | | | | | | Semicolon 2399..2400 -| | | | | | | | | | | | | | | | Semicolon 2399..2400 ";" -| | | | | | | | | | | | | | EndLine 2400..2402 -| | | | | | | | | | | | | | | EndLine 2400..2402 "\r\n" -| | | | | | | | | | | | | | WhiteSpace 2402..2410 -| | | | | | | | | | | | | | | WhiteSpace 2402..2410 " " -| | | | | | | | | | | | | RCurly 2410..2411 -| | | | | | | | | | | | | | RCurly 2410..2411 "}" -| | | | | | | | | EndLine 2411..2413 -| | | | | | | | | | EndLine 2411..2413 "\r\n" -| | | | | | | | | WhiteSpace 2413..2417 -| | | | | | | | | | WhiteSpace 2413..2417 " " -| | | | | | | | | EndLine 2417..2419 -| | | | | | | | | | EndLine 2417..2419 "\r\n" -| | | | | | | | | WhiteSpace 2419..2427 -| | | | | | | | | | WhiteSpace 2419..2427 " " -| | | | | | | | | CommentLine 2427..2445 -| | | | | | | | | | CommentLine 2427..2445 "// Ensure the sum;" -| | | | | | | | | EndLine 2445..2447 -| | | | | | | | | | EndLine 2445..2447 "\r\n" -| | | | | | | | | WhiteSpace 2447..2451 -| | | | | | | | | | WhiteSpace 2447..2451 " " -| | | | | | | | | EndLine 2451..2453 -| | | | | | | | | | EndLine 2451..2453 "\r\n" -| | | | | | | | | WhiteSpace 2453..2461 -| | | | | | | | | | WhiteSpace 2453..2461 " " -| | | | | | | | | Statement 2461..2474 -| | | | | | | | | | AssignStatement 2461..2473 -| | | | | | | | | | | Expression 2461..2465 -| | | | | | | | | | | | ComponentIdentifier 2461..2464 -| | | | | | | | | | | | | Identifier 2461..2464 -| | | | | | | | | | | | | | Identifier 2461..2464 "lin" -| | | | | | | | | | | | WhiteSpace 2464..2465 -| | | | | | | | | | | | | WhiteSpace 2464..2465 " " -| | | | | | | | | | | EqualSignal 2465..2468 -| | | | | | | | | | | | EqualSignal 2465..2468 "===" -| | | | | | | | | | | WhiteSpace 2468..2469 -| | | | | | | | | | | | WhiteSpace 2468..2469 " " -| | | | | | | | | | | Expression 2469..2473 -| | | | | | | | | | | | ExpressionAtom 2469..2473 -| | | | | | | | | | | | | Identifier 2469..2473 -| | | | | | | | | | | | | | Identifier 2469..2473 "lout" -| | | | | | | | | | Semicolon 2473..2474 -| | | | | | | | | | | Semicolon 2473..2474 ";" -| | | | | | | | | EndLine 2474..2476 -| | | | | | | | | | EndLine 2474..2476 "\r\n" -| | | | | | | | | WhiteSpace 2476..2480 -| | | | | | | | | | WhiteSpace 2476..2480 " " -| | | | | | | | RCurly 2480..2481 -| | | | | | | | | RCurly 2480..2481 "}" -| | | | EndLine 2481..2483 -| | | | | EndLine 2481..2483 "\r\n" -| | | Error 2483..2508 -| | | | Error 2483..2508 -| | | | | Error 2483..2508 "expect RCurly but got EOF" +| | | | | | | | UnitInc 1981..1983 +| | | | | | | | | UnitInc 1981..1983 "++" +| | | | | RParen 1983..1984 +| | | | | | RParen 1983..1984 ")" +| | | | | WhiteSpace 1984..1985 +| | | | | | WhiteSpace 1984..1985 " " +| | | | | Block 1985..2422 +| | | | | | LCurly 1985..1986 +| | | | | | | LCurly 1985..1986 "{" +| | | | | | EndLine 1986..1988 +| | | | | | | EndLine 1986..1988 "\r\n" +| | | | | | WhiteSpace 1988..1996 +| | | | | | | WhiteSpace 1988..1996 " " +| | | | | | StatementList 1996..2421 +| | | | | | | ForLoop 1996..2065 +| | | | | | | | ForKw 1996..1999 +| | | | | | | | | ForKw 1996..1999 "for" +| | | | | | | | WhiteSpace 1999..2000 +| | | | | | | | | WhiteSpace 1999..2000 " " +| | | | | | | | LParen 2000..2001 +| | | | | | | | | LParen 2000..2001 "(" +| | | | | | | | AssignStatement 2001..2004 +| | | | | | | | | Expression 2001..2002 +| | | | | | | | | | ExpressionAtom 2001..2002 +| | | | | | | | | | | Identifier 2001..2002 +| | | | | | | | | | | | Identifier 2001..2002 "j" +| | | | | | | | | Assign 2002..2003 +| | | | | | | | | | Assign 2002..2003 "=" +| | | | | | | | | Expression 2003..2004 +| | | | | | | | | | ExpressionAtom 2003..2004 +| | | | | | | | | | | Number 2003..2004 +| | | | | | | | | | | | Number 2003..2004 "0" +| | | | | | | | Semicolon 2004..2005 +| | | | | | | | | Semicolon 2004..2005 ";" +| | | | | | | | WhiteSpace 2005..2006 +| | | | | | | | | WhiteSpace 2005..2006 " " +| | | | | | | | Expression 2006..2011 +| | | | | | | | | LessThan 2006..2011 +| | | | | | | | | | ExpressionAtom 2006..2007 +| | | | | | | | | | | Identifier 2006..2007 +| | | | | | | | | | | | Identifier 2006..2007 "j" +| | | | | | | | | | LessThan 2007..2008 +| | | | | | | | | | | LessThan 2007..2008 "<" +| | | | | | | | | | ExpressionAtom 2008..2011 +| | | | | | | | | | | Identifier 2008..2011 +| | | | | | | | | | | | Identifier 2008..2011 "ops" +| | | | | | | | Semicolon 2011..2012 +| | | | | | | | | Semicolon 2011..2012 ";" +| | | | | | | | WhiteSpace 2012..2013 +| | | | | | | | | WhiteSpace 2012..2013 " " +| | | | | | | | AssignStatement 2013..2016 +| | | | | | | | | Expression 2013..2016 +| | | | | | | | | | UnitInc 2013..2016 +| | | | | | | | | | | ExpressionAtom 2013..2014 +| | | | | | | | | | | | Identifier 2013..2014 +| | | | | | | | | | | | | Identifier 2013..2014 "j" +| | | | | | | | | | | UnitInc 2014..2016 +| | | | | | | | | | | | UnitInc 2014..2016 "++" +| | | | | | | | RParen 2016..2017 +| | | | | | | | | RParen 2016..2017 ")" +| | | | | | | | WhiteSpace 2017..2018 +| | | | | | | | | WhiteSpace 2017..2018 " " +| | | | | | | | Block 2018..2065 +| | | | | | | | | LCurly 2018..2019 +| | | | | | | | | | LCurly 2018..2019 "{" +| | | | | | | | | EndLine 2019..2021 +| | | | | | | | | | EndLine 2019..2021 "\r\n" +| | | | | | | | | WhiteSpace 2021..2033 +| | | | | | | | | | WhiteSpace 2021..2033 " " +| | | | | | | | | StatementList 2033..2064 +| | | | | | | | | | AssignStatement 2033..2053 +| | | | | | | | | | | Expression 2033..2037 +| | | | | | | | | | | | ExpressionAtom 2033..2036 +| | | | | | | | | | | | | Identifier 2033..2036 +| | | | | | | | | | | | | | Identifier 2033..2036 "lin" +| | | | | | | | | | | | WhiteSpace 2036..2037 +| | | | | | | | | | | | | WhiteSpace 2036..2037 " " +| | | | | | | | | | | AddAssign 2037..2039 +| | | | | | | | | | | | AddAssign 2037..2039 "+=" +| | | | | | | | | | | WhiteSpace 2039..2040 +| | | | | | | | | | | | WhiteSpace 2039..2040 " " +| | | | | | | | | | | Expression 2040..2053 +| | | | | | | | | | | | Mul 2040..2053 +| | | | | | | | | | | | | ArrayQuery 2040..2048 +| | | | | | | | | | | | | | ArrayQuery 2040..2045 +| | | | | | | | | | | | | | | ExpressionAtom 2040..2042 +| | | | | | | | | | | | | | | | Identifier 2040..2042 +| | | | | | | | | | | | | | | | | Identifier 2040..2042 "in" +| | | | | | | | | | | | | | | LBracket 2042..2043 +| | | | | | | | | | | | | | | | LBracket 2042..2043 "[" +| | | | | | | | | | | | | | | Expression 2043..2044 +| | | | | | | | | | | | | | | | ExpressionAtom 2043..2044 +| | | | | | | | | | | | | | | | | Identifier 2043..2044 +| | | | | | | | | | | | | | | | | | Identifier 2043..2044 "j" +| | | | | | | | | | | | | | | RBracket 2044..2045 +| | | | | | | | | | | | | | | | RBracket 2044..2045 "]" +| | | | | | | | | | | | | | LBracket 2045..2046 +| | | | | | | | | | | | | | | LBracket 2045..2046 "[" +| | | | | | | | | | | | | | Expression 2046..2047 +| | | | | | | | | | | | | | | ExpressionAtom 2046..2047 +| | | | | | | | | | | | | | | | Identifier 2046..2047 +| | | | | | | | | | | | | | | | | Identifier 2046..2047 "k" +| | | | | | | | | | | | | | RBracket 2047..2048 +| | | | | | | | | | | | | | | RBracket 2047..2048 "]" +| | | | | | | | | | | | | WhiteSpace 2048..2049 +| | | | | | | | | | | | | | WhiteSpace 2048..2049 " " +| | | | | | | | | | | | | Mul 2049..2050 +| | | | | | | | | | | | | | Mul 2049..2050 "*" +| | | | | | | | | | | | | WhiteSpace 2050..2051 +| | | | | | | | | | | | | | WhiteSpace 2050..2051 " " +| | | | | | | | | | | | | ExpressionAtom 2051..2053 +| | | | | | | | | | | | | | Identifier 2051..2053 +| | | | | | | | | | | | | | | Identifier 2051..2053 "e2" +| | | | | | | | | | Semicolon 2053..2054 +| | | | | | | | | | | Semicolon 2053..2054 ";" +| | | | | | | | | | EndLine 2054..2056 +| | | | | | | | | | | EndLine 2054..2056 "\r\n" +| | | | | | | | | | WhiteSpace 2056..2064 +| | | | | | | | | | | WhiteSpace 2056..2064 " " +| | | | | | | | | RCurly 2064..2065 +| | | | | | | | | | RCurly 2064..2065 "}" +| | | | | | | EndLine 2065..2067 +| | | | | | | | EndLine 2065..2067 "\r\n" +| | | | | | | WhiteSpace 2067..2075 +| | | | | | | | WhiteSpace 2067..2075 " " +| | | | | | | AssignStatement 2075..2087 +| | | | | | | | Expression 2075..2078 +| | | | | | | | | ExpressionAtom 2075..2077 +| | | | | | | | | | Identifier 2075..2077 +| | | | | | | | | | | Identifier 2075..2077 "e2" +| | | | | | | | | WhiteSpace 2077..2078 +| | | | | | | | | | WhiteSpace 2077..2078 " " +| | | | | | | | Assign 2078..2079 +| | | | | | | | | Assign 2078..2079 "=" +| | | | | | | | WhiteSpace 2079..2080 +| | | | | | | | | WhiteSpace 2079..2080 " " +| | | | | | | | Expression 2080..2087 +| | | | | | | | | Add 2080..2087 +| | | | | | | | | | ExpressionAtom 2080..2082 +| | | | | | | | | | | Identifier 2080..2082 +| | | | | | | | | | | | Identifier 2080..2082 "e2" +| | | | | | | | | | WhiteSpace 2082..2083 +| | | | | | | | | | | WhiteSpace 2082..2083 " " +| | | | | | | | | | Add 2083..2084 +| | | | | | | | | | | Add 2083..2084 "+" +| | | | | | | | | | WhiteSpace 2084..2085 +| | | | | | | | | | | WhiteSpace 2084..2085 " " +| | | | | | | | | | ExpressionAtom 2085..2087 +| | | | | | | | | | | Identifier 2085..2087 +| | | | | | | | | | | | Identifier 2085..2087 "e2" +| | | | | | | Semicolon 2087..2088 +| | | | | | | | Semicolon 2087..2088 ";" +| | | | | | | EndLine 2088..2090 +| | | | | | | | EndLine 2088..2090 "\r\n" +| | | | | | | WhiteSpace 2090..2094 +| | | | | | | | WhiteSpace 2090..2094 " " +| | | | | | | EndLine 2094..2096 +| | | | | | | | EndLine 2094..2096 "\r\n" +| | | | | | | WhiteSpace 2096..2104 +| | | | | | | | WhiteSpace 2096..2104 " " +| | | | | | | AssignStatement 2104..2110 +| | | | | | | | Expression 2104..2107 +| | | | | | | | | ExpressionAtom 2104..2106 +| | | | | | | | | | Identifier 2104..2106 +| | | | | | | | | | | Identifier 2104..2106 "e2" +| | | | | | | | | WhiteSpace 2106..2107 +| | | | | | | | | | WhiteSpace 2106..2107 " " +| | | | | | | | Assign 2107..2108 +| | | | | | | | | Assign 2107..2108 "=" +| | | | | | | | WhiteSpace 2108..2109 +| | | | | | | | | WhiteSpace 2108..2109 " " +| | | | | | | | Expression 2109..2110 +| | | | | | | | | ExpressionAtom 2109..2110 +| | | | | | | | | | Number 2109..2110 +| | | | | | | | | | | Number 2109..2110 "1" +| | | | | | | Semicolon 2110..2111 +| | | | | | | | Semicolon 2110..2111 ";" +| | | | | | | EndLine 2111..2113 +| | | | | | | | EndLine 2111..2113 "\r\n" +| | | | | | | WhiteSpace 2113..2121 +| | | | | | | | WhiteSpace 2113..2121 " " +| | | | | | | ForLoop 2121..2352 +| | | | | | | | ForKw 2121..2124 +| | | | | | | | | ForKw 2121..2124 "for" +| | | | | | | | WhiteSpace 2124..2125 +| | | | | | | | | WhiteSpace 2124..2125 " " +| | | | | | | | LParen 2125..2126 +| | | | | | | | | LParen 2125..2126 "(" +| | | | | | | | AssignStatement 2126..2129 +| | | | | | | | | Expression 2126..2127 +| | | | | | | | | | ExpressionAtom 2126..2127 +| | | | | | | | | | | Identifier 2126..2127 +| | | | | | | | | | | | Identifier 2126..2127 "k" +| | | | | | | | | Assign 2127..2128 +| | | | | | | | | | Assign 2127..2128 "=" +| | | | | | | | | Expression 2128..2129 +| | | | | | | | | | ExpressionAtom 2128..2129 +| | | | | | | | | | | Number 2128..2129 +| | | | | | | | | | | | Number 2128..2129 "0" +| | | | | | | | Semicolon 2129..2130 +| | | | | | | | | Semicolon 2129..2130 ";" +| | | | | | | | WhiteSpace 2130..2131 +| | | | | | | | | WhiteSpace 2130..2131 " " +| | | | | | | | Expression 2131..2137 +| | | | | | | | | LessThan 2131..2137 +| | | | | | | | | | ExpressionAtom 2131..2132 +| | | | | | | | | | | Identifier 2131..2132 +| | | | | | | | | | | | Identifier 2131..2132 "k" +| | | | | | | | | | LessThan 2132..2133 +| | | | | | | | | | | LessThan 2132..2133 "<" +| | | | | | | | | | ExpressionAtom 2133..2137 +| | | | | | | | | | | Identifier 2133..2137 +| | | | | | | | | | | | Identifier 2133..2137 "nout" +| | | | | | | | Semicolon 2137..2138 +| | | | | | | | | Semicolon 2137..2138 ";" +| | | | | | | | WhiteSpace 2138..2139 +| | | | | | | | | WhiteSpace 2138..2139 " " +| | | | | | | | AssignStatement 2139..2142 +| | | | | | | | | Expression 2139..2142 +| | | | | | | | | | UnitInc 2139..2142 +| | | | | | | | | | | ExpressionAtom 2139..2140 +| | | | | | | | | | | | Identifier 2139..2140 +| | | | | | | | | | | | | Identifier 2139..2140 "k" +| | | | | | | | | | | UnitInc 2140..2142 +| | | | | | | | | | | | UnitInc 2140..2142 "++" +| | | | | | | | RParen 2142..2143 +| | | | | | | | | RParen 2142..2143 ")" +| | | | | | | | WhiteSpace 2143..2144 +| | | | | | | | | WhiteSpace 2143..2144 " " +| | | | | | | | Block 2144..2352 +| | | | | | | | | LCurly 2144..2145 +| | | | | | | | | | LCurly 2144..2145 "{" +| | | | | | | | | EndLine 2145..2147 +| | | | | | | | | | EndLine 2145..2147 "\r\n" +| | | | | | | | | WhiteSpace 2147..2159 +| | | | | | | | | | WhiteSpace 2147..2159 " " +| | | | | | | | | StatementList 2159..2351 +| | | | | | | | | | AssignStatement 2159..2184 +| | | | | | | | | | | Expression 2159..2166 +| | | | | | | | | | | | ArrayQuery 2159..2165 +| | | | | | | | | | | | | ExpressionAtom 2159..2162 +| | | | | | | | | | | | | | Identifier 2159..2162 +| | | | | | | | | | | | | | | Identifier 2159..2162 "out" +| | | | | | | | | | | | | LBracket 2162..2163 +| | | | | | | | | | | | | | LBracket 2162..2163 "[" +| | | | | | | | | | | | | Expression 2163..2164 +| | | | | | | | | | | | | | ExpressionAtom 2163..2164 +| | | | | | | | | | | | | | | Identifier 2163..2164 +| | | | | | | | | | | | | | | | Identifier 2163..2164 "k" +| | | | | | | | | | | | | RBracket 2164..2165 +| | | | | | | | | | | | | | RBracket 2164..2165 "]" +| | | | | | | | | | | | WhiteSpace 2165..2166 +| | | | | | | | | | | | | WhiteSpace 2165..2166 " " +| | | | | | | | | | | RAssignSignal 2166..2169 +| | | | | | | | | | | | RAssignSignal 2166..2169 "<--" +| | | | | | | | | | | WhiteSpace 2169..2170 +| | | | | | | | | | | | WhiteSpace 2169..2170 " " +| | | | | | | | | | | Expression 2170..2184 +| | | | | | | | | | | | BitAnd 2170..2184 +| | | | | | | | | | | | | Expression 2170..2180 +| | | | | | | | | | | | | | LParen 2170..2171 +| | | | | | | | | | | | | | | LParen 2170..2171 "(" +| | | | | | | | | | | | | | ShiftR 2171..2179 +| | | | | | | | | | | | | | | ExpressionAtom 2171..2174 +| | | | | | | | | | | | | | | | Identifier 2171..2174 +| | | | | | | | | | | | | | | | | Identifier 2171..2174 "lin" +| | | | | | | | | | | | | | | WhiteSpace 2174..2175 +| | | | | | | | | | | | | | | | WhiteSpace 2174..2175 " " +| | | | | | | | | | | | | | | ShiftR 2175..2177 +| | | | | | | | | | | | | | | | ShiftR 2175..2177 ">>" +| | | | | | | | | | | | | | | WhiteSpace 2177..2178 +| | | | | | | | | | | | | | | | WhiteSpace 2177..2178 " " +| | | | | | | | | | | | | | | ExpressionAtom 2178..2179 +| | | | | | | | | | | | | | | | Identifier 2178..2179 +| | | | | | | | | | | | | | | | | Identifier 2178..2179 "k" +| | | | | | | | | | | | | | RParen 2179..2180 +| | | | | | | | | | | | | | | RParen 2179..2180 ")" +| | | | | | | | | | | | | WhiteSpace 2180..2181 +| | | | | | | | | | | | | | WhiteSpace 2180..2181 " " +| | | | | | | | | | | | | BitAnd 2181..2182 +| | | | | | | | | | | | | | BitAnd 2181..2182 "&" +| | | | | | | | | | | | | WhiteSpace 2182..2183 +| | | | | | | | | | | | | | WhiteSpace 2182..2183 " " +| | | | | | | | | | | | | ExpressionAtom 2183..2184 +| | | | | | | | | | | | | | Number 2183..2184 +| | | | | | | | | | | | | | | Number 2183..2184 "1" +| | | | | | | | | | Semicolon 2184..2185 +| | | | | | | | | | | Semicolon 2184..2185 ";" +| | | | | | | | | | EndLine 2185..2187 +| | | | | | | | | | | EndLine 2185..2187 "\r\n" +| | | | | | | | | | WhiteSpace 2187..2191 +| | | | | | | | | | | WhiteSpace 2187..2191 " " +| | | | | | | | | | EndLine 2191..2193 +| | | | | | | | | | | EndLine 2191..2193 "\r\n" +| | | | | | | | | | WhiteSpace 2193..2205 +| | | | | | | | | | | WhiteSpace 2193..2205 " " +| | | | | | | | | | CommentLine 2205..2228 +| | | | | | | | | | | CommentLine 2205..2228 "// Ensure out is binary" +| | | | | | | | | | EndLine 2228..2230 +| | | | | | | | | | | EndLine 2228..2230 "\r\n" +| | | | | | | | | | WhiteSpace 2230..2242 +| | | | | | | | | | | WhiteSpace 2230..2242 " " +| | | | | | | | | | AssignStatement 2242..2269 +| | | | | | | | | | | Expression 2242..2264 +| | | | | | | | | | | | Mul 2242..2264 +| | | | | | | | | | | | | ArrayQuery 2242..2248 +| | | | | | | | | | | | | | ExpressionAtom 2242..2245 +| | | | | | | | | | | | | | | Identifier 2242..2245 +| | | | | | | | | | | | | | | | Identifier 2242..2245 "out" +| | | | | | | | | | | | | | LBracket 2245..2246 +| | | | | | | | | | | | | | | LBracket 2245..2246 "[" +| | | | | | | | | | | | | | Expression 2246..2247 +| | | | | | | | | | | | | | | ExpressionAtom 2246..2247 +| | | | | | | | | | | | | | | | Identifier 2246..2247 +| | | | | | | | | | | | | | | | | Identifier 2246..2247 "k" +| | | | | | | | | | | | | | RBracket 2247..2248 +| | | | | | | | | | | | | | | RBracket 2247..2248 "]" +| | | | | | | | | | | | | WhiteSpace 2248..2249 +| | | | | | | | | | | | | | WhiteSpace 2248..2249 " " +| | | | | | | | | | | | | Mul 2249..2250 +| | | | | | | | | | | | | | Mul 2249..2250 "*" +| | | | | | | | | | | | | WhiteSpace 2250..2251 +| | | | | | | | | | | | | | WhiteSpace 2250..2251 " " +| | | | | | | | | | | | | Expression 2251..2263 +| | | | | | | | | | | | | | LParen 2251..2252 +| | | | | | | | | | | | | | | LParen 2251..2252 "(" +| | | | | | | | | | | | | | Sub 2252..2262 +| | | | | | | | | | | | | | | ArrayQuery 2252..2258 +| | | | | | | | | | | | | | | | ExpressionAtom 2252..2255 +| | | | | | | | | | | | | | | | | Identifier 2252..2255 +| | | | | | | | | | | | | | | | | | Identifier 2252..2255 "out" +| | | | | | | | | | | | | | | | LBracket 2255..2256 +| | | | | | | | | | | | | | | | | LBracket 2255..2256 "[" +| | | | | | | | | | | | | | | | Expression 2256..2257 +| | | | | | | | | | | | | | | | | ExpressionAtom 2256..2257 +| | | | | | | | | | | | | | | | | | Identifier 2256..2257 +| | | | | | | | | | | | | | | | | | | Identifier 2256..2257 "k" +| | | | | | | | | | | | | | | | RBracket 2257..2258 +| | | | | | | | | | | | | | | | | RBracket 2257..2258 "]" +| | | | | | | | | | | | | | | WhiteSpace 2258..2259 +| | | | | | | | | | | | | | | | WhiteSpace 2258..2259 " " +| | | | | | | | | | | | | | | Sub 2259..2260 +| | | | | | | | | | | | | | | | Sub 2259..2260 "-" +| | | | | | | | | | | | | | | WhiteSpace 2260..2261 +| | | | | | | | | | | | | | | | WhiteSpace 2260..2261 " " +| | | | | | | | | | | | | | | ExpressionAtom 2261..2262 +| | | | | | | | | | | | | | | | Number 2261..2262 +| | | | | | | | | | | | | | | | | Number 2261..2262 "1" +| | | | | | | | | | | | | | RParen 2262..2263 +| | | | | | | | | | | | | | | RParen 2262..2263 ")" +| | | | | | | | | | | | | WhiteSpace 2263..2264 +| | | | | | | | | | | | | | WhiteSpace 2263..2264 " " +| | | | | | | | | | | EqualSignal 2264..2267 +| | | | | | | | | | | | EqualSignal 2264..2267 "===" +| | | | | | | | | | | WhiteSpace 2267..2268 +| | | | | | | | | | | | WhiteSpace 2267..2268 " " +| | | | | | | | | | | Expression 2268..2269 +| | | | | | | | | | | | ExpressionAtom 2268..2269 +| | | | | | | | | | | | | Number 2268..2269 +| | | | | | | | | | | | | | Number 2268..2269 "0" +| | | | | | | | | | Semicolon 2269..2270 +| | | | | | | | | | | Semicolon 2269..2270 ";" +| | | | | | | | | | EndLine 2270..2272 +| | | | | | | | | | | EndLine 2270..2272 "\r\n" +| | | | | | | | | | WhiteSpace 2272..2276 +| | | | | | | | | | | WhiteSpace 2272..2276 " " +| | | | | | | | | | EndLine 2276..2278 +| | | | | | | | | | | EndLine 2276..2278 "\r\n" +| | | | | | | | | | WhiteSpace 2278..2290 +| | | | | | | | | | | WhiteSpace 2278..2290 " " +| | | | | | | | | | AssignStatement 2290..2309 +| | | | | | | | | | | Expression 2290..2295 +| | | | | | | | | | | | ExpressionAtom 2290..2294 +| | | | | | | | | | | | | Identifier 2290..2294 +| | | | | | | | | | | | | | Identifier 2290..2294 "lout" +| | | | | | | | | | | | WhiteSpace 2294..2295 +| | | | | | | | | | | | | WhiteSpace 2294..2295 " " +| | | | | | | | | | | AddAssign 2295..2297 +| | | | | | | | | | | | AddAssign 2295..2297 "+=" +| | | | | | | | | | | WhiteSpace 2297..2298 +| | | | | | | | | | | | WhiteSpace 2297..2298 " " +| | | | | | | | | | | Expression 2298..2309 +| | | | | | | | | | | | Mul 2298..2309 +| | | | | | | | | | | | | ArrayQuery 2298..2304 +| | | | | | | | | | | | | | ExpressionAtom 2298..2301 +| | | | | | | | | | | | | | | Identifier 2298..2301 +| | | | | | | | | | | | | | | | Identifier 2298..2301 "out" +| | | | | | | | | | | | | | LBracket 2301..2302 +| | | | | | | | | | | | | | | LBracket 2301..2302 "[" +| | | | | | | | | | | | | | Expression 2302..2303 +| | | | | | | | | | | | | | | ExpressionAtom 2302..2303 +| | | | | | | | | | | | | | | | Identifier 2302..2303 +| | | | | | | | | | | | | | | | | Identifier 2302..2303 "k" +| | | | | | | | | | | | | | RBracket 2303..2304 +| | | | | | | | | | | | | | | RBracket 2303..2304 "]" +| | | | | | | | | | | | | WhiteSpace 2304..2305 +| | | | | | | | | | | | | | WhiteSpace 2304..2305 " " +| | | | | | | | | | | | | Mul 2305..2306 +| | | | | | | | | | | | | | Mul 2305..2306 "*" +| | | | | | | | | | | | | WhiteSpace 2306..2307 +| | | | | | | | | | | | | | WhiteSpace 2306..2307 " " +| | | | | | | | | | | | | ExpressionAtom 2307..2309 +| | | | | | | | | | | | | | Identifier 2307..2309 +| | | | | | | | | | | | | | | Identifier 2307..2309 "e2" +| | | | | | | | | | Semicolon 2309..2310 +| | | | | | | | | | | Semicolon 2309..2310 ";" +| | | | | | | | | | EndLine 2310..2312 +| | | | | | | | | | | EndLine 2310..2312 "\r\n" +| | | | | | | | | | WhiteSpace 2312..2316 +| | | | | | | | | | | WhiteSpace 2312..2316 " " +| | | | | | | | | | EndLine 2316..2318 +| | | | | | | | | | | EndLine 2316..2318 "\r\n" +| | | | | | | | | | WhiteSpace 2318..2330 +| | | | | | | | | | | WhiteSpace 2318..2330 " " +| | | | | | | | | | AssignStatement 2330..2340 +| | | | | | | | | | | Expression 2330..2333 +| | | | | | | | | | | | ExpressionAtom 2330..2332 +| | | | | | | | | | | | | Identifier 2330..2332 +| | | | | | | | | | | | | | Identifier 2330..2332 "e2" +| | | | | | | | | | | | WhiteSpace 2332..2333 +| | | | | | | | | | | | | WhiteSpace 2332..2333 " " +| | | | | | | | | | | Assign 2333..2334 +| | | | | | | | | | | | Assign 2333..2334 "=" +| | | | | | | | | | | WhiteSpace 2334..2335 +| | | | | | | | | | | | WhiteSpace 2334..2335 " " +| | | | | | | | | | | Expression 2335..2340 +| | | | | | | | | | | | Add 2335..2340 +| | | | | | | | | | | | | ExpressionAtom 2335..2337 +| | | | | | | | | | | | | | Identifier 2335..2337 +| | | | | | | | | | | | | | | Identifier 2335..2337 "e2" +| | | | | | | | | | | | | Add 2337..2338 +| | | | | | | | | | | | | | Add 2337..2338 "+" +| | | | | | | | | | | | | ExpressionAtom 2338..2340 +| | | | | | | | | | | | | | Identifier 2338..2340 +| | | | | | | | | | | | | | | Identifier 2338..2340 "e2" +| | | | | | | | | | Semicolon 2340..2341 +| | | | | | | | | | | Semicolon 2340..2341 ";" +| | | | | | | | | | EndLine 2341..2343 +| | | | | | | | | | | EndLine 2341..2343 "\r\n" +| | | | | | | | | | WhiteSpace 2343..2351 +| | | | | | | | | | | WhiteSpace 2343..2351 " " +| | | | | | | | | RCurly 2351..2352 +| | | | | | | | | | RCurly 2351..2352 "}" +| | | | | | | EndLine 2352..2354 +| | | | | | | | EndLine 2352..2354 "\r\n" +| | | | | | | WhiteSpace 2354..2358 +| | | | | | | | WhiteSpace 2354..2358 " " +| | | | | | | EndLine 2358..2360 +| | | | | | | | EndLine 2358..2360 "\r\n" +| | | | | | | WhiteSpace 2360..2368 +| | | | | | | | WhiteSpace 2360..2368 " " +| | | | | | | CommentLine 2368..2386 +| | | | | | | | CommentLine 2368..2386 "// Ensure the sum;" +| | | | | | | EndLine 2386..2388 +| | | | | | | | EndLine 2386..2388 "\r\n" +| | | | | | | WhiteSpace 2388..2392 +| | | | | | | | WhiteSpace 2388..2392 " " +| | | | | | | EndLine 2392..2394 +| | | | | | | | EndLine 2392..2394 "\r\n" +| | | | | | | WhiteSpace 2394..2402 +| | | | | | | | WhiteSpace 2394..2402 " " +| | | | | | | AssignStatement 2402..2414 +| | | | | | | | Expression 2402..2406 +| | | | | | | | | ExpressionAtom 2402..2405 +| | | | | | | | | | Identifier 2402..2405 +| | | | | | | | | | | Identifier 2402..2405 "lin" +| | | | | | | | | WhiteSpace 2405..2406 +| | | | | | | | | | WhiteSpace 2405..2406 " " +| | | | | | | | EqualSignal 2406..2409 +| | | | | | | | | EqualSignal 2406..2409 "===" +| | | | | | | | WhiteSpace 2409..2410 +| | | | | | | | | WhiteSpace 2409..2410 " " +| | | | | | | | Expression 2410..2414 +| | | | | | | | | ExpressionAtom 2410..2414 +| | | | | | | | | | Identifier 2410..2414 +| | | | | | | | | | | Identifier 2410..2414 "lout" +| | | | | | | Semicolon 2414..2415 +| | | | | | | | Semicolon 2414..2415 ";" +| | | | | | | EndLine 2415..2417 +| | | | | | | | EndLine 2415..2417 "\r\n" +| | | | | | | WhiteSpace 2417..2421 +| | | | | | | | WhiteSpace 2417..2421 " " +| | | | | | RCurly 2421..2422 +| | | | | | | RCurly 2421..2422 "}" +| | | | EndLine 2422..2424 +| | | | | EndLine 2422..2424 "\r\n" +| | | RCurly 2424..2425 +| | | | RCurly 2424..2425 "}" +| EndLine 2425..2427 +| | EndLine 2425..2427 "\r\n" diff --git a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__pragma.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__pragma.circom.snap index 4bd2120..2af1f97 100644 --- a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__pragma.circom.snap +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__pragma.circom.snap @@ -1,17 +1,17 @@ ---- -source: crates/syntax/src/syntax.rs -expression: "crate :: view_syntax :: view_ast(& syntax)" ---- - Pragma 0..20 -| PragmaKw 0..6 -| | PragmaKw 0..6 "pragma" -| WhiteSpace 6..7 -| | WhiteSpace 6..7 " " -| Circom 7..13 -| | Circom 7..13 "circom" -| WhiteSpace 13..14 -| | WhiteSpace 13..14 " " -| Version 14..19 -| | Version 14..19 "2.0.0" -| Semicolon 19..20 -| | Semicolon 19..20 ";" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + Pragma 0..20 +| PragmaKw 0..6 +| | PragmaKw 0..6 "pragma" +| WhiteSpace 6..7 +| | WhiteSpace 6..7 " " +| Circom 7..13 +| | Circom 7..13 "circom" +| WhiteSpace 13..14 +| | WhiteSpace 13..14 " " +| Version 14..19 +| | Version 14..19 "2.0.0" +| Semicolon 19..20 +| | Semicolon 19..20 ";" diff --git a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__statements.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__statements.circom.snap new file mode 100644 index 0000000..33f7d40 --- /dev/null +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__statements.circom.snap @@ -0,0 +1,483 @@ +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + Block 0..425 +| LCurly 0..1 +| | LCurly 0..1 "{" +| EndLine 1..2 +| | EndLine 1..2 "\n" +| WhiteSpace 2..6 +| | WhiteSpace 2..6 " " +| CommentLine 6..21 +| | CommentLine 6..21 "// if ... else " +| EndLine 21..22 +| | EndLine 21..22 "\n" +| WhiteSpace 22..26 +| | WhiteSpace 22..26 " " +| StatementList 26..424 +| | IfStatement 26..121 +| | | IfKw 26..28 +| | | | IfKw 26..28 "if" +| | | LParen 28..29 +| | | | LParen 28..29 "(" +| | | Expression 29..35 +| | | | Equal 29..35 +| | | | | ExpressionAtom 29..30 +| | | | | | Identifier 29..30 +| | | | | | | Identifier 29..30 "n" +| | | | | WhiteSpace 30..31 +| | | | | | WhiteSpace 30..31 " " +| | | | | Equal 31..33 +| | | | | | Equal 31..33 "==" +| | | | | WhiteSpace 33..34 +| | | | | | WhiteSpace 33..34 " " +| | | | | ExpressionAtom 34..35 +| | | | | | Number 34..35 +| | | | | | | Number 34..35 "2" +| | | RParen 35..36 +| | | | RParen 35..36 ")" +| | | WhiteSpace 36..37 +| | | | WhiteSpace 36..37 " " +| | | Block 37..89 +| | | | LCurly 37..38 +| | | | | LCurly 37..38 "{" +| | | | EndLine 38..39 +| | | | | EndLine 38..39 "\n" +| | | | WhiteSpace 39..47 +| | | | | WhiteSpace 39..47 " " +| | | | StatementList 47..88 +| | | | | AssignStatement 47..56 +| | | | | | Expression 47..51 +| | | | | | | ExpressionAtom 47..50 +| | | | | | | | Identifier 47..50 +| | | | | | | | | Identifier 47..50 "aux" +| | | | | | | WhiteSpace 50..51 +| | | | | | | | WhiteSpace 50..51 " " +| | | | | | RAssignConstraintSignal 51..54 +| | | | | | | RAssignConstraintSignal 51..54 "<==" +| | | | | | WhiteSpace 54..55 +| | | | | | | WhiteSpace 54..55 " " +| | | | | | Expression 55..56 +| | | | | | | ExpressionAtom 55..56 +| | | | | | | | Number 55..56 +| | | | | | | | | Number 55..56 "2" +| | | | | Semicolon 56..57 +| | | | | | Semicolon 56..57 ";" +| | | | | EndLine 57..58 +| | | | | | EndLine 57..58 "\n" +| | | | | WhiteSpace 58..66 +| | | | | | WhiteSpace 58..66 " " +| | | | | AssignStatement 66..82 +| | | | | | Expression 66..70 +| | | | | | | ExpressionAtom 66..69 +| | | | | | | | Identifier 66..69 +| | | | | | | | | Identifier 66..69 "out" +| | | | | | | WhiteSpace 69..70 +| | | | | | | | WhiteSpace 69..70 " " +| | | | | | RAssignConstraintSignal 70..73 +| | | | | | | RAssignConstraintSignal 70..73 "<==" +| | | | | | WhiteSpace 73..74 +| | | | | | | WhiteSpace 73..74 " " +| | | | | | Expression 74..82 +| | | | | | | Call 74..82 +| | | | | | | | Call 74..77 +| | | | | | | | | ExpressionAtom 74..75 +| | | | | | | | | | Identifier 74..75 +| | | | | | | | | | | Identifier 74..75 "B" +| | | | | | | | | LParen 75..76 +| | | | | | | | | | LParen 75..76 "(" +| | | | | | | | | RParen 76..77 +| | | | | | | | | | RParen 76..77 ")" +| | | | | | | | LParen 77..78 +| | | | | | | | | LParen 77..78 "(" +| | | | | | | | Expression 78..81 +| | | | | | | | | ExpressionAtom 78..81 +| | | | | | | | | | Identifier 78..81 +| | | | | | | | | | | Identifier 78..81 "aux" +| | | | | | | | RParen 81..82 +| | | | | | | | | RParen 81..82 ")" +| | | | | Semicolon 82..83 +| | | | | | Semicolon 82..83 ";" +| | | | | EndLine 83..84 +| | | | | | EndLine 83..84 "\n" +| | | | | WhiteSpace 84..88 +| | | | | | WhiteSpace 84..88 " " +| | | | RCurly 88..89 +| | | | | RCurly 88..89 "}" +| | | WhiteSpace 89..90 +| | | | WhiteSpace 89..90 " " +| | | ElseKw 90..94 +| | | | ElseKw 90..94 "else" +| | | WhiteSpace 94..95 +| | | | WhiteSpace 94..95 " " +| | | Block 95..121 +| | | | LCurly 95..96 +| | | | | LCurly 95..96 "{" +| | | | EndLine 96..97 +| | | | | EndLine 96..97 "\n" +| | | | WhiteSpace 97..105 +| | | | | WhiteSpace 97..105 " " +| | | | StatementList 105..120 +| | | | | AssignStatement 105..114 +| | | | | | Expression 105..109 +| | | | | | | ExpressionAtom 105..108 +| | | | | | | | Identifier 105..108 +| | | | | | | | | Identifier 105..108 "out" +| | | | | | | WhiteSpace 108..109 +| | | | | | | | WhiteSpace 108..109 " " +| | | | | | RAssignConstraintSignal 109..112 +| | | | | | | RAssignConstraintSignal 109..112 "<==" +| | | | | | WhiteSpace 112..113 +| | | | | | | WhiteSpace 112..113 " " +| | | | | | Expression 113..114 +| | | | | | | ExpressionAtom 113..114 +| | | | | | | | Number 113..114 +| | | | | | | | | Number 113..114 "5" +| | | | | Semicolon 114..115 +| | | | | | Semicolon 114..115 ";" +| | | | | EndLine 115..116 +| | | | | | EndLine 115..116 "\n" +| | | | | WhiteSpace 116..120 +| | | | | | WhiteSpace 116..120 " " +| | | | RCurly 120..121 +| | | | | RCurly 120..121 "}" +| | EndLine 121..122 +| | | EndLine 121..122 "\n" +| | EndLine 122..123 +| | | EndLine 122..123 "\n" +| | WhiteSpace 123..127 +| | | WhiteSpace 123..127 " " +| | CommentLine 127..133 +| | | CommentLine 127..133 "// for" +| | EndLine 133..134 +| | | EndLine 133..134 "\n" +| | WhiteSpace 134..138 +| | | WhiteSpace 134..138 " " +| | ForLoop 138..206 +| | | ForKw 138..141 +| | | | ForKw 138..141 "for" +| | | LParen 141..142 +| | | | LParen 141..142 "(" +| | | VarDecl 142..151 +| | | | VarKw 142..145 +| | | | | VarKw 142..145 "var" +| | | | WhiteSpace 145..146 +| | | | | WhiteSpace 145..146 " " +| | | | ComplexIdentifier 146..148 +| | | | | Identifier 146..147 +| | | | | | Identifier 146..147 "i" +| | | | | WhiteSpace 147..148 +| | | | | | WhiteSpace 147..148 " " +| | | | Assign 148..149 +| | | | | Assign 148..149 "=" +| | | | WhiteSpace 149..150 +| | | | | WhiteSpace 149..150 " " +| | | | Expression 150..151 +| | | | | ExpressionAtom 150..151 +| | | | | | Number 150..151 +| | | | | | | Number 150..151 "0" +| | | Semicolon 151..152 +| | | | Semicolon 151..152 ";" +| | | WhiteSpace 152..153 +| | | | WhiteSpace 152..153 " " +| | | Expression 153..160 +| | | | LessThan 153..160 +| | | | | ExpressionAtom 153..154 +| | | | | | Identifier 153..154 +| | | | | | | Identifier 153..154 "i" +| | | | | WhiteSpace 154..155 +| | | | | | WhiteSpace 154..155 " " +| | | | | LessThan 155..156 +| | | | | | LessThan 155..156 "<" +| | | | | WhiteSpace 156..157 +| | | | | | WhiteSpace 156..157 " " +| | | | | Sub 157..160 +| | | | | | ExpressionAtom 157..158 +| | | | | | | Identifier 157..158 +| | | | | | | | Identifier 157..158 "N" +| | | | | | Sub 158..159 +| | | | | | | Sub 158..159 "-" +| | | | | | ExpressionAtom 159..160 +| | | | | | | Number 159..160 +| | | | | | | | Number 159..160 "1" +| | | Semicolon 160..161 +| | | | Semicolon 160..161 ";" +| | | WhiteSpace 161..162 +| | | | WhiteSpace 161..162 " " +| | | AssignStatement 162..165 +| | | | Expression 162..165 +| | | | | UnitInc 162..165 +| | | | | | ExpressionAtom 162..163 +| | | | | | | Identifier 162..163 +| | | | | | | | Identifier 162..163 "i" +| | | | | | UnitInc 163..165 +| | | | | | | UnitInc 163..165 "++" +| | | RParen 165..166 +| | | | RParen 165..166 ")" +| | | Block 166..206 +| | | | LCurly 166..167 +| | | | | LCurly 166..167 "{" +| | | | EndLine 167..168 +| | | | | EndLine 167..168 "\n" +| | | | WhiteSpace 168..176 +| | | | | WhiteSpace 168..176 " " +| | | | StatementList 176..205 +| | | | | AssignStatement 176..199 +| | | | | | Expression 176..184 +| | | | | | | ArrayQuery 176..183 +| | | | | | | | ExpressionAtom 176..180 +| | | | | | | | | Identifier 176..180 +| | | | | | | | | | Identifier 176..180 "comp" +| | | | | | | | LBracket 180..181 +| | | | | | | | | LBracket 180..181 "[" +| | | | | | | | Expression 181..182 +| | | | | | | | | ExpressionAtom 181..182 +| | | | | | | | | | Identifier 181..182 +| | | | | | | | | | | Identifier 181..182 "i" +| | | | | | | | RBracket 182..183 +| | | | | | | | | RBracket 182..183 "]" +| | | | | | | WhiteSpace 183..184 +| | | | | | | | WhiteSpace 183..184 " " +| | | | | | Assign 184..185 +| | | | | | | Assign 184..185 "=" +| | | | | | WhiteSpace 185..186 +| | | | | | | WhiteSpace 185..186 " " +| | | | | | Expression 186..199 +| | | | | | | Call 186..199 +| | | | | | | | ExpressionAtom 186..197 +| | | | | | | | | Identifier 186..197 +| | | | | | | | | | Identifier 186..197 "Multiplier2" +| | | | | | | | LParen 197..198 +| | | | | | | | | LParen 197..198 "(" +| | | | | | | | RParen 198..199 +| | | | | | | | | RParen 198..199 ")" +| | | | | Semicolon 199..200 +| | | | | | Semicolon 199..200 ";" +| | | | | EndLine 200..201 +| | | | | | EndLine 200..201 "\n" +| | | | | WhiteSpace 201..205 +| | | | | | WhiteSpace 201..205 " " +| | | | RCurly 205..206 +| | | | | RCurly 205..206 "}" +| | EndLine 206..207 +| | | EndLine 206..207 "\n" +| | EndLine 207..208 +| | | EndLine 207..208 "\n" +| | WhiteSpace 208..212 +| | | WhiteSpace 208..212 " " +| | CommentLine 212..220 +| | | CommentLine 212..220 "// while" +| | EndLine 220..221 +| | | EndLine 220..221 "\n" +| | WhiteSpace 221..225 +| | | WhiteSpace 221..225 " " +| | WhileLoop 225..275 +| | | WhileKw 225..230 +| | | | WhileKw 225..230 "while" +| | | WhiteSpace 230..231 +| | | | WhiteSpace 230..231 " " +| | | LParen 231..232 +| | | | LParen 231..232 "(" +| | | Expression 232..237 +| | | | LessThan 232..237 +| | | | | Sub 232..235 +| | | | | | ExpressionAtom 232..233 +| | | | | | | Identifier 232..233 +| | | | | | | | Identifier 232..233 "n" +| | | | | | Sub 233..234 +| | | | | | | Sub 233..234 "-" +| | | | | | ExpressionAtom 234..235 +| | | | | | | Number 234..235 +| | | | | | | | Number 234..235 "1" +| | | | | LessThan 235..236 +| | | | | | LessThan 235..236 "<" +| | | | | ExpressionAtom 236..237 +| | | | | | Identifier 236..237 +| | | | | | | Identifier 236..237 "a" +| | | RParen 237..238 +| | | | RParen 237..238 ")" +| | | WhiteSpace 238..239 +| | | | WhiteSpace 238..239 " " +| | | Block 239..275 +| | | | LCurly 239..240 +| | | | | LCurly 239..240 "{" +| | | | EndLine 240..241 +| | | | | EndLine 240..241 "\n" +| | | | WhiteSpace 241..249 +| | | | | WhiteSpace 241..249 " " +| | | | StatementList 249..274 +| | | | | AssignStatement 249..252 +| | | | | | Expression 249..252 +| | | | | | | UnitInc 249..252 +| | | | | | | | ExpressionAtom 249..250 +| | | | | | | | | Identifier 249..250 +| | | | | | | | | | Identifier 249..250 "r" +| | | | | | | | UnitInc 250..252 +| | | | | | | | | UnitInc 250..252 "++" +| | | | | Semicolon 252..253 +| | | | | | Semicolon 252..253 ";" +| | | | | EndLine 253..254 +| | | | | | EndLine 253..254 "\n" +| | | | | WhiteSpace 254..262 +| | | | | | WhiteSpace 254..262 " " +| | | | | AssignStatement 262..268 +| | | | | | Expression 262..264 +| | | | | | | ExpressionAtom 262..263 +| | | | | | | | Identifier 262..263 +| | | | | | | | | Identifier 262..263 "n" +| | | | | | | WhiteSpace 263..264 +| | | | | | | | WhiteSpace 263..264 " " +| | | | | | MulAssign 264..266 +| | | | | | | MulAssign 264..266 "*=" +| | | | | | WhiteSpace 266..267 +| | | | | | | WhiteSpace 266..267 " " +| | | | | | Expression 267..268 +| | | | | | | ExpressionAtom 267..268 +| | | | | | | | Number 267..268 +| | | | | | | | | Number 267..268 "2" +| | | | | Semicolon 268..269 +| | | | | | Semicolon 268..269 ";" +| | | | | EndLine 269..270 +| | | | | | EndLine 269..270 "\n" +| | | | | WhiteSpace 270..274 +| | | | | | WhiteSpace 270..274 " " +| | | | RCurly 274..275 +| | | | | RCurly 274..275 "}" +| | EndLine 275..276 +| | | EndLine 275..276 "\n" +| | EndLine 276..277 +| | | EndLine 276..277 "\n" +| | WhiteSpace 277..281 +| | | WhiteSpace 277..281 " " +| | CommentLine 281..290 +| | | CommentLine 281..290 "// return" +| | EndLine 290..291 +| | | EndLine 290..291 "\n" +| | WhiteSpace 291..295 +| | | WhiteSpace 291..295 " " +| | ReturnStatement 295..303 +| | | ReturnKw 295..301 +| | | | ReturnKw 295..301 "return" +| | | WhiteSpace 301..302 +| | | | WhiteSpace 301..302 " " +| | | Expression 302..303 +| | | | ExpressionAtom 302..303 +| | | | | Identifier 302..303 +| | | | | | Identifier 302..303 "r" +| | Semicolon 303..304 +| | | Semicolon 303..304 ";" +| | EndLine 304..305 +| | | EndLine 304..305 "\n" +| | EndLine 305..306 +| | | EndLine 305..306 "\n" +| | WhiteSpace 306..310 +| | | WhiteSpace 306..310 " " +| | CommentLine 310..316 +| | | CommentLine 310..316 "// log" +| | EndLine 316..317 +| | | EndLine 316..317 "\n" +| | WhiteSpace 317..321 +| | | WhiteSpace 317..321 " " +| | LogStatement 321..342 +| | | LogKw 321..324 +| | | | LogKw 321..324 "log" +| | | LParen 324..325 +| | | | LParen 324..325 "(" +| | | CircomString 325..331 +| | | | CircomString 325..331 "\"hash\"" +| | | Comma 331..332 +| | | | Comma 331..332 "," +| | | WhiteSpace 332..333 +| | | | WhiteSpace 332..333 " " +| | | Expression 333..341 +| | | | ComponentCall 333..341 +| | | | | ExpressionAtom 333..337 +| | | | | | Identifier 333..337 +| | | | | | | Identifier 333..337 "hash" +| | | | | Dot 337..338 +| | | | | | Dot 337..338 "." +| | | | | Identifier 338..341 +| | | | | | Identifier 338..341 "out" +| | | RParen 341..342 +| | | | RParen 341..342 ")" +| | Semicolon 342..343 +| | | Semicolon 342..343 ";" +| | EndLine 343..344 +| | | EndLine 343..344 "\n" +| | EndLine 344..345 +| | | EndLine 344..345 "\n" +| | WhiteSpace 345..349 +| | | WhiteSpace 345..349 " " +| | CommentLine 349..358 +| | | CommentLine 349..358 "// assert" +| | EndLine 358..359 +| | | EndLine 358..359 "\n" +| | WhiteSpace 359..363 +| | | WhiteSpace 359..363 " " +| | AssertStatement 363..376 +| | | AssertKw 363..369 +| | | | AssertKw 363..369 "assert" +| | | LParen 369..370 +| | | | LParen 369..370 "(" +| | | Expression 370..375 +| | | | GreaterThan 370..375 +| | | | | ExpressionAtom 370..371 +| | | | | | Identifier 370..371 +| | | | | | | Identifier 370..371 "a" +| | | | | WhiteSpace 371..372 +| | | | | | WhiteSpace 371..372 " " +| | | | | GreaterThan 372..373 +| | | | | | GreaterThan 372..373 ">" +| | | | | WhiteSpace 373..374 +| | | | | | WhiteSpace 373..374 " " +| | | | | ExpressionAtom 374..375 +| | | | | | Number 374..375 +| | | | | | | Number 374..375 "2" +| | | RParen 375..376 +| | | | RParen 375..376 ")" +| | Semicolon 376..377 +| | | Semicolon 376..377 ";" +| | EndLine 377..378 +| | | EndLine 377..378 "\n" +| | EndLine 378..379 +| | | EndLine 378..379 "\n" +| | WhiteSpace 379..383 +| | | WhiteSpace 379..383 " " +| | CommentLine 383..406 +| | | CommentLine 383..406 "// assignment statement" +| | EndLine 406..407 +| | | EndLine 406..407 "\n" +| | WhiteSpace 407..411 +| | | WhiteSpace 407..411 " " +| | AssignStatement 411..422 +| | | Expression 411..413 +| | | | ExpressionAtom 411..412 +| | | | | Identifier 411..412 +| | | | | | Identifier 411..412 "c" +| | | | WhiteSpace 412..413 +| | | | | WhiteSpace 412..413 " " +| | | RAssignConstraintSignal 413..416 +| | | | RAssignConstraintSignal 413..416 "<==" +| | | WhiteSpace 416..417 +| | | | WhiteSpace 416..417 " " +| | | Expression 417..422 +| | | | Mul 417..422 +| | | | | ExpressionAtom 417..418 +| | | | | | Identifier 417..418 +| | | | | | | Identifier 417..418 "a" +| | | | | WhiteSpace 418..419 +| | | | | | WhiteSpace 418..419 " " +| | | | | Mul 419..420 +| | | | | | Mul 419..420 "*" +| | | | | WhiteSpace 420..421 +| | | | | | WhiteSpace 420..421 " " +| | | | | ExpressionAtom 421..422 +| | | | | | Identifier 421..422 +| | | | | | | Identifier 421..422 "b" +| | Semicolon 422..423 +| | | Semicolon 422..423 ";" +| | EndLine 423..424 +| | | EndLine 423..424 "\n" +| RCurly 424..425 +| | RCurly 424..425 "}" diff --git a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__template.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__template.circom.snap index 63ed6b0..5997ae2 100644 --- a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__template.circom.snap +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__template.circom.snap @@ -12,9 +12,9 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | Identifier 9..20 "MultiplierN" | WhiteSpace 20..21 | | WhiteSpace 20..21 " " -| LParen 21..22 -| | LParen 21..22 "(" -| ParameterList 22..30 +| ParameterList 21..31 +| | LParen 21..22 +| | | LParen 21..22 "(" | | Identifier 22..23 | | | Identifier 22..23 "N" | | Comma 23..24 @@ -29,8 +29,8 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | WhiteSpace 27..28 " " | | Identifier 28..30 | | | Identifier 28..30 "QQ" -| RParen 30..31 -| | RParen 30..31 ")" +| | RParen 30..31 +| | | RParen 30..31 ")" | WhiteSpace 31..32 | | WhiteSpace 31..32 " " | Block 32..349 @@ -57,7 +57,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | InputKw 108..113 "input" | | | | | WhiteSpace 113..114 | | | | | | WhiteSpace 113..114 " " -| | | | SignalIdentifier 114..119 +| | | | ComplexIdentifier 114..119 | | | | | Identifier 114..116 | | | | | | Identifier 114..116 "in" | | | | | LBracket 116..117 @@ -84,7 +84,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | | OutputKw 141..147 "output" | | | | | WhiteSpace 147..148 | | | | | | WhiteSpace 147..148 " " -| | | | SignalIdentifier 148..151 +| | | | ComplexIdentifier 148..151 | | | | | Identifier 148..151 | | | | | | Identifier 148..151 "out" | | | Semicolon 151..152 @@ -98,7 +98,7 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | | ComponentKw 166..175 "component" | | | | WhiteSpace 175..176 | | | | | WhiteSpace 175..176 " " -| | | | ComponentIdentifier 176..185 +| | | | ComplexIdentifier 176..185 | | | | | Identifier 176..180 | | | | | | Identifier 176..180 "comp" | | | | | LBracket 180..181 @@ -131,114 +131,112 @@ expression: "crate :: view_syntax :: view_ast(& syntax)" | | | | EndLine 228..230 "\r\n" | | | WhiteSpace 230..242 | | | | WhiteSpace 230..242 " " -| | | Statement 242..328 -| | | | ForLoop 242..328 -| | | | | ForKw 242..245 -| | | | | | ForKw 242..245 "for" -| | | | | LParen 245..246 -| | | | | | LParen 245..246 "(" -| | | | | VarDecl 246..255 -| | | | | | VarKw 246..249 -| | | | | | | VarKw 246..249 "var" -| | | | | | WhiteSpace 249..250 -| | | | | | | WhiteSpace 249..250 " " -| | | | | | VarIdentifier 250..252 -| | | | | | | Identifier 250..251 -| | | | | | | | Identifier 250..251 "i" -| | | | | | | WhiteSpace 251..252 -| | | | | | | | WhiteSpace 251..252 " " -| | | | | | Assign 252..253 -| | | | | | | Assign 252..253 "=" -| | | | | | WhiteSpace 253..254 -| | | | | | | WhiteSpace 253..254 " " -| | | | | | Expression 254..255 -| | | | | | | ExpressionAtom 254..255 -| | | | | | | | Number 254..255 -| | | | | | | | | Number 254..255 "0" -| | | | | Semicolon 255..256 -| | | | | | Semicolon 255..256 ";" -| | | | | WhiteSpace 256..257 -| | | | | | WhiteSpace 256..257 " " -| | | | | Expression 257..264 -| | | | | | LessThan 257..264 -| | | | | | | ExpressionAtom 257..258 -| | | | | | | | Identifier 257..258 -| | | | | | | | | Identifier 257..258 "i" -| | | | | | | WhiteSpace 258..259 -| | | | | | | | WhiteSpace 258..259 " " -| | | | | | | LessThan 259..260 -| | | | | | | | LessThan 259..260 "<" -| | | | | | | WhiteSpace 260..261 -| | | | | | | | WhiteSpace 260..261 " " -| | | | | | | Sub 261..264 -| | | | | | | | ExpressionAtom 261..262 -| | | | | | | | | Identifier 261..262 -| | | | | | | | | | Identifier 261..262 "N" -| | | | | | | | Sub 262..263 -| | | | | | | | | Sub 262..263 "-" -| | | | | | | | ExpressionAtom 263..264 -| | | | | | | | | Number 263..264 -| | | | | | | | | | Number 263..264 "1" -| | | | | Semicolon 264..265 -| | | | | | Semicolon 264..265 ";" -| | | | | WhiteSpace 265..266 -| | | | | | WhiteSpace 265..266 " " -| | | | | AssignStatement 266..269 -| | | | | | Expression 266..267 -| | | | | | | ComponentIdentifier 266..267 +| | | ForLoop 242..328 +| | | | ForKw 242..245 +| | | | | ForKw 242..245 "for" +| | | | LParen 245..246 +| | | | | LParen 245..246 "(" +| | | | VarDecl 246..255 +| | | | | VarKw 246..249 +| | | | | | VarKw 246..249 "var" +| | | | | WhiteSpace 249..250 +| | | | | | WhiteSpace 249..250 " " +| | | | | ComplexIdentifier 250..252 +| | | | | | Identifier 250..251 +| | | | | | | Identifier 250..251 "i" +| | | | | | WhiteSpace 251..252 +| | | | | | | WhiteSpace 251..252 " " +| | | | | Assign 252..253 +| | | | | | Assign 252..253 "=" +| | | | | WhiteSpace 253..254 +| | | | | | WhiteSpace 253..254 " " +| | | | | Expression 254..255 +| | | | | | ExpressionAtom 254..255 +| | | | | | | Number 254..255 +| | | | | | | | Number 254..255 "0" +| | | | Semicolon 255..256 +| | | | | Semicolon 255..256 ";" +| | | | WhiteSpace 256..257 +| | | | | WhiteSpace 256..257 " " +| | | | Expression 257..264 +| | | | | LessThan 257..264 +| | | | | | ExpressionAtom 257..258 +| | | | | | | Identifier 257..258 +| | | | | | | | Identifier 257..258 "i" +| | | | | | WhiteSpace 258..259 +| | | | | | | WhiteSpace 258..259 " " +| | | | | | LessThan 259..260 +| | | | | | | LessThan 259..260 "<" +| | | | | | WhiteSpace 260..261 +| | | | | | | WhiteSpace 260..261 " " +| | | | | | Sub 261..264 +| | | | | | | ExpressionAtom 261..262 +| | | | | | | | Identifier 261..262 +| | | | | | | | | Identifier 261..262 "N" +| | | | | | | Sub 262..263 +| | | | | | | | Sub 262..263 "-" +| | | | | | | ExpressionAtom 263..264 +| | | | | | | | Number 263..264 +| | | | | | | | | Number 263..264 "1" +| | | | Semicolon 264..265 +| | | | | Semicolon 264..265 ";" +| | | | WhiteSpace 265..266 +| | | | | WhiteSpace 265..266 " " +| | | | AssignStatement 266..269 +| | | | | Expression 266..269 +| | | | | | UnitInc 266..269 +| | | | | | | ExpressionAtom 266..267 | | | | | | | | Identifier 266..267 | | | | | | | | | Identifier 266..267 "i" -| | | | | | UnitInc 267..269 -| | | | | | | UnitInc 267..269 "++" -| | | | | RParen 269..270 -| | | | | | RParen 269..270 ")" -| | | | | Statement 270..328 -| | | | | | Block 270..328 -| | | | | | | LCurly 270..271 -| | | | | | | | LCurly 270..271 "{" -| | | | | | | EndLine 271..273 -| | | | | | | | EndLine 271..273 "\r\n" -| | | | | | | WhiteSpace 273..289 -| | | | | | | | WhiteSpace 273..289 " " -| | | | | | | StatementList 289..327 -| | | | | | | | Statement 289..313 -| | | | | | | | | AssignStatement 289..312 -| | | | | | | | | | Expression 289..297 -| | | | | | | | | | | ComponentIdentifier 289..293 -| | | | | | | | | | | | Identifier 289..293 -| | | | | | | | | | | | | Identifier 289..293 "comp" -| | | | | | | | | | | LBracket 293..294 -| | | | | | | | | | | | LBracket 293..294 "[" -| | | | | | | | | | | Expression 294..295 -| | | | | | | | | | | | ExpressionAtom 294..295 -| | | | | | | | | | | | | Identifier 294..295 -| | | | | | | | | | | | | | Identifier 294..295 "i" -| | | | | | | | | | | RBracket 295..296 -| | | | | | | | | | | | RBracket 295..296 "]" -| | | | | | | | | | | WhiteSpace 296..297 -| | | | | | | | | | | | WhiteSpace 296..297 " " -| | | | | | | | | | Assign 297..298 -| | | | | | | | | | | Assign 297..298 "=" -| | | | | | | | | | WhiteSpace 298..299 -| | | | | | | | | | | WhiteSpace 298..299 " " -| | | | | | | | | | Expression 299..312 -| | | | | | | | | | | Call 299..312 -| | | | | | | | | | | | ExpressionAtom 299..310 -| | | | | | | | | | | | | Identifier 299..310 -| | | | | | | | | | | | | | Identifier 299..310 "Multiplier2" -| | | | | | | | | | | | Tuple 310..312 -| | | | | | | | | | | | | LParen 310..311 -| | | | | | | | | | | | | | LParen 310..311 "(" -| | | | | | | | | | | | | RParen 311..312 -| | | | | | | | | | | | | | RParen 311..312 ")" -| | | | | | | | | Semicolon 312..313 -| | | | | | | | | | Semicolon 312..313 ";" -| | | | | | | | EndLine 313..315 -| | | | | | | | | EndLine 313..315 "\r\n" -| | | | | | | | WhiteSpace 315..327 -| | | | | | | | | WhiteSpace 315..327 " " -| | | | | | | RCurly 327..328 -| | | | | | | | RCurly 327..328 "}" +| | | | | | | UnitInc 267..269 +| | | | | | | | UnitInc 267..269 "++" +| | | | RParen 269..270 +| | | | | RParen 269..270 ")" +| | | | Block 270..328 +| | | | | LCurly 270..271 +| | | | | | LCurly 270..271 "{" +| | | | | EndLine 271..273 +| | | | | | EndLine 271..273 "\r\n" +| | | | | WhiteSpace 273..289 +| | | | | | WhiteSpace 273..289 " " +| | | | | StatementList 289..327 +| | | | | | AssignStatement 289..312 +| | | | | | | Expression 289..297 +| | | | | | | | ArrayQuery 289..296 +| | | | | | | | | ExpressionAtom 289..293 +| | | | | | | | | | Identifier 289..293 +| | | | | | | | | | | Identifier 289..293 "comp" +| | | | | | | | | LBracket 293..294 +| | | | | | | | | | LBracket 293..294 "[" +| | | | | | | | | Expression 294..295 +| | | | | | | | | | ExpressionAtom 294..295 +| | | | | | | | | | | Identifier 294..295 +| | | | | | | | | | | | Identifier 294..295 "i" +| | | | | | | | | RBracket 295..296 +| | | | | | | | | | RBracket 295..296 "]" +| | | | | | | | WhiteSpace 296..297 +| | | | | | | | | WhiteSpace 296..297 " " +| | | | | | | Assign 297..298 +| | | | | | | | Assign 297..298 "=" +| | | | | | | WhiteSpace 298..299 +| | | | | | | | WhiteSpace 298..299 " " +| | | | | | | Expression 299..312 +| | | | | | | | Call 299..312 +| | | | | | | | | ExpressionAtom 299..310 +| | | | | | | | | | Identifier 299..310 +| | | | | | | | | | | Identifier 299..310 "Multiplier2" +| | | | | | | | | LParen 310..311 +| | | | | | | | | | LParen 310..311 "(" +| | | | | | | | | RParen 311..312 +| | | | | | | | | | RParen 311..312 ")" +| | | | | | Semicolon 312..313 +| | | | | | | Semicolon 312..313 ";" +| | | | | | EndLine 313..315 +| | | | | | | EndLine 313..315 "\r\n" +| | | | | | WhiteSpace 315..327 +| | | | | | | WhiteSpace 315..327 " " +| | | | | RCurly 327..328 +| | | | | | RCurly 327..328 "}" | | | EndLine 328..330 | | | | EndLine 328..330 "\r\n" | | | WhiteSpace 330..346 diff --git a/crates/syntax/src/syntax.rs b/crates/syntax/src/syntax.rs index 4b8c46c..bc07f3b 100644 --- a/crates/syntax/src/syntax.rs +++ b/crates/syntax/src/syntax.rs @@ -108,6 +108,11 @@ mod tests { test_syntax!("/src/test_files/happy/block.circom", Scope::Block); } + #[test] + fn statements_happy_test() { + test_syntax!("/src/test_files/happy/statements.circom", Scope::Block); + } + #[test] fn comment_happy_test() { test_syntax!( diff --git a/crates/syntax/src/test_files/happy/full_circom_program.circom b/crates/syntax/src/test_files/happy/full_circom_program.circom index 95d1d88..acbf135 100644 --- a/crates/syntax/src/test_files/happy/full_circom_program.circom +++ b/crates/syntax/src/test_files/happy/full_circom_program.circom @@ -97,3 +97,4 @@ template BinSum(n, ops) { lin === lout; } +} diff --git a/crates/syntax/src/test_files/happy/statements.circom b/crates/syntax/src/test_files/happy/statements.circom new file mode 100644 index 0000000..77da8af --- /dev/null +++ b/crates/syntax/src/test_files/happy/statements.circom @@ -0,0 +1,32 @@ +{ + // if ... else + if(n == 2) { + aux <== 2; + out <== B()(aux); + } else { + out <== 5; + } + + // for + for(var i = 0; i < N-1; i++){ + comp[i] = Multiplier2(); + } + + // while + while (n-1 2); + + // assignment statement + c <== a * b; +} \ No newline at end of file