mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-12-23 18:21:38 +03:00
Migrates ast to leo-ast module
This commit is contained in:
parent
e985027e86
commit
a72a333877
12
Cargo.lock
generated
12
Cargo.lock
generated
@ -497,6 +497,17 @@ dependencies = [
|
|||||||
"toml",
|
"toml",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "leo-ast"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"from-pest",
|
||||||
|
"lazy_static",
|
||||||
|
"pest",
|
||||||
|
"pest-ast",
|
||||||
|
"pest_derive",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "leo-compiler"
|
name = "leo-compiler"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -504,6 +515,7 @@ dependencies = [
|
|||||||
"from-pest",
|
"from-pest",
|
||||||
"hex",
|
"hex",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
"leo-ast",
|
||||||
"log",
|
"log",
|
||||||
"pest",
|
"pest",
|
||||||
"pest-ast",
|
"pest-ast",
|
||||||
|
@ -13,7 +13,7 @@ name = "leo"
|
|||||||
path = "leo/main.rs"
|
path = "leo/main.rs"
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [ "compiler" ]
|
members = [ "ast", "compiler" ]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
leo-compiler = { path = "compiler", version = "0.1.0" }
|
leo-compiler = { path = "compiler", version = "0.1.0" }
|
||||||
|
12
ast/Cargo.toml
Normal file
12
ast/Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "leo-ast"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["howardwu <howardwu@berkeley.edu>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
from-pest = { version = "0.3.1" }
|
||||||
|
lazy_static = { version = "1.3.0" }
|
||||||
|
pest = { version = "2.0" }
|
||||||
|
pest-ast = { version = "0.3.3" }
|
||||||
|
pest_derive = { version = "2.0" }
|
1
ast/README.md
Normal file
1
ast/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# leo-ast
|
10
ast/src/ast_for_statement.rs
Normal file
10
ast/src/ast_for_statement.rs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::statement_for))]
|
||||||
|
pub struct ForStatement<'ast> {
|
||||||
|
pub index: Identifier<'ast>,
|
||||||
|
pub start: Expression<'ast>,
|
||||||
|
pub stop: Expression<'ast>,
|
||||||
|
pub statements: Vec<Statement<'ast>>,
|
||||||
|
#[pest_ast(outer())]
|
||||||
|
pub span: Span<'ast>,
|
||||||
|
}
|
11
ast/src/lib.rs
Normal file
11
ast/src/lib.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate lazy_static;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate pest_derive;
|
||||||
|
|
||||||
|
extern crate from_pest;
|
||||||
|
extern crate pest;
|
||||||
|
extern crate pest_ast;
|
||||||
|
|
||||||
|
pub mod ast;
|
||||||
|
pub use ast::*;
|
@ -5,6 +5,8 @@ authors = ["The Aleo Team <hello@aleo.org>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
leo-ast = { path = "../ast", version = "0.1.0" }
|
||||||
|
|
||||||
snarkos-algorithms = { git = "ssh://git@github.com/AleoHQ/snarkOS.git", version = "0.8.0" }
|
snarkos-algorithms = { git = "ssh://git@github.com/AleoHQ/snarkOS.git", version = "0.8.0" }
|
||||||
snarkos-curves = { git = "ssh://git@github.com/AleoHQ/snarkOS.git", version = "0.8.0" }
|
snarkos-curves = { git = "ssh://git@github.com/AleoHQ/snarkOS.git", version = "0.8.0" }
|
||||||
snarkos-errors = { git = "ssh://git@github.com/AleoHQ/snarkOS.git", version = "0.8.0" }
|
snarkos-errors = { git = "ssh://git@github.com/AleoHQ/snarkOS.git", version = "0.8.0" }
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
//! Compiles a Leo program from a file path.
|
//! Compiles a Leo program from a file path.
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
ast,
|
|
||||||
constraints::{generate_constraints, generate_test_constraints, ConstrainedValue},
|
constraints::{generate_constraints, generate_test_constraints, ConstrainedValue},
|
||||||
errors::CompilerError,
|
errors::CompilerError,
|
||||||
GroupType, InputValue, Program,
|
GroupType, InputValue, Program,
|
||||||
};
|
};
|
||||||
|
use leo_ast::ast;
|
||||||
|
|
||||||
use snarkos_errors::gadgets::SynthesisError;
|
use snarkos_errors::gadgets::SynthesisError;
|
||||||
use snarkos_models::{
|
use snarkos_models::{
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
ast,
|
|
||||||
constraints::{ConstrainedProgram, ConstrainedValue},
|
constraints::{ConstrainedProgram, ConstrainedValue},
|
||||||
errors::constraints::ImportError,
|
errors::constraints::ImportError,
|
||||||
new_scope,
|
new_scope,
|
||||||
types::Program,
|
types::Program,
|
||||||
GroupType, Import,
|
GroupType, Import,
|
||||||
};
|
};
|
||||||
|
use leo_ast::ast;
|
||||||
|
|
||||||
use from_pest::FromPest;
|
use from_pest::FromPest;
|
||||||
use snarkos_models::{
|
use snarkos_models::{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::ast::Rule;
|
use leo_ast::ast::Rule;
|
||||||
|
|
||||||
use pest::error::Error;
|
use pest::error::Error;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::ast::Rule;
|
|
||||||
use crate::errors::{FunctionError, ImportError, IntegerError, SyntaxError};
|
use crate::errors::{FunctionError, ImportError, IntegerError, SyntaxError};
|
||||||
|
use leo_ast::ast::Rule;
|
||||||
|
|
||||||
use pest::error::Error;
|
use pest::error::Error;
|
||||||
use std::{io, path::PathBuf};
|
use std::{io, path::PathBuf};
|
||||||
|
@ -14,8 +14,6 @@ extern crate pest_ast;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate pest_derive;
|
extern crate pest_derive;
|
||||||
|
|
||||||
pub mod ast;
|
|
||||||
|
|
||||||
pub mod compiler;
|
pub mod compiler;
|
||||||
|
|
||||||
pub mod constraints;
|
pub mod constraints;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//! Logic to convert from an abstract syntax tree (ast) representation to a Leo program.
|
//! Logic to convert from an abstract syntax tree (ast) representation to a Leo program.
|
||||||
|
|
||||||
use crate::{ast, types, Import, ImportSymbol};
|
use crate::{types, Import, ImportSymbol};
|
||||||
|
use leo_ast::ast;
|
||||||
|
|
||||||
use snarkos_models::gadgets::utilities::{
|
use snarkos_models::gadgets::utilities::{
|
||||||
boolean::Boolean,
|
boolean::Boolean,
|
||||||
|
2
examples/fibonacci/.gitignore
vendored
Normal file
2
examples/fibonacci/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/output
|
||||||
|
/.leo
|
3
examples/fibonacci/Leo.toml
Normal file
3
examples/fibonacci/Leo.toml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[package]
|
||||||
|
name = "fibonacci"
|
||||||
|
version = "0.1.0"
|
14
examples/fibonacci/src/main.leo
Normal file
14
examples/fibonacci/src/main.leo
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
function fibonacci(i: u32) -> u32 {
|
||||||
|
if i == 0 {
|
||||||
|
return 0
|
||||||
|
} else if i == 1 {
|
||||||
|
return 1
|
||||||
|
} else {
|
||||||
|
return fibonacci(i - 1) + fibonacci(i - 2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The 'fibonacci' main function.
|
||||||
|
function main() -> u32 {
|
||||||
|
return fibonacci(1)
|
||||||
|
}
|
@ -1,5 +1,22 @@
|
|||||||
|
circuit PedersenHash {
|
||||||
|
parameters: u32[512]
|
||||||
|
static function new(parameters: u32[512]) -> Self {
|
||||||
|
return Self { parameters: parameters }
|
||||||
|
}
|
||||||
|
function hash(bits: bool[512]) -> u32 {
|
||||||
|
let mut digest: u32 = 0;
|
||||||
|
for i in 0..512 {
|
||||||
|
let base = if bits[i] ? parameters[i] : 0u32;
|
||||||
|
digest += base;
|
||||||
|
}
|
||||||
|
return digest
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The 'pedersen_hash' main function.
|
// The 'pedersen_hash' main function.
|
||||||
function main() -> u32 {
|
function main() -> u32 {
|
||||||
let a = 1 / 0;
|
let parameters = [0u32; 512];
|
||||||
return a
|
let pedersen = PedersenHash::new(parameters);
|
||||||
|
let input: bool[512] = [true; 512];
|
||||||
|
return pedersen.hash(input)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user