diff --git a/Cargo.toml b/Cargo.toml index bfbc8e4..45e1d9e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,14 +2,36 @@ [workspace] members = ["crates/*", "xtask/"] +resolver = "2" [workspace.dependencies] -parser = {path = "./crates/parser", version = "0.1.0"} -vfs = {path = "./crates/vfs", version = "0.1.0"} -syntax = {path = './crates/syntax', version = "0.1.0"} -circom-lsp = {path = './crates/lsp', version = "*"} -common = { path = './crates/common', version = "*"} -database = {path = "./crates/database", version = "*"} +# Internal crates +parser = { path = "./crates/parser" } +vfs = { path = "./crates/vfs" } +syntax = { path = "./crates/syntax" } +circom-lsp = { path = "./crates/lsp" } + +# External crates +logos = "0.12.0" +rowan = "0.15.13" +lsp-types = "0.94.1" +lsp-server = "0.7.6" + +serde = "1.0.216" +serde_json = "1.0.78" + +anyhow = "1.0.79" +dashmap = "5.5.3" +path-absolutize = "3.1.1" + +# For testing +insta = { version = "1.41.1" } + +[profile.dev.package.insta] +opt-level = 3 + +[profile.dev.package.similar] +opt-level = 3 [workspace.package] rust-version = "1.71" diff --git a/README.md b/README.md index fbfbf04..70fe09c 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,65 @@ -# Install -Install follow those commands: - -```bash -git clone https://github.com/vuvoth/ccls -cd ccls -cargo xtask install --server -cargo xtask install --client -``` +# CCLS + +A language server for [Circom](https://docs.circom.io/), built with Rust and TypeScript. + +## ๐Ÿš€ Installation + +1. **Clone the repository:** + ```bash + git clone https://github.com/vuvoth/ccls.git + cd ccls + ``` + +2. **Install Rust** (if not already installed): + ๐Ÿ‘‰ https://www.rust-lang.org/tools/install + +3. **Build or test the project:** + ```bash + cargo test # Run tests + cargo build # Build the project + ``` + +--- + +## ๐Ÿงช Running Tests (with `insta` snapshots) + +Optional, but recommended for snapshot testing. + +1. **Install `cargo-insta`:** + ```bash + curl -LsSf https://insta.rs/install.sh | sh + ``` + +2. **Run the tests:** + ```bash + cargo test + ``` + +3. **Review snapshot changes:** + ```bash + cargo insta review + ``` + +๐Ÿ“˜ More info: [Insta Quickstart](https://insta.rs/docs/quickstart/) + +--- + +## ๐Ÿž Debugging the Extension + +1. **Install CCLS server and client:** + ```bash + cargo xtask install --server + cargo xtask install --client + npm audit fix --force # optional + ``` + +2. **Run the extension in VSCode:** + - Open the `ccls` project in VSCode. + - Open the *Run and Debug* panel. + - Select `Run Extension (Debug Build)` and start debugging. + +3. A new VSCode window will open. + Open a Circom file and try features like **Go to Definition**. + +--- + diff --git a/SNAPSHOT_TEST.md b/SNAPSHOT_TEST.md deleted file mode 100644 index 304166f..0000000 --- a/SNAPSHOT_TEST.md +++ /dev/null @@ -1,11 +0,0 @@ -# Snapshot Test - -* Run all tests: - ``` - cargo test - ``` - -* Review snapshot changes - ``` - cargo insta review - ``` \ No newline at end of file diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml deleted file mode 100644 index b7ee3f6..0000000 --- a/crates/common/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "common" -version = "0.1.0" -edition = "2021" -rust-version.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] diff --git a/crates/common/src/lib.rs b/crates/common/src/lib.rs deleted file mode 100644 index 8b13789..0000000 --- a/crates/common/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/database/Cargo.toml b/crates/database/Cargo.toml deleted file mode 100644 index 58ea405..0000000 --- a/crates/database/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "database" -version = "0.1.0" -edition = "2021" -rust-version.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -rowan = "0.15.13" diff --git a/crates/database/src/lib.rs b/crates/database/src/lib.rs deleted file mode 100644 index 8b13789..0000000 --- a/crates/database/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/database/src/main.rs b/crates/database/src/main.rs deleted file mode 100644 index e7a11a9..0000000 --- a/crates/database/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} diff --git a/crates/lsp/Cargo.toml b/crates/lsp/Cargo.toml index 1e410f8..d0d0726 100644 --- a/crates/lsp/Cargo.toml +++ b/crates/lsp/Cargo.toml @@ -6,33 +6,20 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +parser = { workspace = true } +vfs = { workspace = true } +syntax = { workspace = true } -env_logger = "0.9.0" -serde_json = "1.0.78" -serde = { version = "1.0", features = ["derive"] } -log = "0.4.18" +rowan = { workspace = true } +lsp-server = { workspace = true } +lsp-types = { workspace = true, features = ["proposed"] } -lsp-server = "0.7.6" +serde_json = { workspace = true } +serde = { workspace = true, features = ["derive"] } -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 +anyhow = { workspace = true } +dashmap = { workspace = true } +path-absolutize = { workspace = true } [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 +insta = { workspace = true, features = ["yaml"] } diff --git a/crates/lsp/src/database.rs b/crates/lsp/src/database.rs index 74126ce..29c2e57 100644 --- a/crates/lsp/src/database.rs +++ b/crates/lsp/src/database.rs @@ -11,8 +11,8 @@ use lsp_types::{Position, Range, Url}; use rowan::{ast::AstNode, TextSize}; use syntax::{ abstract_syntax_tree::{ - AstCircomProgram, AstComponentDecl, AstInputSignalDecl, AstOutputSignalDecl, AstSignalDecl, - AstTemplateDef, AstVarDecl, + AstCircomProgram, AstComponentDecl, AstFunctionDef, AstInputSignalDecl, + AstOutputSignalDecl, AstSignalDecl, AstTemplateDef, AstVarDecl, }, syntax_node::{SyntaxNode, SyntaxToken}, }; @@ -160,8 +160,10 @@ impl SemanticLocations { } } +// template #[derive(Debug, Clone)] pub struct TemplateDataSemantic { + pub param: SemanticLocations, pub signal: SemanticLocations, pub variable: SemanticLocations, pub component: SemanticLocations, @@ -170,6 +172,7 @@ pub struct TemplateDataSemantic { impl TemplateDataSemantic { fn new() -> Self { Self { + param: SemanticLocations::new(), signal: SemanticLocations::new(), variable: SemanticLocations::new(), component: SemanticLocations::new(), @@ -177,20 +180,53 @@ impl TemplateDataSemantic { } } +// function +#[derive(Debug, Clone)] +pub struct FunctionDataSemantic { + pub param: SemanticLocations, + // TODO: Functions cannot declare signals or generate constraints + pub variable: SemanticLocations, + pub component: SemanticLocations, +} + +impl FunctionDataSemantic { + fn new() -> Self { + Self { + param: SemanticLocations::new(), + variable: SemanticLocations::new(), + component: SemanticLocations::new(), + } + } +} + #[derive(Debug, Clone)] pub struct SemanticData { pub template: SemanticLocations, pub template_data_semantic: HashMap, + + pub function: SemanticLocations, + pub function_data_semantic: HashMap, } pub enum TemplateDataInfo { + Param((Id, Range)), Signal((Id, Range)), Variable((Id, Range)), Component((Id, Range)), } + +pub enum FunctionDataInfo { + Param((Id, Range)), + Variable((Id, Range)), + Component((Id, Range)), +} + pub enum SemanticInfo { Template((Id, Range)), TemplateData((Id, TemplateDataInfo)), + + Function((Id, Range)), + FunctionData((Id, FunctionDataInfo)), } #[derive(Debug, Clone)] @@ -215,6 +251,8 @@ impl SemanticDB { let semantic = self.semantic.entry(file_id).or_insert(SemanticData { template: SemanticLocations::new(), template_data_semantic: HashMap::new(), + function: SemanticLocations::new(), + function_data_semantic: HashMap::new(), }); match semantic_info { @@ -233,6 +271,24 @@ impl SemanticDB { } TemplateDataInfo::Variable((id, r)) => template_semantic.variable.insert(id, r), TemplateDataInfo::Signal((id, r)) => template_semantic.signal.insert(id, r), + TemplateDataInfo::Param((id, r)) => template_semantic.param.insert(id, r), + } + } + SemanticInfo::Function((id, range)) => { + semantic.function.insert(id, range); + } + SemanticInfo::FunctionData((function_id, function_data_info)) => { + let function_semantic = semantic + .function_data_semantic + .entry(function_id) + .or_insert(FunctionDataSemantic::new()); + + match function_data_info { + FunctionDataInfo::Component((id, r)) => { + function_semantic.component.insert(id, r) + } + FunctionDataInfo::Variable((id, r)) => function_semantic.variable.insert(id, r), + FunctionDataInfo::Param((id, r)) => function_semantic.param.insert(id, r), } } } @@ -253,11 +309,37 @@ impl SemanticDB { self.template_semantic(file_db, &template); } } + + for function in abstract_syntax_tree.function_list() { + if let Some(name) = function.function_name() { + let function_id = name.syntax().token_id(); + self.insert( + file_db.file_id, + SemanticInfo::Function((function_id, file_db.range(function.syntax()))), + ); + self.function_semantic(file_db, &function); + } + } } pub fn template_semantic(&mut self, file_db: &FileDB, ast_template: &AstTemplateDef) { let template_id = ast_template.syntax().token_id(); + if let Some(params) = ast_template.parameter_list() { + for param_name in params.parameters() { + self.insert( + file_db.file_id, + SemanticInfo::TemplateData(( + template_id, + TemplateDataInfo::Param(( + param_name.syntax().token_id(), + file_db.range(param_name.syntax()), + )), + )), + ); + } + }; + if let Some(statements) = ast_template.statements() { for signal in statements.find_children::() { if let Some(name) = signal.signal_identifier().unwrap().name() { @@ -336,10 +418,80 @@ impl SemanticDB { } } } + + pub fn function_semantic(&mut self, file_db: &FileDB, ast_function: &AstFunctionDef) { + let function_id = ast_function.syntax().token_id(); + + if let Some(params) = ast_function.parameter_list() { + for param_name in params.parameters() { + self.insert( + file_db.file_id, + SemanticInfo::FunctionData(( + function_id, + FunctionDataInfo::Param(( + param_name.syntax().token_id(), + file_db.range(param_name.syntax()), + )), + )), + ); + } + }; + + if let Some(statements) = ast_function.statements() { + // function does not contains signal decalrations --> skip signals + + for var in statements.find_children::() { + if let Some(name) = var.var_identifier().unwrap().name() { + self.insert( + file_db.file_id, + SemanticInfo::FunctionData(( + function_id, + FunctionDataInfo::Variable(( + name.syntax().token_id(), + file_db.range(var.syntax()), + )), + )), + ); + } + } + + for component in statements.find_children::() { + if let Some(component_var) = component.component_identifier() { + if let Some(name) = component_var.name() { + self.insert( + file_db.file_id, + SemanticInfo::FunctionData(( + function_id, + FunctionDataInfo::Component(( + name.syntax().token_id(), + file_db.range(component.syntax()), + )), + )), + ); + } + } + } + } + } } impl SemanticData { - pub fn lookup_signal(&self, template_id: Id, signal: &SyntaxToken) -> Option<&Vec> { + pub fn lookup_template_param( + &self, + template_id: Id, + signal: &SyntaxToken, + ) -> Option<&Vec> { + if let Some(semantic_template) = self.template_data_semantic.get(&template_id) { + return semantic_template.param.0.get(&signal.token_id()); + } + None + } + + pub fn lookup_template_signal( + &self, + template_id: Id, + signal: &SyntaxToken, + ) -> Option<&Vec> { if let Some(semantic_template) = self.template_data_semantic.get(&template_id) { return semantic_template.signal.0.get(&signal.token_id()); } @@ -347,14 +499,18 @@ impl SemanticData { } // TODO: remove duplicate code here. - pub fn lookup_variable(&self, template_id: Id, variable: &SyntaxToken) -> Option<&Vec> { + pub fn lookup_template_variable( + &self, + template_id: Id, + variable: &SyntaxToken, + ) -> Option<&Vec> { if let Some(semantic_template) = self.template_data_semantic.get(&template_id) { return semantic_template.variable.0.get(&variable.token_id()); } None } - pub fn lookup_component( + pub fn lookup_template_component( &self, template_id: Id, component: &SyntaxToken, @@ -364,6 +520,40 @@ impl SemanticData { } None } + + // ------------- function + pub fn lookup_function_param( + &self, + function_id: Id, + signal: &SyntaxToken, + ) -> Option<&Vec> { + if let Some(semantic_function) = self.function_data_semantic.get(&function_id) { + return semantic_function.param.0.get(&signal.token_id()); + } + None + } + + pub fn lookup_function_variable( + &self, + function_id: Id, + variable: &SyntaxToken, + ) -> Option<&Vec> { + if let Some(semantic_function) = self.function_data_semantic.get(&function_id) { + return semantic_function.variable.0.get(&variable.token_id()); + } + None + } + + pub fn lookup_function_component( + &self, + function_id: Id, + component: &SyntaxToken, + ) -> Option<&Vec> { + if let Some(semantic_function) = self.function_data_semantic.get(&function_id) { + return semantic_function.component.0.get(&component.token_id()); + } + None + } } #[cfg(test)] diff --git a/crates/lsp/src/global_state.rs b/crates/lsp/src/global_state.rs index 84a0ddf..1558353 100644 --- a/crates/lsp/src/global_state.rs +++ b/crates/lsp/src/global_state.rs @@ -46,13 +46,13 @@ impl From for TextDocument { /// state of all (circom) source file pub struct GlobalState { - /// file id - ast from that file content + /// key: file id (from file url) - value: ast of its content (source code) pub ast_map: DashMap, - /// file id - file content (+ end lines) + /// key: file id (from file url) - value: file content (+ end lines) pub file_map: DashMap, - /// file id - database (template in4, function in4...) + /// key: file id (from file url) - value: database (template in4, function in4...) pub db: SemanticDB, } @@ -82,6 +82,7 @@ impl GlobalState { let mut result = lookup_definition(root, ast, semantic_data, token); if token.kind() == TokenKind::CircomString { + eprintln!("___ definition inside current file"); return result; } @@ -113,30 +114,89 @@ impl GlobalState { } 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 + // path to the file that contains the element we want to get definition + // eg: file:///mnt/d/language-server/test-circom/program2.circom let uri = params.text_document_position_params.text_document.uri; - // abtract syntax tree for the element from that uri - // TODO eg: + // reference to the abtract syntax tree for the file from that uri + // eg: Ref { k: 0x56136e3ce100, v: 0x56136e3ce118 } + // ast.key() = "file:///mnt/d/language-server/test-circom/program2.circom" + // ast.value() = AstCircomProgram { syntax: CircomProgram@0..2707 } let ast = self.ast_map.get(&uri.to_string()).unwrap(); - // the file contains the element from that uri - // TODO eg: + + // information of the file contains the element we want to get definition + // eg: Ref { k: 0x56136e3bf5a0, v: 0x56136e3bf5b8 } + // file.key() = "file:///mnt/d/language-server/test-circom/program2.circom" + // file.value() = + // FileDB { + // file_id: FileId(17547606022754654883), + // file_path: Url { + // scheme: "file", + // cannot_be_a_base: false, + // username: "", + // password: None, + // host: None, + // port: None, + // path: "/mnt/d/language-server/test-circom/program2.circom", + // query: None, + // fragment: None + // }, + // end_line_vec: [2, 44, ..., 2701] + // } 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: + // eg: token = Identifier@2205..2207 "e2" if let Some(token) = lookup_token_at_postion(&file, &ast, params.text_document_position_params.position) { locations = self.lookup_definition(&file, &ast, &token); + // locations of declarations of that element + // it may returns more than 1 location if exist same name declarations + // eg: + // [ + // Location { + // uri: Url { + // scheme: "file", + // cannot_be_a_base: false, + // username: "", + // password: None, + // host: None, + // port: None, + // path: "/mnt/d/language-server/test-circom/program2.circom", + // query: None, + // fragment: None + // }, + // range: Range { + // start: Position { line: 75, character: 8 }, + // end: Position { line: 75, character: 14 } + // } + // } + // ] }; let result: Option = Some(GotoDefinitionResponse::Array(locations)); let result = serde_json::to_value(result).unwrap(); + // serialize result into JSON format + // eg: + // Array [ + // Object { + // "range": Object { + // "end": Object { + // "character": Number(14), + // "line": Number(75) + // }, + // "start": Object { + // "character": Number(8), + // "line": Number(75) + // } + // }, + // "uri": String("file:///mnt/d/language-server/test-circom/program2.circom") + // } + // ] Response { id, diff --git a/crates/lsp/src/handler/goto_definition.rs b/crates/lsp/src/handler/goto_definition.rs index 5a54caf..0b38b3c 100644 --- a/crates/lsp/src/handler/goto_definition.rs +++ b/crates/lsp/src/handler/goto_definition.rs @@ -45,6 +45,7 @@ pub fn lookup_token_at_postion( if kind == TokenKind::CircomString { return Some(token); } + None }) } @@ -91,7 +92,7 @@ pub fn lookup_definition( token: &SyntaxToken, ) -> Vec { let template_list = ast.template_list(); - // TODO: extract function list + let function_list = ast.function_list(); let mut res = Vec::new(); @@ -100,7 +101,7 @@ pub fn lookup_definition( } // signal from other template - // eg: in1, in2 from component call mul(in1, in2) + // 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) { @@ -141,8 +142,12 @@ pub fn lookup_definition( } if !signal_outside { + // TODO: look up token in param list of node wrap token + // look up token in template information // (template name, signal/variable/component in template) + + eprintln!("look up in templates..."); for template in template_list { let template_name = template.name().unwrap(); if template_name.name().unwrap().syntax().text() == token.text() { @@ -160,21 +165,60 @@ pub fn lookup_definition( let template_id = template.syntax().token_id(); - if let Some(data) = semantic_data.lookup_signal(template_id, token) { + if let Some(data) = semantic_data.lookup_template_param(template_id, token) { + res.extend(data); + } + + if let Some(data) = semantic_data.lookup_template_signal(template_id, token) { res.extend(data); } - if let Some(data) = semantic_data.lookup_variable(template_id, token) { + if let Some(data) = semantic_data.lookup_template_variable(template_id, token) { res.extend(data); } - if let Some(component_decl) = semantic_data.lookup_component(template_id, token) { + if let Some(component_decl) = + semantic_data.lookup_template_component(template_id, token) + { res.extend(component_decl); } } // TODO: look up token in function information // (function name, signal/variable/component in function) + + eprintln!("look up in functions..."); + for function in function_list { + let function_name = function.function_name().unwrap(); + if function_name.syntax().text() == token.text() { + let range = file.range(function.syntax()); + res.push(range); + } + + if !function + .syntax() + .text_range() + .contains_range(token.text_range()) + { + continue; + } + + let function_id = function.syntax().token_id(); + + if let Some(data) = semantic_data.lookup_function_param(function_id, token) { + res.extend(data); + } + + if let Some(data) = semantic_data.lookup_function_variable(function_id, token) { + res.extend(data); + } + + if let Some(component_decl) = + semantic_data.lookup_function_component(function_id, token) + { + res.extend(component_decl); + } + } } res.into_iter() diff --git a/crates/parser/Cargo.toml b/crates/parser/Cargo.toml index 0173d54..6eb11c7 100644 --- a/crates/parser/Cargo.toml +++ b/crates/parser/Cargo.toml @@ -6,21 +6,10 @@ version = "0.1.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -logos = "0.12.0" -lsp-types = {version = "0.94.1", features = ["proposed"]} -rowan = "0.15.15" -num-traits = "0.2" -num-derive = "0.2" -serde = "1.0.216" - -[profile.dev] -debug = 2 +logos = { workspace = true } +lsp-types = { workspace = true, features = ["proposed"] } +rowan = { workspace = true } +serde = { workspace = true } [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 \ No newline at end of file +insta = { workspace = true, features = ["yaml"] } diff --git a/crates/parser/src/grammar/main_component.rs b/crates/parser/src/grammar/main_component.rs index 2fd307b..5f2606d 100644 --- a/crates/parser/src/grammar/main_component.rs +++ b/crates/parser/src/grammar/main_component.rs @@ -8,17 +8,24 @@ component main {public [signal_list]} = tempid(v1,...,vn); {public [signal_list]} is optional */ pub fn main_component(p: &mut Parser) { + let open_marker = p.open(); + + // component main p.expect(ComponentKw); p.expect(MainKw); + // {public [signal_list]} if p.at(LCurly) { p.expect(LCurly); p.expect(PublicKw); - p.expect(LBracket); list_identifier(p); - p.expect(RBracket); + p.expect(RCurly); } + // = tempid(v1,...,vn); p.expect(Assign); expression::expression(p); + p.expect(Semicolon); + + p.close(open_marker, MainComponent); } diff --git a/crates/parser/src/token_kind.rs b/crates/parser/src/token_kind.rs index ef40c54..ebba8d1 100644 --- a/crates/parser/src/token_kind.rs +++ b/crates/parser/src/token_kind.rs @@ -225,6 +225,7 @@ pub enum TokenKind { ExpressionAtom, Expression, // Complex token kind + MainComponent, Block, ParameterList, Call, diff --git a/crates/syntax/Cargo.toml b/crates/syntax/Cargo.toml index 795f0b1..2ea37aa 100644 --- a/crates/syntax/Cargo.toml +++ b/crates/syntax/Cargo.toml @@ -7,15 +7,10 @@ rust-version.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -rowan = "0.15.13" -parser.workspace = true -lsp-types = {version = "0.94.1", features = ["proposed"]} +parser = { workspace = true } -[dev-dependencies] -# for snapshot testing, yaml format -insta = { version = "1.41.1", features = ["yaml"] } +rowan = { workspace = true } +lsp-types = { workspace = true, features = ["proposed"] } -[profile.dev.package] -# compile slightly slower once, but use less memory, have faster diffs -insta.opt-level = 3 -similar.opt-level = 3 \ No newline at end of file +[dev-dependencies] +insta = { workspace = true, features = ["yaml"] } diff --git a/crates/syntax/src/abstract_syntax_tree/ast.rs b/crates/syntax/src/abstract_syntax_tree/ast.rs index 3eef19c..2f8ba36 100644 --- a/crates/syntax/src/abstract_syntax_tree/ast.rs +++ b/crates/syntax/src/abstract_syntax_tree/ast.rs @@ -127,6 +127,17 @@ impl AstFunctionDef { pub fn argument_list(&self) -> Option { self.syntax().children().find_map(AstParameterList::cast) } + + pub fn statements(&self) -> Option { + if let Some(body) = self.body() { + return body.statement_list(); + } + None + } + + pub fn parameter_list(&self) -> Option { + self.syntax().children().find_map(AstParameterList::cast) + } } ast_node!(AstCircomProgram, CircomProgram); diff --git a/crates/syntax/src/lib.rs b/crates/syntax/src/lib.rs index 81704de..622b4ac 100644 --- a/crates/syntax/src/lib.rs +++ b/crates/syntax/src/lib.rs @@ -1,5 +1,3 @@ pub mod abstract_syntax_tree; pub mod syntax; pub mod syntax_node; -mod utils; -mod view_syntax; 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 6b68e8b..f5b6f67 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 @@ -1,531 +1,531 @@ ---- -source: crates/syntax/src/syntax.rs -expression: "crate :: view_syntax :: view_ast(& syntax)" ---- - Block 0..533 -| LCurly 0..1 -| | LCurly 0..1 "{" -| EndLine 1..3 -| | EndLine 1..3 "\r\n" -| WhiteSpace 3..4 -| | WhiteSpace 3..4 " " -| CommentLine 4..29 -| | CommentLine 4..29 "//Declaration of signals." -| EndLine 29..31 -| | EndLine 29..31 "\r\n" -| WhiteSpace 31..43 -| | WhiteSpace 31..43 " " -| StatementList 43..532 -| | InputSignalDecl 43..61 -| | | SignalHeader 43..56 -| | | | SignalKw 43..49 -| | | | | SignalKw 43..49 "signal" -| | | | WhiteSpace 49..50 -| | | | | WhiteSpace 49..50 " " -| | | | InputKw 50..55 -| | | | | InputKw 50..55 "input" -| | | | WhiteSpace 55..56 -| | | | | WhiteSpace 55..56 " " -| | | ComplexIdentifier 56..61 -| | | | Identifier 56..58 -| | | | | Identifier 56..58 "in" -| | | | LBracket 58..59 -| | | | | LBracket 58..59 "[" -| | | | Expression 59..60 -| | | | | ExpressionAtom 59..60 -| | | | | | Identifier 59..60 -| | | | | | | Identifier 59..60 "N" -| | | | RBracket 60..61 -| | | | | RBracket 60..61 "]" -| | Semicolon 61..62 -| | | Semicolon 61..62 ";" -| | EndLine 62..64 -| | | EndLine 62..64 "\r\n" -| | WhiteSpace 64..76 -| | | WhiteSpace 64..76 " " -| | OutputSignalDecl 76..93 -| | | SignalHeader 76..90 -| | | | SignalKw 76..82 -| | | | | SignalKw 76..82 "signal" -| | | | WhiteSpace 82..83 -| | | | | WhiteSpace 82..83 " " -| | | | OutputKw 83..89 -| | | | | OutputKw 83..89 "output" -| | | | WhiteSpace 89..90 -| | | | | WhiteSpace 89..90 " " -| | | ComplexIdentifier 90..93 -| | | | Identifier 90..93 -| | | | | Identifier 90..93 "out" -| | Semicolon 93..94 -| | | Semicolon 93..94 ";" -| | EndLine 94..96 -| | | EndLine 94..96 "\r\n" -| | WhiteSpace 96..108 -| | | WhiteSpace 96..108 " " -| | ComponentDecl 108..127 -| | | ComponentKw 108..117 -| | | | ComponentKw 108..117 "component" -| | | WhiteSpace 117..118 -| | | | WhiteSpace 117..118 " " -| | | ComplexIdentifier 118..127 -| | | | Identifier 118..122 -| | | | | Identifier 118..122 "comp" -| | | | LBracket 122..123 -| | | | | LBracket 122..123 "[" -| | | | Expression 123..126 -| | | | | Sub 123..126 -| | | | | | ExpressionAtom 123..124 -| | | | | | | Identifier 123..124 -| | | | | | | | Identifier 123..124 "N" -| | | | | | Sub 124..125 -| | | | | | | Sub 124..125 "-" -| | | | | | ExpressionAtom 125..126 -| | | | | | | Number 125..126 -| | | | | | | | Number 125..126 "1" -| | | | RBracket 126..127 -| | | | | RBracket 126..127 "]" -| | Semicolon 127..128 -| | | Semicolon 127..128 ";" -| | EndLine 128..130 -| | | EndLine 128..130 "\r\n" -| | EndLine 130..132 -| | | EndLine 130..132 "\r\n" -| | WhiteSpace 132..144 -| | | WhiteSpace 132..144 " " -| | CommentLine 144..157 -| | | CommentLine 144..157 "//Statements." -| | EndLine 157..159 -| | | EndLine 157..159 "\r\n" -| | WhiteSpace 159..171 -| | | WhiteSpace 159..171 " " -| | 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 ")" -| | | 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 " " -| | AssignStatement 271..292 -| | | Expression 271..283 -| | | | ComponentCall 271..282 -| | | | | 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 "[" -| | | | | 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 ";" -| | EndLine 293..295 -| | | EndLine 293..295 "\r\n" -| | WhiteSpace 295..307 -| | | WhiteSpace 295..307 " " -| | AssignStatement 307..328 -| | | Expression 307..319 -| | | | ComponentCall 307..318 -| | | | | 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 "[" -| | | | | 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 ";" -| | EndLine 329..331 -| | | EndLine 329..331 "\r\n" -| | WhiteSpace 331..343 -| | | WhiteSpace 331..343 " " -| | 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 ")" -| | | 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 " " -| | 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 -| | | | | | | | | | Identifier 508..509 "N" -| | | | | | | | Sub 509..510 -| | | | | | | | | Sub 509..510 "-" -| | | | | | | | 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 ";" -| | WhiteSpace 517..518 -| | | WhiteSpace 517..518 " " -| | EndLine 518..520 -| | | EndLine 518..520 "\r\n" -| | WhiteSpace 520..532 -| | | WhiteSpace 520..532 " " -| RCurly 532..533 -| | RCurly 532..533 "}" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + Block 0..533 +| LCurly 0..1 +| | LCurly 0..1 "{" +| EndLine 1..3 +| | EndLine 1..3 "\r\n" +| WhiteSpace 3..4 +| | WhiteSpace 3..4 " " +| CommentLine 4..29 +| | CommentLine 4..29 "//Declaration of signals." +| EndLine 29..31 +| | EndLine 29..31 "\r\n" +| WhiteSpace 31..43 +| | WhiteSpace 31..43 " " +| StatementList 43..532 +| | InputSignalDecl 43..61 +| | | SignalHeader 43..56 +| | | | SignalKw 43..49 +| | | | | SignalKw 43..49 "signal" +| | | | WhiteSpace 49..50 +| | | | | WhiteSpace 49..50 " " +| | | | InputKw 50..55 +| | | | | InputKw 50..55 "input" +| | | | WhiteSpace 55..56 +| | | | | WhiteSpace 55..56 " " +| | | ComplexIdentifier 56..61 +| | | | Identifier 56..58 +| | | | | Identifier 56..58 "in" +| | | | LBracket 58..59 +| | | | | LBracket 58..59 "[" +| | | | Expression 59..60 +| | | | | ExpressionAtom 59..60 +| | | | | | Identifier 59..60 +| | | | | | | Identifier 59..60 "N" +| | | | RBracket 60..61 +| | | | | RBracket 60..61 "]" +| | Semicolon 61..62 +| | | Semicolon 61..62 ";" +| | EndLine 62..64 +| | | EndLine 62..64 "\r\n" +| | WhiteSpace 64..76 +| | | WhiteSpace 64..76 " " +| | OutputSignalDecl 76..93 +| | | SignalHeader 76..90 +| | | | SignalKw 76..82 +| | | | | SignalKw 76..82 "signal" +| | | | WhiteSpace 82..83 +| | | | | WhiteSpace 82..83 " " +| | | | OutputKw 83..89 +| | | | | OutputKw 83..89 "output" +| | | | WhiteSpace 89..90 +| | | | | WhiteSpace 89..90 " " +| | | ComplexIdentifier 90..93 +| | | | Identifier 90..93 +| | | | | Identifier 90..93 "out" +| | Semicolon 93..94 +| | | Semicolon 93..94 ";" +| | EndLine 94..96 +| | | EndLine 94..96 "\r\n" +| | WhiteSpace 96..108 +| | | WhiteSpace 96..108 " " +| | ComponentDecl 108..127 +| | | ComponentKw 108..117 +| | | | ComponentKw 108..117 "component" +| | | WhiteSpace 117..118 +| | | | WhiteSpace 117..118 " " +| | | ComplexIdentifier 118..127 +| | | | Identifier 118..122 +| | | | | Identifier 118..122 "comp" +| | | | LBracket 122..123 +| | | | | LBracket 122..123 "[" +| | | | Expression 123..126 +| | | | | Sub 123..126 +| | | | | | ExpressionAtom 123..124 +| | | | | | | Identifier 123..124 +| | | | | | | | Identifier 123..124 "N" +| | | | | | Sub 124..125 +| | | | | | | Sub 124..125 "-" +| | | | | | ExpressionAtom 125..126 +| | | | | | | Number 125..126 +| | | | | | | | Number 125..126 "1" +| | | | RBracket 126..127 +| | | | | RBracket 126..127 "]" +| | Semicolon 127..128 +| | | Semicolon 127..128 ";" +| | EndLine 128..130 +| | | EndLine 128..130 "\r\n" +| | EndLine 130..132 +| | | EndLine 130..132 "\r\n" +| | WhiteSpace 132..144 +| | | WhiteSpace 132..144 " " +| | CommentLine 144..157 +| | | CommentLine 144..157 "//Statements." +| | EndLine 157..159 +| | | EndLine 157..159 "\r\n" +| | WhiteSpace 159..171 +| | | WhiteSpace 159..171 " " +| | 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 ")" +| | | 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 " " +| | AssignStatement 271..292 +| | | Expression 271..283 +| | | | ComponentCall 271..282 +| | | | | 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 "[" +| | | | | 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 ";" +| | EndLine 293..295 +| | | EndLine 293..295 "\r\n" +| | WhiteSpace 295..307 +| | | WhiteSpace 295..307 " " +| | AssignStatement 307..328 +| | | Expression 307..319 +| | | | ComponentCall 307..318 +| | | | | 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 "[" +| | | | | 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 ";" +| | EndLine 329..331 +| | | EndLine 329..331 "\r\n" +| | WhiteSpace 331..343 +| | | WhiteSpace 331..343 " " +| | 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 ")" +| | | 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 " " +| | 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 +| | | | | | | | | | Identifier 508..509 "N" +| | | | | | | | Sub 509..510 +| | | | | | | | | Sub 509..510 "-" +| | | | | | | | 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 ";" +| | WhiteSpace 517..518 +| | | WhiteSpace 517..518 " " +| | EndLine 518..520 +| | | EndLine 518..520 "\r\n" +| | WhiteSpace 520..532 +| | | WhiteSpace 520..532 " " +| RCurly 532..533 +| | RCurly 532..533 "}" 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 4a6a0a1..e27f7ac 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 @@ -1,1012 +1,1012 @@ ---- -source: crates/syntax/src/syntax.rs -expression: "crate :: view_syntax :: view_ast(& syntax)" ---- - 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 -| | EndLine 764..766 "\r\n" -| BlockComment 766..1478 -| | BlockComment 766..1478 "/*\r\n\r\nBinary Sum\r\n==========\r\n\r\nThis component creates a binary sum componet of ops operands and n bits each operand.\r\n\r\ne is Number of carries: Depends on the number of operands in the input.\r\n\r\nMain Constraint:\r\n in[0][0] * 2^0 + in[0][1] * 2^1 + ..... + in[0][n-1] * 2^(n-1) +\r\n + in[1][0] * 2^0 + in[1][1] * 2^1 + ..... + in[1][n-1] * 2^(n-1) +\r\n + ..\r\n + in[ops-1][0] * 2^0 + in[ops-1][1] * 2^1 + ..... + in[ops-1][n-1] * 2^(n-1) +\r\n ===\r\n out[0] * 2^0 + out[1] * 2^1 + + out[n+e-1] *2(n+e-1)\r\n\r\nTo waranty binary outputs:\r\n\r\n out[0] * (out[0] - 1) === 0\r\n out[1] * (out[0] - 1) === 0\r\n .\r\n .\r\n .\r\n out[n+e-1] * (out[n+e-1] - 1) == 0\r\n\r\n */" -| EndLine 1478..1480 -| | EndLine 1478..1480 "\r\n" -| EndLine 1480..1482 -| | EndLine 1480..1482 "\r\n" -| EndLine 1482..1484 -| | EndLine 1482..1484 "\r\n" -| BlockComment 1484..1580 -| | BlockComment 1484..1580 "/*\r\n This function calculates the number of extra bits in the output to do the full sum.\r\n */" -| EndLine 1580..1582 -| | EndLine 1580..1582 "\r\n" -| WhiteSpace 1582..1583 -| | WhiteSpace 1582..1583 " " -| Pragma 1583..1603 -| | PragmaKw 1583..1589 -| | | PragmaKw 1583..1589 "pragma" -| | WhiteSpace 1589..1590 -| | | WhiteSpace 1589..1590 " " -| | Circom 1590..1596 -| | | Circom 1590..1596 "circom" -| | WhiteSpace 1596..1597 -| | | WhiteSpace 1596..1597 " " -| | Version 1597..1602 -| | | Version 1597..1602 "2.0.0" -| | Semicolon 1602..1603 -| | | Semicolon 1602..1603 ";" -| EndLine 1603..1605 -| | EndLine 1603..1605 "\r\n" -| EndLine 1605..1607 -| | EndLine 1605..1607 "\r\n" -| FunctionDef 1607..1735 -| | FunctionKw 1607..1615 -| | | FunctionKw 1607..1615 "function" -| | WhiteSpace 1615..1616 -| | | WhiteSpace 1615..1616 " " -| | FunctionName 1616..1621 -| | | Identifier 1616..1621 -| | | | Identifier 1616..1621 "nbits" -| | ParameterList 1621..1624 -| | | LParen 1621..1622 -| | | | LParen 1621..1622 "(" -| | | Identifier 1622..1623 -| | | | Identifier 1622..1623 "a" -| | | RParen 1623..1624 -| | | | RParen 1623..1624 ")" -| | WhiteSpace 1624..1625 -| | | WhiteSpace 1624..1625 " " -| | Block 1625..1735 -| | | LCurly 1625..1626 -| | | | LCurly 1625..1626 "{" -| | | EndLine 1626..1628 -| | | | EndLine 1626..1628 "\r\n" -| | | WhiteSpace 1628..1632 -| | | | WhiteSpace 1628..1632 " " -| | | StatementList 1632..1734 -| | | | VarDecl 1632..1641 -| | | | | VarKw 1632..1635 -| | | | | | VarKw 1632..1635 "var" -| | | | | WhiteSpace 1635..1636 -| | | | | | WhiteSpace 1635..1636 " " -| | | | | ComplexIdentifier 1636..1638 -| | | | | | Identifier 1636..1637 -| | | | | | | Identifier 1636..1637 "n" -| | | | | | WhiteSpace 1637..1638 -| | | | | | | WhiteSpace 1637..1638 " " -| | | | | Assign 1638..1639 -| | | | | | Assign 1638..1639 "=" -| | | | | WhiteSpace 1639..1640 -| | | | | | WhiteSpace 1639..1640 " " -| | | | | Expression 1640..1641 -| | | | | | ExpressionAtom 1640..1641 -| | | | | | | Number 1640..1641 -| | | | | | | | Number 1640..1641 "1" -| | | | Semicolon 1641..1642 -| | | | | Semicolon 1641..1642 ";" -| | | | EndLine 1642..1644 -| | | | | EndLine 1642..1644 "\r\n" -| | | | WhiteSpace 1644..1648 -| | | | | WhiteSpace 1644..1648 " " -| | | | VarDecl 1648..1657 -| | | | | VarKw 1648..1651 -| | | | | | VarKw 1648..1651 "var" -| | | | | WhiteSpace 1651..1652 -| | | | | | WhiteSpace 1651..1652 " " -| | | | | ComplexIdentifier 1652..1654 -| | | | | | Identifier 1652..1653 -| | | | | | | Identifier 1652..1653 "r" -| | | | | | WhiteSpace 1653..1654 -| | | | | | | WhiteSpace 1653..1654 " " -| | | | | Assign 1654..1655 -| | | | | | Assign 1654..1655 "=" -| | | | | WhiteSpace 1655..1656 -| | | | | | WhiteSpace 1655..1656 " " -| | | | | Expression 1656..1657 -| | | | | | ExpressionAtom 1656..1657 -| | | | | | | Number 1656..1657 -| | | | | | | | Number 1656..1657 "0" -| | | | Semicolon 1657..1658 -| | | | | Semicolon 1657..1658 ";" -| | | | EndLine 1658..1660 -| | | | | EndLine 1658..1660 "\r\n" -| | | | WhiteSpace 1660..1664 -| | | | | WhiteSpace 1660..1664 " " -| | | | WhileLoop 1664..1717 -| | | | | WhileKw 1664..1669 -| | | | | | WhileKw 1664..1669 "while" -| | | | | WhiteSpace 1669..1670 -| | | | | | WhiteSpace 1669..1670 " " -| | | | | LParen 1670..1671 -| | | | | | LParen 1670..1671 "(" -| | | | | Expression 1671..1676 -| | | | | | LessThan 1671..1676 -| | | | | | | Sub 1671..1674 -| | | | | | | | ExpressionAtom 1671..1672 -| | | | | | | | | Identifier 1671..1672 -| | | | | | | | | | Identifier 1671..1672 "n" -| | | | | | | | Sub 1672..1673 -| | | | | | | | | Sub 1672..1673 "-" -| | | | | | | | ExpressionAtom 1673..1674 -| | | | | | | | | Number 1673..1674 -| | | | | | | | | | Number 1673..1674 "1" -| | | | | | | LessThan 1674..1675 -| | | | | | | | LessThan 1674..1675 "<" -| | | | | | | ExpressionAtom 1675..1676 -| | | | | | | | Identifier 1675..1676 -| | | | | | | | | Identifier 1675..1676 "a" -| | | | | RParen 1676..1677 -| | | | | | RParen 1676..1677 ")" -| | | | | WhiteSpace 1677..1678 -| | | | | | WhiteSpace 1677..1678 " " -| | | | | 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 " " -| | | | | | | 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 " " -| | | | 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 -| | | | RCurly 1734..1735 "}" -| EndLine 1735..1737 -| | EndLine 1735..1737 "\r\n" -| EndLine 1737..1739 -| | EndLine 1737..1739 "\r\n" -| EndLine 1739..1741 -| | EndLine 1739..1741 "\r\n" -| TemplateDef 1741..2425 -| | TemplateKw 1741..1749 -| | | TemplateKw 1741..1749 "template" -| | WhiteSpace 1749..1750 -| | | WhiteSpace 1749..1750 " " -| | TemplateName 1750..1756 -| | | Identifier 1750..1756 -| | | | Identifier 1750..1756 "BinSum" -| | ParameterList 1756..1764 -| | | LParen 1756..1757 -| | | | LParen 1756..1757 "(" -| | | Identifier 1757..1758 -| | | | Identifier 1757..1758 "n" -| | | Comma 1758..1759 -| | | | Comma 1758..1759 "," -| | | WhiteSpace 1759..1760 -| | | | WhiteSpace 1759..1760 " " -| | | Identifier 1760..1763 -| | | | Identifier 1760..1763 "ops" -| | | RParen 1763..1764 -| | | | RParen 1763..1764 ")" -| | WhiteSpace 1764..1765 -| | | WhiteSpace 1764..1765 " " -| | 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..2424 -| | | | VarDecl 1772..1803 -| | | | | VarKw 1772..1775 -| | | | | | VarKw 1772..1775 "var" -| | | | | WhiteSpace 1775..1776 -| | | | | | WhiteSpace 1775..1776 " " -| | | | | ComplexIdentifier 1776..1781 -| | | | | | Identifier 1776..1780 -| | | | | | | Identifier 1776..1780 "nout" -| | | | | | WhiteSpace 1780..1781 -| | | | | | | WhiteSpace 1780..1781 " " -| | | | | Assign 1781..1782 -| | | | | | Assign 1781..1782 "=" -| | | | | WhiteSpace 1782..1783 -| | | | | | WhiteSpace 1782..1783 " " -| | | | | Expression 1783..1803 -| | | | | | Call 1783..1803 -| | | | | | | ExpressionAtom 1783..1788 -| | | | | | | | Identifier 1783..1788 -| | | | | | | | | Identifier 1783..1788 "nbits" -| | | | | | | 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 -| | | | | EndLine 1804..1806 "\r\n" -| | | | WhiteSpace 1806..1810 -| | | | | WhiteSpace 1806..1810 " " -| | | | InputSignalDecl 1810..1833 -| | | | | SignalHeader 1810..1823 -| | | | | | SignalKw 1810..1816 -| | | | | | | SignalKw 1810..1816 "signal" -| | | | | | WhiteSpace 1816..1817 -| | | | | | | WhiteSpace 1816..1817 " " -| | | | | | InputKw 1817..1822 -| | | | | | | InputKw 1817..1822 "input" -| | | | | | WhiteSpace 1822..1823 -| | | | | | | WhiteSpace 1822..1823 " " -| | | | | ComplexIdentifier 1823..1833 -| | | | | | Identifier 1823..1825 -| | | | | | | Identifier 1823..1825 "in" -| | | | | | LBracket 1825..1826 -| | | | | | | LBracket 1825..1826 "[" -| | | | | | Expression 1826..1829 -| | | | | | | ExpressionAtom 1826..1829 -| | | | | | | | Identifier 1826..1829 -| | | | | | | | | Identifier 1826..1829 "ops" -| | | | | | RBracket 1829..1830 -| | | | | | | RBracket 1829..1830 "]" -| | | | | | LBracket 1830..1831 -| | | | | | | LBracket 1830..1831 "[" -| | | | | | Expression 1831..1832 -| | | | | | | ExpressionAtom 1831..1832 -| | | | | | | | Identifier 1831..1832 -| | | | | | | | | Identifier 1831..1832 "n" -| | | | | | RBracket 1832..1833 -| | | | | | | RBracket 1832..1833 "]" -| | | | Semicolon 1833..1834 -| | | | | Semicolon 1833..1834 ";" -| | | | EndLine 1834..1836 -| | | | | EndLine 1834..1836 "\r\n" -| | | | WhiteSpace 1836..1840 -| | | | | WhiteSpace 1836..1840 " " -| | | | OutputSignalDecl 1840..1863 -| | | | | SignalHeader 1840..1854 -| | | | | | SignalKw 1840..1846 -| | | | | | | SignalKw 1840..1846 "signal" -| | | | | | WhiteSpace 1846..1847 -| | | | | | | WhiteSpace 1846..1847 " " -| | | | | | OutputKw 1847..1853 -| | | | | | | OutputKw 1847..1853 "output" -| | | | | | WhiteSpace 1853..1854 -| | | | | | | WhiteSpace 1853..1854 " " -| | | | | ComplexIdentifier 1854..1863 -| | | | | | Identifier 1854..1857 -| | | | | | | Identifier 1854..1857 "out" -| | | | | | LBracket 1857..1858 -| | | | | | | LBracket 1857..1858 "[" -| | | | | | Expression 1858..1862 -| | | | | | | ExpressionAtom 1858..1862 -| | | | | | | | Identifier 1858..1862 -| | | | | | | | | Identifier 1858..1862 "nout" -| | | | | | RBracket 1862..1863 -| | | | | | | RBracket 1862..1863 "]" -| | | | Semicolon 1863..1864 -| | | | | Semicolon 1863..1864 ";" -| | | | EndLine 1864..1866 -| | | | | EndLine 1864..1866 "\r\n" -| | | | EndLine 1866..1868 -| | | | | EndLine 1866..1868 "\r\n" -| | | | WhiteSpace 1868..1872 -| | | | | WhiteSpace 1868..1872 " " -| | | | VarDecl 1872..1883 -| | | | | VarKw 1872..1875 -| | | | | | VarKw 1872..1875 "var" -| | | | | WhiteSpace 1875..1876 -| | | | | | WhiteSpace 1875..1876 " " -| | | | | ComplexIdentifier 1876..1880 -| | | | | | Identifier 1876..1879 -| | | | | | | Identifier 1876..1879 "lin" -| | | | | | WhiteSpace 1879..1880 -| | | | | | | WhiteSpace 1879..1880 " " -| | | | | Assign 1880..1881 -| | | | | | Assign 1880..1881 "=" -| | | | | WhiteSpace 1881..1882 -| | | | | | WhiteSpace 1881..1882 " " -| | | | | Expression 1882..1883 -| | | | | | ExpressionAtom 1882..1883 -| | | | | | | Number 1882..1883 -| | | | | | | | Number 1882..1883 "0" -| | | | Semicolon 1883..1884 -| | | | | Semicolon 1883..1884 ";" -| | | | EndLine 1884..1886 -| | | | | EndLine 1884..1886 "\r\n" -| | | | WhiteSpace 1886..1890 -| | | | | WhiteSpace 1886..1890 " " -| | | | VarDecl 1890..1902 -| | | | | VarKw 1890..1893 -| | | | | | VarKw 1890..1893 "var" -| | | | | WhiteSpace 1893..1894 -| | | | | | WhiteSpace 1893..1894 " " -| | | | | ComplexIdentifier 1894..1899 -| | | | | | Identifier 1894..1898 -| | | | | | | Identifier 1894..1898 "lout" -| | | | | | WhiteSpace 1898..1899 -| | | | | | | WhiteSpace 1898..1899 " " -| | | | | Assign 1899..1900 -| | | | | | Assign 1899..1900 "=" -| | | | | WhiteSpace 1900..1901 -| | | | | | WhiteSpace 1900..1901 " " -| | | | | Expression 1901..1902 -| | | | | | ExpressionAtom 1901..1902 -| | | | | | | Number 1901..1902 -| | | | | | | | Number 1901..1902 "0" -| | | | Semicolon 1902..1903 -| | | | | Semicolon 1902..1903 ";" -| | | | EndLine 1903..1905 -| | | | | EndLine 1903..1905 "\r\n" -| | | | EndLine 1905..1907 -| | | | | EndLine 1905..1907 "\r\n" -| | | | WhiteSpace 1907..1911 -| | | | | WhiteSpace 1907..1911 " " -| | | | VarDecl 1911..1916 -| | | | | VarKw 1911..1914 -| | | | | | VarKw 1911..1914 "var" -| | | | | WhiteSpace 1914..1915 -| | | | | | WhiteSpace 1914..1915 " " -| | | | | ComplexIdentifier 1915..1916 -| | | | | | Identifier 1915..1916 -| | | | | | | Identifier 1915..1916 "k" -| | | | Semicolon 1916..1917 -| | | | | Semicolon 1916..1917 ";" -| | | | EndLine 1917..1919 -| | | | | EndLine 1917..1919 "\r\n" -| | | | WhiteSpace 1919..1923 -| | | | | WhiteSpace 1919..1923 " " -| | | | VarDecl 1923..1928 -| | | | | VarKw 1923..1926 -| | | | | | VarKw 1923..1926 "var" -| | | | | WhiteSpace 1926..1927 -| | | | | | WhiteSpace 1926..1927 " " -| | | | | ComplexIdentifier 1927..1928 -| | | | | | Identifier 1927..1928 -| | | | | | | Identifier 1927..1928 "j" -| | | | Semicolon 1928..1929 -| | | | | Semicolon 1928..1929 ";" -| | | | EndLine 1929..1931 -| | | | | EndLine 1929..1931 "\r\n" -| | | | EndLine 1931..1933 -| | | | | EndLine 1931..1933 "\r\n" -| | | | WhiteSpace 1933..1937 -| | | | | WhiteSpace 1933..1937 " " -| | | | VarDecl 1937..1943 -| | | | | VarKw 1937..1940 -| | | | | | VarKw 1937..1940 "var" -| | | | | WhiteSpace 1940..1941 -| | | | | | WhiteSpace 1940..1941 " " -| | | | | ComplexIdentifier 1941..1943 -| | | | | | Identifier 1941..1943 -| | | | | | | Identifier 1941..1943 "e2" -| | | | Semicolon 1943..1944 -| | | | | Semicolon 1943..1944 ";" -| | | | EndLine 1944..1946 -| | | | | EndLine 1944..1946 "\r\n" -| | | | EndLine 1946..1948 -| | | | | EndLine 1946..1948 "\r\n" -| | | | WhiteSpace 1948..1952 -| | | | | WhiteSpace 1948..1952 " " -| | | | 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 " " -| | | | 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 " " -| | | | | 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" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + 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 +| | EndLine 764..766 "\r\n" +| BlockComment 766..1478 +| | BlockComment 766..1478 "/*\r\n\r\nBinary Sum\r\n==========\r\n\r\nThis component creates a binary sum componet of ops operands and n bits each operand.\r\n\r\ne is Number of carries: Depends on the number of operands in the input.\r\n\r\nMain Constraint:\r\n in[0][0] * 2^0 + in[0][1] * 2^1 + ..... + in[0][n-1] * 2^(n-1) +\r\n + in[1][0] * 2^0 + in[1][1] * 2^1 + ..... + in[1][n-1] * 2^(n-1) +\r\n + ..\r\n + in[ops-1][0] * 2^0 + in[ops-1][1] * 2^1 + ..... + in[ops-1][n-1] * 2^(n-1) +\r\n ===\r\n out[0] * 2^0 + out[1] * 2^1 + + out[n+e-1] *2(n+e-1)\r\n\r\nTo waranty binary outputs:\r\n\r\n out[0] * (out[0] - 1) === 0\r\n out[1] * (out[0] - 1) === 0\r\n .\r\n .\r\n .\r\n out[n+e-1] * (out[n+e-1] - 1) == 0\r\n\r\n */" +| EndLine 1478..1480 +| | EndLine 1478..1480 "\r\n" +| EndLine 1480..1482 +| | EndLine 1480..1482 "\r\n" +| EndLine 1482..1484 +| | EndLine 1482..1484 "\r\n" +| BlockComment 1484..1580 +| | BlockComment 1484..1580 "/*\r\n This function calculates the number of extra bits in the output to do the full sum.\r\n */" +| EndLine 1580..1582 +| | EndLine 1580..1582 "\r\n" +| WhiteSpace 1582..1583 +| | WhiteSpace 1582..1583 " " +| Pragma 1583..1603 +| | PragmaKw 1583..1589 +| | | PragmaKw 1583..1589 "pragma" +| | WhiteSpace 1589..1590 +| | | WhiteSpace 1589..1590 " " +| | Circom 1590..1596 +| | | Circom 1590..1596 "circom" +| | WhiteSpace 1596..1597 +| | | WhiteSpace 1596..1597 " " +| | Version 1597..1602 +| | | Version 1597..1602 "2.0.0" +| | Semicolon 1602..1603 +| | | Semicolon 1602..1603 ";" +| EndLine 1603..1605 +| | EndLine 1603..1605 "\r\n" +| EndLine 1605..1607 +| | EndLine 1605..1607 "\r\n" +| FunctionDef 1607..1735 +| | FunctionKw 1607..1615 +| | | FunctionKw 1607..1615 "function" +| | WhiteSpace 1615..1616 +| | | WhiteSpace 1615..1616 " " +| | FunctionName 1616..1621 +| | | Identifier 1616..1621 +| | | | Identifier 1616..1621 "nbits" +| | ParameterList 1621..1624 +| | | LParen 1621..1622 +| | | | LParen 1621..1622 "(" +| | | Identifier 1622..1623 +| | | | Identifier 1622..1623 "a" +| | | RParen 1623..1624 +| | | | RParen 1623..1624 ")" +| | WhiteSpace 1624..1625 +| | | WhiteSpace 1624..1625 " " +| | Block 1625..1735 +| | | LCurly 1625..1626 +| | | | LCurly 1625..1626 "{" +| | | EndLine 1626..1628 +| | | | EndLine 1626..1628 "\r\n" +| | | WhiteSpace 1628..1632 +| | | | WhiteSpace 1628..1632 " " +| | | StatementList 1632..1734 +| | | | VarDecl 1632..1641 +| | | | | VarKw 1632..1635 +| | | | | | VarKw 1632..1635 "var" +| | | | | WhiteSpace 1635..1636 +| | | | | | WhiteSpace 1635..1636 " " +| | | | | ComplexIdentifier 1636..1638 +| | | | | | Identifier 1636..1637 +| | | | | | | Identifier 1636..1637 "n" +| | | | | | WhiteSpace 1637..1638 +| | | | | | | WhiteSpace 1637..1638 " " +| | | | | Assign 1638..1639 +| | | | | | Assign 1638..1639 "=" +| | | | | WhiteSpace 1639..1640 +| | | | | | WhiteSpace 1639..1640 " " +| | | | | Expression 1640..1641 +| | | | | | ExpressionAtom 1640..1641 +| | | | | | | Number 1640..1641 +| | | | | | | | Number 1640..1641 "1" +| | | | Semicolon 1641..1642 +| | | | | Semicolon 1641..1642 ";" +| | | | EndLine 1642..1644 +| | | | | EndLine 1642..1644 "\r\n" +| | | | WhiteSpace 1644..1648 +| | | | | WhiteSpace 1644..1648 " " +| | | | VarDecl 1648..1657 +| | | | | VarKw 1648..1651 +| | | | | | VarKw 1648..1651 "var" +| | | | | WhiteSpace 1651..1652 +| | | | | | WhiteSpace 1651..1652 " " +| | | | | ComplexIdentifier 1652..1654 +| | | | | | Identifier 1652..1653 +| | | | | | | Identifier 1652..1653 "r" +| | | | | | WhiteSpace 1653..1654 +| | | | | | | WhiteSpace 1653..1654 " " +| | | | | Assign 1654..1655 +| | | | | | Assign 1654..1655 "=" +| | | | | WhiteSpace 1655..1656 +| | | | | | WhiteSpace 1655..1656 " " +| | | | | Expression 1656..1657 +| | | | | | ExpressionAtom 1656..1657 +| | | | | | | Number 1656..1657 +| | | | | | | | Number 1656..1657 "0" +| | | | Semicolon 1657..1658 +| | | | | Semicolon 1657..1658 ";" +| | | | EndLine 1658..1660 +| | | | | EndLine 1658..1660 "\r\n" +| | | | WhiteSpace 1660..1664 +| | | | | WhiteSpace 1660..1664 " " +| | | | WhileLoop 1664..1717 +| | | | | WhileKw 1664..1669 +| | | | | | WhileKw 1664..1669 "while" +| | | | | WhiteSpace 1669..1670 +| | | | | | WhiteSpace 1669..1670 " " +| | | | | LParen 1670..1671 +| | | | | | LParen 1670..1671 "(" +| | | | | Expression 1671..1676 +| | | | | | LessThan 1671..1676 +| | | | | | | Sub 1671..1674 +| | | | | | | | ExpressionAtom 1671..1672 +| | | | | | | | | Identifier 1671..1672 +| | | | | | | | | | Identifier 1671..1672 "n" +| | | | | | | | Sub 1672..1673 +| | | | | | | | | Sub 1672..1673 "-" +| | | | | | | | ExpressionAtom 1673..1674 +| | | | | | | | | Number 1673..1674 +| | | | | | | | | | Number 1673..1674 "1" +| | | | | | | LessThan 1674..1675 +| | | | | | | | LessThan 1674..1675 "<" +| | | | | | | ExpressionAtom 1675..1676 +| | | | | | | | Identifier 1675..1676 +| | | | | | | | | Identifier 1675..1676 "a" +| | | | | RParen 1676..1677 +| | | | | | RParen 1676..1677 ")" +| | | | | WhiteSpace 1677..1678 +| | | | | | WhiteSpace 1677..1678 " " +| | | | | 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 " " +| | | | | | | 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 " " +| | | | 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 +| | | | RCurly 1734..1735 "}" +| EndLine 1735..1737 +| | EndLine 1735..1737 "\r\n" +| EndLine 1737..1739 +| | EndLine 1737..1739 "\r\n" +| EndLine 1739..1741 +| | EndLine 1739..1741 "\r\n" +| TemplateDef 1741..2425 +| | TemplateKw 1741..1749 +| | | TemplateKw 1741..1749 "template" +| | WhiteSpace 1749..1750 +| | | WhiteSpace 1749..1750 " " +| | TemplateName 1750..1756 +| | | Identifier 1750..1756 +| | | | Identifier 1750..1756 "BinSum" +| | ParameterList 1756..1764 +| | | LParen 1756..1757 +| | | | LParen 1756..1757 "(" +| | | Identifier 1757..1758 +| | | | Identifier 1757..1758 "n" +| | | Comma 1758..1759 +| | | | Comma 1758..1759 "," +| | | WhiteSpace 1759..1760 +| | | | WhiteSpace 1759..1760 " " +| | | Identifier 1760..1763 +| | | | Identifier 1760..1763 "ops" +| | | RParen 1763..1764 +| | | | RParen 1763..1764 ")" +| | WhiteSpace 1764..1765 +| | | WhiteSpace 1764..1765 " " +| | 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..2424 +| | | | VarDecl 1772..1803 +| | | | | VarKw 1772..1775 +| | | | | | VarKw 1772..1775 "var" +| | | | | WhiteSpace 1775..1776 +| | | | | | WhiteSpace 1775..1776 " " +| | | | | ComplexIdentifier 1776..1781 +| | | | | | Identifier 1776..1780 +| | | | | | | Identifier 1776..1780 "nout" +| | | | | | WhiteSpace 1780..1781 +| | | | | | | WhiteSpace 1780..1781 " " +| | | | | Assign 1781..1782 +| | | | | | Assign 1781..1782 "=" +| | | | | WhiteSpace 1782..1783 +| | | | | | WhiteSpace 1782..1783 " " +| | | | | Expression 1783..1803 +| | | | | | Call 1783..1803 +| | | | | | | ExpressionAtom 1783..1788 +| | | | | | | | Identifier 1783..1788 +| | | | | | | | | Identifier 1783..1788 "nbits" +| | | | | | | 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 +| | | | | EndLine 1804..1806 "\r\n" +| | | | WhiteSpace 1806..1810 +| | | | | WhiteSpace 1806..1810 " " +| | | | InputSignalDecl 1810..1833 +| | | | | SignalHeader 1810..1823 +| | | | | | SignalKw 1810..1816 +| | | | | | | SignalKw 1810..1816 "signal" +| | | | | | WhiteSpace 1816..1817 +| | | | | | | WhiteSpace 1816..1817 " " +| | | | | | InputKw 1817..1822 +| | | | | | | InputKw 1817..1822 "input" +| | | | | | WhiteSpace 1822..1823 +| | | | | | | WhiteSpace 1822..1823 " " +| | | | | ComplexIdentifier 1823..1833 +| | | | | | Identifier 1823..1825 +| | | | | | | Identifier 1823..1825 "in" +| | | | | | LBracket 1825..1826 +| | | | | | | LBracket 1825..1826 "[" +| | | | | | Expression 1826..1829 +| | | | | | | ExpressionAtom 1826..1829 +| | | | | | | | Identifier 1826..1829 +| | | | | | | | | Identifier 1826..1829 "ops" +| | | | | | RBracket 1829..1830 +| | | | | | | RBracket 1829..1830 "]" +| | | | | | LBracket 1830..1831 +| | | | | | | LBracket 1830..1831 "[" +| | | | | | Expression 1831..1832 +| | | | | | | ExpressionAtom 1831..1832 +| | | | | | | | Identifier 1831..1832 +| | | | | | | | | Identifier 1831..1832 "n" +| | | | | | RBracket 1832..1833 +| | | | | | | RBracket 1832..1833 "]" +| | | | Semicolon 1833..1834 +| | | | | Semicolon 1833..1834 ";" +| | | | EndLine 1834..1836 +| | | | | EndLine 1834..1836 "\r\n" +| | | | WhiteSpace 1836..1840 +| | | | | WhiteSpace 1836..1840 " " +| | | | OutputSignalDecl 1840..1863 +| | | | | SignalHeader 1840..1854 +| | | | | | SignalKw 1840..1846 +| | | | | | | SignalKw 1840..1846 "signal" +| | | | | | WhiteSpace 1846..1847 +| | | | | | | WhiteSpace 1846..1847 " " +| | | | | | OutputKw 1847..1853 +| | | | | | | OutputKw 1847..1853 "output" +| | | | | | WhiteSpace 1853..1854 +| | | | | | | WhiteSpace 1853..1854 " " +| | | | | ComplexIdentifier 1854..1863 +| | | | | | Identifier 1854..1857 +| | | | | | | Identifier 1854..1857 "out" +| | | | | | LBracket 1857..1858 +| | | | | | | LBracket 1857..1858 "[" +| | | | | | Expression 1858..1862 +| | | | | | | ExpressionAtom 1858..1862 +| | | | | | | | Identifier 1858..1862 +| | | | | | | | | Identifier 1858..1862 "nout" +| | | | | | RBracket 1862..1863 +| | | | | | | RBracket 1862..1863 "]" +| | | | Semicolon 1863..1864 +| | | | | Semicolon 1863..1864 ";" +| | | | EndLine 1864..1866 +| | | | | EndLine 1864..1866 "\r\n" +| | | | EndLine 1866..1868 +| | | | | EndLine 1866..1868 "\r\n" +| | | | WhiteSpace 1868..1872 +| | | | | WhiteSpace 1868..1872 " " +| | | | VarDecl 1872..1883 +| | | | | VarKw 1872..1875 +| | | | | | VarKw 1872..1875 "var" +| | | | | WhiteSpace 1875..1876 +| | | | | | WhiteSpace 1875..1876 " " +| | | | | ComplexIdentifier 1876..1880 +| | | | | | Identifier 1876..1879 +| | | | | | | Identifier 1876..1879 "lin" +| | | | | | WhiteSpace 1879..1880 +| | | | | | | WhiteSpace 1879..1880 " " +| | | | | Assign 1880..1881 +| | | | | | Assign 1880..1881 "=" +| | | | | WhiteSpace 1881..1882 +| | | | | | WhiteSpace 1881..1882 " " +| | | | | Expression 1882..1883 +| | | | | | ExpressionAtom 1882..1883 +| | | | | | | Number 1882..1883 +| | | | | | | | Number 1882..1883 "0" +| | | | Semicolon 1883..1884 +| | | | | Semicolon 1883..1884 ";" +| | | | EndLine 1884..1886 +| | | | | EndLine 1884..1886 "\r\n" +| | | | WhiteSpace 1886..1890 +| | | | | WhiteSpace 1886..1890 " " +| | | | VarDecl 1890..1902 +| | | | | VarKw 1890..1893 +| | | | | | VarKw 1890..1893 "var" +| | | | | WhiteSpace 1893..1894 +| | | | | | WhiteSpace 1893..1894 " " +| | | | | ComplexIdentifier 1894..1899 +| | | | | | Identifier 1894..1898 +| | | | | | | Identifier 1894..1898 "lout" +| | | | | | WhiteSpace 1898..1899 +| | | | | | | WhiteSpace 1898..1899 " " +| | | | | Assign 1899..1900 +| | | | | | Assign 1899..1900 "=" +| | | | | WhiteSpace 1900..1901 +| | | | | | WhiteSpace 1900..1901 " " +| | | | | Expression 1901..1902 +| | | | | | ExpressionAtom 1901..1902 +| | | | | | | Number 1901..1902 +| | | | | | | | Number 1901..1902 "0" +| | | | Semicolon 1902..1903 +| | | | | Semicolon 1902..1903 ";" +| | | | EndLine 1903..1905 +| | | | | EndLine 1903..1905 "\r\n" +| | | | EndLine 1905..1907 +| | | | | EndLine 1905..1907 "\r\n" +| | | | WhiteSpace 1907..1911 +| | | | | WhiteSpace 1907..1911 " " +| | | | VarDecl 1911..1916 +| | | | | VarKw 1911..1914 +| | | | | | VarKw 1911..1914 "var" +| | | | | WhiteSpace 1914..1915 +| | | | | | WhiteSpace 1914..1915 " " +| | | | | ComplexIdentifier 1915..1916 +| | | | | | Identifier 1915..1916 +| | | | | | | Identifier 1915..1916 "k" +| | | | Semicolon 1916..1917 +| | | | | Semicolon 1916..1917 ";" +| | | | EndLine 1917..1919 +| | | | | EndLine 1917..1919 "\r\n" +| | | | WhiteSpace 1919..1923 +| | | | | WhiteSpace 1919..1923 " " +| | | | VarDecl 1923..1928 +| | | | | VarKw 1923..1926 +| | | | | | VarKw 1923..1926 "var" +| | | | | WhiteSpace 1926..1927 +| | | | | | WhiteSpace 1926..1927 " " +| | | | | ComplexIdentifier 1927..1928 +| | | | | | Identifier 1927..1928 +| | | | | | | Identifier 1927..1928 "j" +| | | | Semicolon 1928..1929 +| | | | | Semicolon 1928..1929 ";" +| | | | EndLine 1929..1931 +| | | | | EndLine 1929..1931 "\r\n" +| | | | EndLine 1931..1933 +| | | | | EndLine 1931..1933 "\r\n" +| | | | WhiteSpace 1933..1937 +| | | | | WhiteSpace 1933..1937 " " +| | | | VarDecl 1937..1943 +| | | | | VarKw 1937..1940 +| | | | | | VarKw 1937..1940 "var" +| | | | | WhiteSpace 1940..1941 +| | | | | | WhiteSpace 1940..1941 " " +| | | | | ComplexIdentifier 1941..1943 +| | | | | | Identifier 1941..1943 +| | | | | | | Identifier 1941..1943 "e2" +| | | | Semicolon 1943..1944 +| | | | | Semicolon 1943..1944 ";" +| | | | EndLine 1944..1946 +| | | | | EndLine 1944..1946 "\r\n" +| | | | EndLine 1946..1948 +| | | | | EndLine 1946..1948 "\r\n" +| | | | WhiteSpace 1948..1952 +| | | | | WhiteSpace 1948..1952 " " +| | | | 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 " " +| | | | 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 " " +| | | | | 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__line_comment.circom.snap b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__line_comment.circom.snap index 5239a09..331a191 100644 --- a/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__line_comment.circom.snap +++ b/crates/syntax/src/snapshots/syntax__syntax__tests____src__test_files__happy__line_comment.circom.snap @@ -1,30 +1,30 @@ ---- -source: crates/syntax/src/syntax.rs -expression: "crate :: view_syntax :: view_ast(& syntax)" ---- - CircomProgram 0..45 -| EndLine 0..2 -| | EndLine 0..2 "\r\n" -| CommentLine 2..15 -| | CommentLine 2..15 "// comment :>" -| EndLine 15..17 -| | EndLine 15..17 "\r\n" -| EndLine 17..19 -| | EndLine 17..19 "\r\n" -| WhiteSpace 19..23 -| | WhiteSpace 19..23 " " -| Pragma 23..43 -| | PragmaKw 23..29 -| | | PragmaKw 23..29 "pragma" -| | WhiteSpace 29..30 -| | | WhiteSpace 29..30 " " -| | Circom 30..36 -| | | Circom 30..36 "circom" -| | WhiteSpace 36..37 -| | | WhiteSpace 36..37 " " -| | Version 37..42 -| | | Version 37..42 "2.0.0" -| | Semicolon 42..43 -| | | Semicolon 42..43 ";" -| EndLine 43..45 -| | EndLine 43..45 "\r\n" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + CircomProgram 0..45 +| EndLine 0..2 +| | EndLine 0..2 "\r\n" +| CommentLine 2..15 +| | CommentLine 2..15 "// comment :>" +| EndLine 15..17 +| | EndLine 15..17 "\r\n" +| EndLine 17..19 +| | EndLine 17..19 "\r\n" +| WhiteSpace 19..23 +| | WhiteSpace 19..23 " " +| Pragma 23..43 +| | PragmaKw 23..29 +| | | PragmaKw 23..29 "pragma" +| | WhiteSpace 29..30 +| | | WhiteSpace 29..30 " " +| | Circom 30..36 +| | | Circom 30..36 "circom" +| | WhiteSpace 36..37 +| | | WhiteSpace 36..37 " " +| | Version 37..42 +| | | Version 37..42 "2.0.0" +| | Semicolon 42..43 +| | | Semicolon 42..43 ";" +| EndLine 43..45 +| | EndLine 43..45 "\r\n" 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 index 33f7d40..5180e08 100644 --- 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 @@ -1,483 +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 "}" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + Block 0..456 +| LCurly 0..1 +| | LCurly 0..1 "{" +| EndLine 1..3 +| | EndLine 1..3 "\r\n" +| WhiteSpace 3..7 +| | WhiteSpace 3..7 " " +| CommentLine 7..22 +| | CommentLine 7..22 "// if ... else " +| EndLine 22..24 +| | EndLine 22..24 "\r\n" +| WhiteSpace 24..28 +| | WhiteSpace 24..28 " " +| StatementList 28..455 +| | IfStatement 28..128 +| | | IfKw 28..30 +| | | | IfKw 28..30 "if" +| | | LParen 30..31 +| | | | LParen 30..31 "(" +| | | Expression 31..37 +| | | | Equal 31..37 +| | | | | ExpressionAtom 31..32 +| | | | | | Identifier 31..32 +| | | | | | | Identifier 31..32 "n" +| | | | | WhiteSpace 32..33 +| | | | | | WhiteSpace 32..33 " " +| | | | | Equal 33..35 +| | | | | | Equal 33..35 "==" +| | | | | WhiteSpace 35..36 +| | | | | | WhiteSpace 35..36 " " +| | | | | ExpressionAtom 36..37 +| | | | | | Number 36..37 +| | | | | | | Number 36..37 "2" +| | | RParen 37..38 +| | | | RParen 37..38 ")" +| | | WhiteSpace 38..39 +| | | | WhiteSpace 38..39 " " +| | | Block 39..94 +| | | | LCurly 39..40 +| | | | | LCurly 39..40 "{" +| | | | EndLine 40..42 +| | | | | EndLine 40..42 "\r\n" +| | | | WhiteSpace 42..50 +| | | | | WhiteSpace 42..50 " " +| | | | StatementList 50..93 +| | | | | AssignStatement 50..59 +| | | | | | Expression 50..54 +| | | | | | | ExpressionAtom 50..53 +| | | | | | | | Identifier 50..53 +| | | | | | | | | Identifier 50..53 "aux" +| | | | | | | WhiteSpace 53..54 +| | | | | | | | WhiteSpace 53..54 " " +| | | | | | RAssignConstraintSignal 54..57 +| | | | | | | RAssignConstraintSignal 54..57 "<==" +| | | | | | WhiteSpace 57..58 +| | | | | | | WhiteSpace 57..58 " " +| | | | | | Expression 58..59 +| | | | | | | ExpressionAtom 58..59 +| | | | | | | | Number 58..59 +| | | | | | | | | Number 58..59 "2" +| | | | | Semicolon 59..60 +| | | | | | Semicolon 59..60 ";" +| | | | | EndLine 60..62 +| | | | | | EndLine 60..62 "\r\n" +| | | | | WhiteSpace 62..70 +| | | | | | WhiteSpace 62..70 " " +| | | | | AssignStatement 70..86 +| | | | | | Expression 70..74 +| | | | | | | ExpressionAtom 70..73 +| | | | | | | | Identifier 70..73 +| | | | | | | | | Identifier 70..73 "out" +| | | | | | | WhiteSpace 73..74 +| | | | | | | | WhiteSpace 73..74 " " +| | | | | | RAssignConstraintSignal 74..77 +| | | | | | | RAssignConstraintSignal 74..77 "<==" +| | | | | | WhiteSpace 77..78 +| | | | | | | WhiteSpace 77..78 " " +| | | | | | Expression 78..86 +| | | | | | | Call 78..86 +| | | | | | | | Call 78..81 +| | | | | | | | | ExpressionAtom 78..79 +| | | | | | | | | | Identifier 78..79 +| | | | | | | | | | | Identifier 78..79 "B" +| | | | | | | | | LParen 79..80 +| | | | | | | | | | LParen 79..80 "(" +| | | | | | | | | RParen 80..81 +| | | | | | | | | | RParen 80..81 ")" +| | | | | | | | LParen 81..82 +| | | | | | | | | LParen 81..82 "(" +| | | | | | | | Expression 82..85 +| | | | | | | | | ExpressionAtom 82..85 +| | | | | | | | | | Identifier 82..85 +| | | | | | | | | | | Identifier 82..85 "aux" +| | | | | | | | RParen 85..86 +| | | | | | | | | RParen 85..86 ")" +| | | | | Semicolon 86..87 +| | | | | | Semicolon 86..87 ";" +| | | | | EndLine 87..89 +| | | | | | EndLine 87..89 "\r\n" +| | | | | WhiteSpace 89..93 +| | | | | | WhiteSpace 89..93 " " +| | | | RCurly 93..94 +| | | | | RCurly 93..94 "}" +| | | WhiteSpace 94..95 +| | | | WhiteSpace 94..95 " " +| | | ElseKw 95..99 +| | | | ElseKw 95..99 "else" +| | | WhiteSpace 99..100 +| | | | WhiteSpace 99..100 " " +| | | Block 100..128 +| | | | LCurly 100..101 +| | | | | LCurly 100..101 "{" +| | | | EndLine 101..103 +| | | | | EndLine 101..103 "\r\n" +| | | | WhiteSpace 103..111 +| | | | | WhiteSpace 103..111 " " +| | | | StatementList 111..127 +| | | | | AssignStatement 111..120 +| | | | | | Expression 111..115 +| | | | | | | ExpressionAtom 111..114 +| | | | | | | | Identifier 111..114 +| | | | | | | | | Identifier 111..114 "out" +| | | | | | | WhiteSpace 114..115 +| | | | | | | | WhiteSpace 114..115 " " +| | | | | | RAssignConstraintSignal 115..118 +| | | | | | | RAssignConstraintSignal 115..118 "<==" +| | | | | | WhiteSpace 118..119 +| | | | | | | WhiteSpace 118..119 " " +| | | | | | Expression 119..120 +| | | | | | | ExpressionAtom 119..120 +| | | | | | | | Number 119..120 +| | | | | | | | | Number 119..120 "5" +| | | | | Semicolon 120..121 +| | | | | | Semicolon 120..121 ";" +| | | | | EndLine 121..123 +| | | | | | EndLine 121..123 "\r\n" +| | | | | WhiteSpace 123..127 +| | | | | | WhiteSpace 123..127 " " +| | | | RCurly 127..128 +| | | | | RCurly 127..128 "}" +| | EndLine 128..130 +| | | EndLine 128..130 "\r\n" +| | EndLine 130..132 +| | | EndLine 130..132 "\r\n" +| | WhiteSpace 132..136 +| | | WhiteSpace 132..136 " " +| | CommentLine 136..142 +| | | CommentLine 136..142 "// for" +| | EndLine 142..144 +| | | EndLine 142..144 "\r\n" +| | WhiteSpace 144..148 +| | | WhiteSpace 144..148 " " +| | ForLoop 148..218 +| | | ForKw 148..151 +| | | | ForKw 148..151 "for" +| | | LParen 151..152 +| | | | LParen 151..152 "(" +| | | VarDecl 152..161 +| | | | VarKw 152..155 +| | | | | VarKw 152..155 "var" +| | | | WhiteSpace 155..156 +| | | | | WhiteSpace 155..156 " " +| | | | ComplexIdentifier 156..158 +| | | | | Identifier 156..157 +| | | | | | Identifier 156..157 "i" +| | | | | WhiteSpace 157..158 +| | | | | | WhiteSpace 157..158 " " +| | | | Assign 158..159 +| | | | | Assign 158..159 "=" +| | | | WhiteSpace 159..160 +| | | | | WhiteSpace 159..160 " " +| | | | Expression 160..161 +| | | | | ExpressionAtom 160..161 +| | | | | | Number 160..161 +| | | | | | | Number 160..161 "0" +| | | Semicolon 161..162 +| | | | Semicolon 161..162 ";" +| | | WhiteSpace 162..163 +| | | | WhiteSpace 162..163 " " +| | | Expression 163..170 +| | | | LessThan 163..170 +| | | | | ExpressionAtom 163..164 +| | | | | | Identifier 163..164 +| | | | | | | Identifier 163..164 "i" +| | | | | WhiteSpace 164..165 +| | | | | | WhiteSpace 164..165 " " +| | | | | LessThan 165..166 +| | | | | | LessThan 165..166 "<" +| | | | | WhiteSpace 166..167 +| | | | | | WhiteSpace 166..167 " " +| | | | | Sub 167..170 +| | | | | | ExpressionAtom 167..168 +| | | | | | | Identifier 167..168 +| | | | | | | | Identifier 167..168 "N" +| | | | | | Sub 168..169 +| | | | | | | Sub 168..169 "-" +| | | | | | ExpressionAtom 169..170 +| | | | | | | Number 169..170 +| | | | | | | | Number 169..170 "1" +| | | Semicolon 170..171 +| | | | Semicolon 170..171 ";" +| | | WhiteSpace 171..172 +| | | | WhiteSpace 171..172 " " +| | | AssignStatement 172..175 +| | | | Expression 172..175 +| | | | | UnitInc 172..175 +| | | | | | ExpressionAtom 172..173 +| | | | | | | Identifier 172..173 +| | | | | | | | Identifier 172..173 "i" +| | | | | | UnitInc 173..175 +| | | | | | | UnitInc 173..175 "++" +| | | RParen 175..176 +| | | | RParen 175..176 ")" +| | | Block 176..218 +| | | | LCurly 176..177 +| | | | | LCurly 176..177 "{" +| | | | EndLine 177..179 +| | | | | EndLine 177..179 "\r\n" +| | | | WhiteSpace 179..187 +| | | | | WhiteSpace 179..187 " " +| | | | StatementList 187..217 +| | | | | AssignStatement 187..210 +| | | | | | Expression 187..195 +| | | | | | | ArrayQuery 187..194 +| | | | | | | | ExpressionAtom 187..191 +| | | | | | | | | Identifier 187..191 +| | | | | | | | | | Identifier 187..191 "comp" +| | | | | | | | LBracket 191..192 +| | | | | | | | | LBracket 191..192 "[" +| | | | | | | | Expression 192..193 +| | | | | | | | | ExpressionAtom 192..193 +| | | | | | | | | | Identifier 192..193 +| | | | | | | | | | | Identifier 192..193 "i" +| | | | | | | | RBracket 193..194 +| | | | | | | | | RBracket 193..194 "]" +| | | | | | | WhiteSpace 194..195 +| | | | | | | | WhiteSpace 194..195 " " +| | | | | | Assign 195..196 +| | | | | | | Assign 195..196 "=" +| | | | | | WhiteSpace 196..197 +| | | | | | | WhiteSpace 196..197 " " +| | | | | | Expression 197..210 +| | | | | | | Call 197..210 +| | | | | | | | ExpressionAtom 197..208 +| | | | | | | | | Identifier 197..208 +| | | | | | | | | | Identifier 197..208 "Multiplier2" +| | | | | | | | LParen 208..209 +| | | | | | | | | LParen 208..209 "(" +| | | | | | | | RParen 209..210 +| | | | | | | | | RParen 209..210 ")" +| | | | | Semicolon 210..211 +| | | | | | Semicolon 210..211 ";" +| | | | | EndLine 211..213 +| | | | | | EndLine 211..213 "\r\n" +| | | | | WhiteSpace 213..217 +| | | | | | WhiteSpace 213..217 " " +| | | | RCurly 217..218 +| | | | | RCurly 217..218 "}" +| | EndLine 218..220 +| | | EndLine 218..220 "\r\n" +| | EndLine 220..222 +| | | EndLine 220..222 "\r\n" +| | WhiteSpace 222..226 +| | | WhiteSpace 222..226 " " +| | CommentLine 226..234 +| | | CommentLine 226..234 "// while" +| | EndLine 234..236 +| | | EndLine 234..236 "\r\n" +| | WhiteSpace 236..240 +| | | WhiteSpace 236..240 " " +| | WhileLoop 240..293 +| | | WhileKw 240..245 +| | | | WhileKw 240..245 "while" +| | | WhiteSpace 245..246 +| | | | WhiteSpace 245..246 " " +| | | LParen 246..247 +| | | | LParen 246..247 "(" +| | | Expression 247..252 +| | | | LessThan 247..252 +| | | | | Sub 247..250 +| | | | | | ExpressionAtom 247..248 +| | | | | | | Identifier 247..248 +| | | | | | | | Identifier 247..248 "n" +| | | | | | Sub 248..249 +| | | | | | | Sub 248..249 "-" +| | | | | | ExpressionAtom 249..250 +| | | | | | | Number 249..250 +| | | | | | | | Number 249..250 "1" +| | | | | LessThan 250..251 +| | | | | | LessThan 250..251 "<" +| | | | | ExpressionAtom 251..252 +| | | | | | Identifier 251..252 +| | | | | | | Identifier 251..252 "a" +| | | RParen 252..253 +| | | | RParen 252..253 ")" +| | | WhiteSpace 253..254 +| | | | WhiteSpace 253..254 " " +| | | Block 254..293 +| | | | LCurly 254..255 +| | | | | LCurly 254..255 "{" +| | | | EndLine 255..257 +| | | | | EndLine 255..257 "\r\n" +| | | | WhiteSpace 257..265 +| | | | | WhiteSpace 257..265 " " +| | | | StatementList 265..292 +| | | | | AssignStatement 265..268 +| | | | | | Expression 265..268 +| | | | | | | UnitInc 265..268 +| | | | | | | | ExpressionAtom 265..266 +| | | | | | | | | Identifier 265..266 +| | | | | | | | | | Identifier 265..266 "r" +| | | | | | | | UnitInc 266..268 +| | | | | | | | | UnitInc 266..268 "++" +| | | | | Semicolon 268..269 +| | | | | | Semicolon 268..269 ";" +| | | | | EndLine 269..271 +| | | | | | EndLine 269..271 "\r\n" +| | | | | WhiteSpace 271..279 +| | | | | | WhiteSpace 271..279 " " +| | | | | AssignStatement 279..285 +| | | | | | Expression 279..281 +| | | | | | | ExpressionAtom 279..280 +| | | | | | | | Identifier 279..280 +| | | | | | | | | Identifier 279..280 "n" +| | | | | | | WhiteSpace 280..281 +| | | | | | | | WhiteSpace 280..281 " " +| | | | | | MulAssign 281..283 +| | | | | | | MulAssign 281..283 "*=" +| | | | | | WhiteSpace 283..284 +| | | | | | | WhiteSpace 283..284 " " +| | | | | | Expression 284..285 +| | | | | | | ExpressionAtom 284..285 +| | | | | | | | Number 284..285 +| | | | | | | | | Number 284..285 "2" +| | | | | Semicolon 285..286 +| | | | | | Semicolon 285..286 ";" +| | | | | EndLine 286..288 +| | | | | | EndLine 286..288 "\r\n" +| | | | | WhiteSpace 288..292 +| | | | | | WhiteSpace 288..292 " " +| | | | RCurly 292..293 +| | | | | RCurly 292..293 "}" +| | EndLine 293..295 +| | | EndLine 293..295 "\r\n" +| | EndLine 295..297 +| | | EndLine 295..297 "\r\n" +| | WhiteSpace 297..301 +| | | WhiteSpace 297..301 " " +| | CommentLine 301..310 +| | | CommentLine 301..310 "// return" +| | EndLine 310..312 +| | | EndLine 310..312 "\r\n" +| | WhiteSpace 312..316 +| | | WhiteSpace 312..316 " " +| | ReturnStatement 316..324 +| | | ReturnKw 316..322 +| | | | ReturnKw 316..322 "return" +| | | WhiteSpace 322..323 +| | | | WhiteSpace 322..323 " " +| | | Expression 323..324 +| | | | ExpressionAtom 323..324 +| | | | | Identifier 323..324 +| | | | | | Identifier 323..324 "r" +| | Semicolon 324..325 +| | | Semicolon 324..325 ";" +| | EndLine 325..327 +| | | EndLine 325..327 "\r\n" +| | EndLine 327..329 +| | | EndLine 327..329 "\r\n" +| | WhiteSpace 329..333 +| | | WhiteSpace 329..333 " " +| | CommentLine 333..339 +| | | CommentLine 333..339 "// log" +| | EndLine 339..341 +| | | EndLine 339..341 "\r\n" +| | WhiteSpace 341..345 +| | | WhiteSpace 341..345 " " +| | LogStatement 345..366 +| | | LogKw 345..348 +| | | | LogKw 345..348 "log" +| | | LParen 348..349 +| | | | LParen 348..349 "(" +| | | CircomString 349..355 +| | | | CircomString 349..355 "\"hash\"" +| | | Comma 355..356 +| | | | Comma 355..356 "," +| | | WhiteSpace 356..357 +| | | | WhiteSpace 356..357 " " +| | | Expression 357..365 +| | | | ComponentCall 357..365 +| | | | | ExpressionAtom 357..361 +| | | | | | Identifier 357..361 +| | | | | | | Identifier 357..361 "hash" +| | | | | Dot 361..362 +| | | | | | Dot 361..362 "." +| | | | | Identifier 362..365 +| | | | | | Identifier 362..365 "out" +| | | RParen 365..366 +| | | | RParen 365..366 ")" +| | Semicolon 366..367 +| | | Semicolon 366..367 ";" +| | EndLine 367..369 +| | | EndLine 367..369 "\r\n" +| | EndLine 369..371 +| | | EndLine 369..371 "\r\n" +| | WhiteSpace 371..375 +| | | WhiteSpace 371..375 " " +| | CommentLine 375..384 +| | | CommentLine 375..384 "// assert" +| | EndLine 384..386 +| | | EndLine 384..386 "\r\n" +| | WhiteSpace 386..390 +| | | WhiteSpace 386..390 " " +| | AssertStatement 390..403 +| | | AssertKw 390..396 +| | | | AssertKw 390..396 "assert" +| | | LParen 396..397 +| | | | LParen 396..397 "(" +| | | Expression 397..402 +| | | | GreaterThan 397..402 +| | | | | ExpressionAtom 397..398 +| | | | | | Identifier 397..398 +| | | | | | | Identifier 397..398 "a" +| | | | | WhiteSpace 398..399 +| | | | | | WhiteSpace 398..399 " " +| | | | | GreaterThan 399..400 +| | | | | | GreaterThan 399..400 ">" +| | | | | WhiteSpace 400..401 +| | | | | | WhiteSpace 400..401 " " +| | | | | ExpressionAtom 401..402 +| | | | | | Number 401..402 +| | | | | | | Number 401..402 "2" +| | | RParen 402..403 +| | | | RParen 402..403 ")" +| | Semicolon 403..404 +| | | Semicolon 403..404 ";" +| | EndLine 404..406 +| | | EndLine 404..406 "\r\n" +| | EndLine 406..408 +| | | EndLine 406..408 "\r\n" +| | WhiteSpace 408..412 +| | | WhiteSpace 408..412 " " +| | CommentLine 412..435 +| | | CommentLine 412..435 "// assignment statement" +| | EndLine 435..437 +| | | EndLine 435..437 "\r\n" +| | WhiteSpace 437..441 +| | | WhiteSpace 437..441 " " +| | AssignStatement 441..452 +| | | Expression 441..443 +| | | | ExpressionAtom 441..442 +| | | | | Identifier 441..442 +| | | | | | Identifier 441..442 "c" +| | | | WhiteSpace 442..443 +| | | | | WhiteSpace 442..443 " " +| | | RAssignConstraintSignal 443..446 +| | | | RAssignConstraintSignal 443..446 "<==" +| | | WhiteSpace 446..447 +| | | | WhiteSpace 446..447 " " +| | | Expression 447..452 +| | | | Mul 447..452 +| | | | | ExpressionAtom 447..448 +| | | | | | Identifier 447..448 +| | | | | | | Identifier 447..448 "a" +| | | | | WhiteSpace 448..449 +| | | | | | WhiteSpace 448..449 " " +| | | | | Mul 449..450 +| | | | | | Mul 449..450 "*" +| | | | | WhiteSpace 450..451 +| | | | | | WhiteSpace 450..451 " " +| | | | | ExpressionAtom 451..452 +| | | | | | Identifier 451..452 +| | | | | | | Identifier 451..452 "b" +| | Semicolon 452..453 +| | | Semicolon 452..453 ";" +| | EndLine 453..455 +| | | EndLine 453..455 "\r\n" +| RCurly 455..456 +| | RCurly 455..456 "}" 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 5997ae2..2ced257 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 @@ -1,247 +1,247 @@ ---- -source: crates/syntax/src/syntax.rs -expression: "crate :: view_syntax :: view_ast(& syntax)" ---- - TemplateDef 0..349 -| TemplateKw 0..8 -| | TemplateKw 0..8 "template" -| WhiteSpace 8..9 -| | WhiteSpace 8..9 " " -| TemplateName 9..20 -| | Identifier 9..20 -| | | Identifier 9..20 "MultiplierN" -| WhiteSpace 20..21 -| | WhiteSpace 20..21 " " -| ParameterList 21..31 -| | LParen 21..22 -| | | LParen 21..22 "(" -| | Identifier 22..23 -| | | Identifier 22..23 "N" -| | Comma 23..24 -| | | Comma 23..24 "," -| | WhiteSpace 24..25 -| | | WhiteSpace 24..25 " " -| | Identifier 25..26 -| | | Identifier 25..26 "P" -| | Comma 26..27 -| | | Comma 26..27 "," -| | WhiteSpace 27..28 -| | | WhiteSpace 27..28 " " -| | Identifier 28..30 -| | | Identifier 28..30 "QQ" -| | RParen 30..31 -| | | RParen 30..31 ")" -| WhiteSpace 31..32 -| | WhiteSpace 31..32 " " -| Block 32..349 -| | LCurly 32..33 -| | | LCurly 32..33 "{" -| | EndLine 33..35 -| | | EndLine 33..35 "\r\n" -| | WhiteSpace 35..47 -| | | WhiteSpace 35..47 " " -| | CommentLine 47..87 -| | | CommentLine 47..87 "//Declaration of signals and components." -| | EndLine 87..89 -| | | EndLine 87..89 "\r\n" -| | WhiteSpace 89..101 -| | | WhiteSpace 89..101 " " -| | StatementList 101..348 -| | | InputSignalDecl 101..119 -| | | | SignalHeader 101..114 -| | | | | SignalKw 101..107 -| | | | | | SignalKw 101..107 "signal" -| | | | | WhiteSpace 107..108 -| | | | | | WhiteSpace 107..108 " " -| | | | | InputKw 108..113 -| | | | | | InputKw 108..113 "input" -| | | | | WhiteSpace 113..114 -| | | | | | WhiteSpace 113..114 " " -| | | | ComplexIdentifier 114..119 -| | | | | Identifier 114..116 -| | | | | | Identifier 114..116 "in" -| | | | | LBracket 116..117 -| | | | | | LBracket 116..117 "[" -| | | | | Expression 117..118 -| | | | | | ExpressionAtom 117..118 -| | | | | | | Identifier 117..118 -| | | | | | | | Identifier 117..118 "N" -| | | | | RBracket 118..119 -| | | | | | RBracket 118..119 "]" -| | | Semicolon 119..120 -| | | | Semicolon 119..120 ";" -| | | EndLine 120..122 -| | | | EndLine 120..122 "\r\n" -| | | WhiteSpace 122..134 -| | | | WhiteSpace 122..134 " " -| | | OutputSignalDecl 134..151 -| | | | SignalHeader 134..148 -| | | | | SignalKw 134..140 -| | | | | | SignalKw 134..140 "signal" -| | | | | WhiteSpace 140..141 -| | | | | | WhiteSpace 140..141 " " -| | | | | OutputKw 141..147 -| | | | | | OutputKw 141..147 "output" -| | | | | WhiteSpace 147..148 -| | | | | | WhiteSpace 147..148 " " -| | | | ComplexIdentifier 148..151 -| | | | | Identifier 148..151 -| | | | | | Identifier 148..151 "out" -| | | Semicolon 151..152 -| | | | Semicolon 151..152 ";" -| | | EndLine 152..154 -| | | | EndLine 152..154 "\r\n" -| | | WhiteSpace 154..166 -| | | | WhiteSpace 154..166 " " -| | | ComponentDecl 166..185 -| | | | ComponentKw 166..175 -| | | | | ComponentKw 166..175 "component" -| | | | WhiteSpace 175..176 -| | | | | WhiteSpace 175..176 " " -| | | | ComplexIdentifier 176..185 -| | | | | Identifier 176..180 -| | | | | | Identifier 176..180 "comp" -| | | | | LBracket 180..181 -| | | | | | LBracket 180..181 "[" -| | | | | Expression 181..184 -| | | | | | Sub 181..184 -| | | | | | | ExpressionAtom 181..182 -| | | | | | | | Identifier 181..182 -| | | | | | | | | Identifier 181..182 "N" -| | | | | | | Sub 182..183 -| | | | | | | | Sub 182..183 "-" -| | | | | | | ExpressionAtom 183..184 -| | | | | | | | Number 183..184 -| | | | | | | | | Number 183..184 "1" -| | | | | RBracket 184..185 -| | | | | | RBracket 184..185 "]" -| | | Semicolon 185..186 -| | | | Semicolon 185..186 ";" -| | | EndLine 186..188 -| | | | EndLine 186..188 "\r\n" -| | | WhiteSpace 188..201 -| | | | WhiteSpace 188..201 " " -| | | EndLine 201..203 -| | | | EndLine 201..203 "\r\n" -| | | WhiteSpace 203..215 -| | | | WhiteSpace 203..215 " " -| | | CommentLine 215..228 -| | | | CommentLine 215..228 "//Statements." -| | | EndLine 228..230 -| | | | EndLine 228..230 "\r\n" -| | | WhiteSpace 230..242 -| | | | WhiteSpace 230..242 " " -| | | 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 ")" -| | | | 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 -| | | | WhiteSpace 330..346 " " -| | | EndLine 346..348 -| | | | EndLine 346..348 "\r\n" -| | RCurly 348..349 -| | | RCurly 348..349 "}" +--- +source: crates/syntax/src/syntax.rs +expression: "crate :: view_syntax :: view_ast(& syntax)" +--- + TemplateDef 0..349 +| TemplateKw 0..8 +| | TemplateKw 0..8 "template" +| WhiteSpace 8..9 +| | WhiteSpace 8..9 " " +| TemplateName 9..20 +| | Identifier 9..20 +| | | Identifier 9..20 "MultiplierN" +| WhiteSpace 20..21 +| | WhiteSpace 20..21 " " +| ParameterList 21..31 +| | LParen 21..22 +| | | LParen 21..22 "(" +| | Identifier 22..23 +| | | Identifier 22..23 "N" +| | Comma 23..24 +| | | Comma 23..24 "," +| | WhiteSpace 24..25 +| | | WhiteSpace 24..25 " " +| | Identifier 25..26 +| | | Identifier 25..26 "P" +| | Comma 26..27 +| | | Comma 26..27 "," +| | WhiteSpace 27..28 +| | | WhiteSpace 27..28 " " +| | Identifier 28..30 +| | | Identifier 28..30 "QQ" +| | RParen 30..31 +| | | RParen 30..31 ")" +| WhiteSpace 31..32 +| | WhiteSpace 31..32 " " +| Block 32..349 +| | LCurly 32..33 +| | | LCurly 32..33 "{" +| | EndLine 33..35 +| | | EndLine 33..35 "\r\n" +| | WhiteSpace 35..47 +| | | WhiteSpace 35..47 " " +| | CommentLine 47..87 +| | | CommentLine 47..87 "//Declaration of signals and components." +| | EndLine 87..89 +| | | EndLine 87..89 "\r\n" +| | WhiteSpace 89..101 +| | | WhiteSpace 89..101 " " +| | StatementList 101..348 +| | | InputSignalDecl 101..119 +| | | | SignalHeader 101..114 +| | | | | SignalKw 101..107 +| | | | | | SignalKw 101..107 "signal" +| | | | | WhiteSpace 107..108 +| | | | | | WhiteSpace 107..108 " " +| | | | | InputKw 108..113 +| | | | | | InputKw 108..113 "input" +| | | | | WhiteSpace 113..114 +| | | | | | WhiteSpace 113..114 " " +| | | | ComplexIdentifier 114..119 +| | | | | Identifier 114..116 +| | | | | | Identifier 114..116 "in" +| | | | | LBracket 116..117 +| | | | | | LBracket 116..117 "[" +| | | | | Expression 117..118 +| | | | | | ExpressionAtom 117..118 +| | | | | | | Identifier 117..118 +| | | | | | | | Identifier 117..118 "N" +| | | | | RBracket 118..119 +| | | | | | RBracket 118..119 "]" +| | | Semicolon 119..120 +| | | | Semicolon 119..120 ";" +| | | EndLine 120..122 +| | | | EndLine 120..122 "\r\n" +| | | WhiteSpace 122..134 +| | | | WhiteSpace 122..134 " " +| | | OutputSignalDecl 134..151 +| | | | SignalHeader 134..148 +| | | | | SignalKw 134..140 +| | | | | | SignalKw 134..140 "signal" +| | | | | WhiteSpace 140..141 +| | | | | | WhiteSpace 140..141 " " +| | | | | OutputKw 141..147 +| | | | | | OutputKw 141..147 "output" +| | | | | WhiteSpace 147..148 +| | | | | | WhiteSpace 147..148 " " +| | | | ComplexIdentifier 148..151 +| | | | | Identifier 148..151 +| | | | | | Identifier 148..151 "out" +| | | Semicolon 151..152 +| | | | Semicolon 151..152 ";" +| | | EndLine 152..154 +| | | | EndLine 152..154 "\r\n" +| | | WhiteSpace 154..166 +| | | | WhiteSpace 154..166 " " +| | | ComponentDecl 166..185 +| | | | ComponentKw 166..175 +| | | | | ComponentKw 166..175 "component" +| | | | WhiteSpace 175..176 +| | | | | WhiteSpace 175..176 " " +| | | | ComplexIdentifier 176..185 +| | | | | Identifier 176..180 +| | | | | | Identifier 176..180 "comp" +| | | | | LBracket 180..181 +| | | | | | LBracket 180..181 "[" +| | | | | Expression 181..184 +| | | | | | Sub 181..184 +| | | | | | | ExpressionAtom 181..182 +| | | | | | | | Identifier 181..182 +| | | | | | | | | Identifier 181..182 "N" +| | | | | | | Sub 182..183 +| | | | | | | | Sub 182..183 "-" +| | | | | | | ExpressionAtom 183..184 +| | | | | | | | Number 183..184 +| | | | | | | | | Number 183..184 "1" +| | | | | RBracket 184..185 +| | | | | | RBracket 184..185 "]" +| | | Semicolon 185..186 +| | | | Semicolon 185..186 ";" +| | | EndLine 186..188 +| | | | EndLine 186..188 "\r\n" +| | | WhiteSpace 188..201 +| | | | WhiteSpace 188..201 " " +| | | EndLine 201..203 +| | | | EndLine 201..203 "\r\n" +| | | WhiteSpace 203..215 +| | | | WhiteSpace 203..215 " " +| | | CommentLine 215..228 +| | | | CommentLine 215..228 "//Statements." +| | | EndLine 228..230 +| | | | EndLine 228..230 "\r\n" +| | | WhiteSpace 230..242 +| | | | WhiteSpace 230..242 " " +| | | 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 ")" +| | | | 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 +| | | | WhiteSpace 330..346 " " +| | | EndLine 346..348 +| | | | EndLine 346..348 "\r\n" +| | RCurly 348..349 +| | | RCurly 348..349 "}" diff --git a/crates/syntax/src/syntax.rs b/crates/syntax/src/syntax.rs index bc07f3b..f7a87ca 100644 --- a/crates/syntax/src/syntax.rs +++ b/crates/syntax/src/syntax.rs @@ -87,11 +87,16 @@ pub fn syntax_node_from_source(source: &str, scope: Scope) -> SyntaxNode { syntax } +#[cfg(test)] +mod test_utils; + #[cfg(test)] mod tests { - use crate::test_syntax; use parser::grammar::entry::Scope; + use crate::syntax::test_utils::view_ast; + use crate::test_syntax; + #[test] fn pragma_happy_test() { test_syntax!("/src/test_files/happy/pragma.circom", Scope::Pragma); diff --git a/crates/syntax/src/view_syntax.rs b/crates/syntax/src/syntax/test_utils.rs similarity index 70% rename from crates/syntax/src/view_syntax.rs rename to crates/syntax/src/syntax/test_utils.rs index 270c710..6a876ef 100644 --- a/crates/syntax/src/view_syntax.rs +++ b/crates/syntax/src/syntax/test_utils.rs @@ -1,17 +1,20 @@ -use crate::syntax_node::SyntaxNode; - pub use rowan::{NodeOrToken, WalkEvent}; -fn level_str(level: u32) -> String { - let mut ans = String::from(""); +use crate::syntax_node::SyntaxNode; - for _i in 0..level { - ans.push_str("| "); - } - ans +#[macro_export] +macro_rules! test_syntax { + ($file_path:expr, $scope: expr) => { + let crate_path = std::env::var("CARGO_MANIFEST_DIR").unwrap(); + + let full_path = format!("{}{}", crate_path, $file_path); + let source = std::fs::read_to_string(full_path).expect("Should not failed"); + let syntax = crate::syntax::syntax_node_from_source(&source, $scope); + insta::assert_snapshot!($file_path, view_ast(&syntax)); + }; } -pub(crate) fn view_ast(node: &SyntaxNode) -> String { +pub fn view_ast(node: &SyntaxNode) -> String { let mut level = 0; let mut result = String::new(); for event in node.preorder_with_tokens() { @@ -47,3 +50,12 @@ pub(crate) fn view_ast(node: &SyntaxNode) -> String { } return result; } + +fn level_str(level: u32) -> String { + let mut ans = String::from(""); + + for _i in 0..level { + ans.push_str("| "); + } + ans +} diff --git a/crates/syntax/src/test_files/happy/statements.circom b/crates/syntax/src/test_files/happy/statements.circom index 77da8af..7e03425 100644 --- a/crates/syntax/src/test_files/happy/statements.circom +++ b/crates/syntax/src/test_files/happy/statements.circom @@ -1,32 +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; +{ + // 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 diff --git a/crates/syntax/src/utils.rs b/crates/syntax/src/utils.rs deleted file mode 100644 index f173682..0000000 --- a/crates/syntax/src/utils.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[macro_export] -macro_rules! test_syntax { - ($file_path:expr, $scope: expr) => { - let crate_path = std::env::var("CARGO_MANIFEST_DIR").unwrap(); - let full_path = format!("{}{}", crate_path, $file_path); - let source = std::fs::read_to_string(full_path).expect("Should not failed"); - let syntax = crate::syntax::syntax_node_from_source(&source, $scope); - insta::assert_snapshot!($file_path, crate::view_syntax::view_ast(&syntax)); - }; -} diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 5fe9391..7b711b3 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -7,11 +7,7 @@ edition = "2021" rust-version.workspace = true [dependencies] -anyhow = "1.0.62" -flate2 = "1.0.24" -write-json = "0.1.2" +anyhow = { workspace = true } xshell = "0.2.2" xflags = "0.3.0" -time = { version = "0.3", default-features = false } -zip = { version = "0.6", default-features = false, features = ["deflate", "time"] } -# Avoid adding more dependencies to this crate \ No newline at end of file +# Avoid adding more dependencies to this crate