merge development

This commit is contained in:
collin 2020-04-22 11:43:00 -07:00
commit ccd6092ff3
26 changed files with 88 additions and 144 deletions

26
Cargo.lock generated
View File

@ -576,7 +576,19 @@ dependencies = [
] ]
[[package]] [[package]]
name = "language" name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "lazycell"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
[[package]]
name = "leo"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"from-pest", "from-pest",
@ -592,18 +604,6 @@ dependencies = [
"snarkos-models", "snarkos-models",
] ]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "lazycell"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.67" version = "0.2.67"

View File

@ -1,27 +1,27 @@
[package] [package]
name = "language" name = "leo"
version = "0.1.0" version = "0.1.0"
authors = ["howardwu <howardwu@berkeley.edu>"] authors = ["The Aleo Team <hello@aleo.org>"]
edition = "2018" edition = "2018"
[lib] [lib]
name = "language" name = "leo"
path = "src/lib.rs" path = "src/lib.rs"
[[bin]] [[bin]]
name = "snarkLang" name = "leo"
path = "src/main.rs" path = "src/main.rs"
[dependencies] [dependencies]
from-pest = "0.3.1" snarkos-algorithms = { path = "../snarkOS/algorithms", version = "0.8.0" }
lazy_static = "1.3.0" snarkos-curves = { path = "../snarkOS/curves", version = "0.8.0" }
pest = "2.0" snarkos-errors = { path = "../snarkOS/errors", version = "0.8.0" }
pest_derive = "2.0" snarkos-gadgets = { path = "../snarkOS/gadgets", version = "0.8.0" }
pest-ast = "0.3.3" snarkos-models = { path = "../snarkOS/models", version = "0.8.0" }
rand = { version = "0.7" }
snarkos-algorithms = { path = "../snarkOS/algorithms" } from-pest = { version = "0.3.1" }
snarkos-curves = { path = "../snarkOS/curves" } lazy_static = { version = "1.3.0" }
snarkos-errors = { path = "../snarkOS/errors" } pest = { version = "2.0" }
snarkos-gadgets = { path = "../snarkOS/gadgets" } pest-ast = { version = "0.3.3" }
snarkos-models = { path = "../snarkOS/models" } pest_derive = { version = "2.0" }
rand = { version = "0.7" }

View File

@ -1 +1 @@
# language # leo

View File

@ -1,5 +0,0 @@
65279,1179403647,1463895090
3.1415927,2.7182817,1.618034
-40,-273.15
13,42
65537
1 65279,1179403647,1463895090
2 3.1415927,2.7182817,1.618034
3 -40,-273.15
4 13,42
5 65537

View File

@ -1,4 +1,4 @@
//! Abstract syntax tree (ast) representation from language.pest. //! Abstract syntax tree (ast) representation from leo.pest.
//! //!
//! @file zokrates_program.rs //! @file zokrates_program.rs
//! @author Howard Wu <howard@aleo.org> //! @author Howard Wu <howard@aleo.org>
@ -15,7 +15,7 @@ use pest_ast::FromPest;
use std::fmt; use std::fmt;
#[derive(Parser)] #[derive(Parser)]
#[grammar = "language.pest"] #[grammar = "leo.pest"]
pub struct LanguageParser; pub struct LanguageParser;
pub fn parse(input: &str) -> Result<Pairs<Rule>, Error<Rule>> { pub fn parse(input: &str) -> Result<Pairs<Rule>, Error<Rule>> {

View File

@ -1,3 +0,0 @@
field = { (ASCII_DIGIT | "." | "-")+ }
record = { field ~ ("," ~ field)* }
file = { SOI ~ (record ~ ("\r\n" | "\n"))* ~ EOI }

View File

@ -1,44 +0,0 @@
extern crate pest;
#[macro_use]
extern crate pest_derive;
use pest::Parser;
use std::fs;
#[derive(Parser)]
#[grammar = "csv.pest"]
pub struct CSVParser;
fn main() {
let unparsed_file = fs::read_to_string("numbers.csv").expect("cannot read file");
let file = CSVParser::parse(Rule::file, &unparsed_file)
.expect("unsuccessful parse") // unwrap the parse result
.next().unwrap(); // get and unwrap the `file` rule; never fails
let mut field_sum: f64 = 0.0;
let mut record_count: u64 = 0;
for record in file.into_inner() {
match record.as_rule() {
Rule::record => {
record_count += 1;
for field in record.into_inner() {
field_sum += field.as_str().parse::<f64>().unwrap();
}
}
Rule::EOI => (),
_ => unreachable!(),
}
}
println!("Sum of fields: {}", field_sum);
println!("Number of records: {}", record_count);
// let successful_parse = CSVParser::parse(Rule::field, "-273.15");
// println!("{:?}", successful_parse);
//
// let unsuccessful_parse = CSVParser::parse(Rule::field, "this is not a number");
// println!("{:?}", unsuccessful_parse);
}

View File

@ -1,4 +1,3 @@
// file = { SOI ~ NEWLINE* ~ import_section* ~ NEWLINE* ~ EOI }
/// Visibility /// Visibility
visibility_public = { "public" } visibility_public = { "public" }
@ -48,6 +47,7 @@ operation_binary = _ {
// operation_div_assign = { "/=" } // operation_div_assign = { "/=" }
/// Types /// Types
ty_u32 = {"u32"} ty_u32 = {"u32"}
ty_field = {"fe"} ty_field = {"fe"}
ty_bool = {"bool"} ty_bool = {"bool"}
@ -59,6 +59,7 @@ ty = {ty_array | ty_basic | ty_struct}
type_list = _{(ty ~ ("," ~ ty)*)?} type_list = _{(ty ~ ("," ~ ty)*)?}
/// Values /// Values
value_number = @{ "-"? ~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)} value_number = @{ "-"? ~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)}
value_u32 = { value_number ~ ty_u32} value_u32 = { value_number ~ ty_u32}
value_field = { value_number ~ ty_field } value_field = { value_number ~ ty_field }
@ -81,12 +82,15 @@ expression_primitive = { value | variable }
from_expression = { expression } from_expression = { expression }
to_expression = { expression } to_expression = { expression }
range = { from_expression? ~ ".." ~ to_expression } range = { from_expression? ~ ".." ~ to_expression }
range_or_expression = { range | expression } range_or_expression = { range | expression }
access_array = { "[" ~ range_or_expression ~ "]" } access_array = { "[" ~ range_or_expression ~ "]" }
access_call = { "(" ~ expression_tuple ~ ")" } access_call = { "(" ~ expression_tuple ~ ")" }
access_member = { "." ~ variable } access_member = { "." ~ variable }
access = { access_array | access_call | access_member } access = { access_array | access_call | access_member }
expression_postfix = { variable ~ access+ } expression_postfix = { variable ~ access+ }
assignee_access = { access_array | access_member } assignee_access = { access_array | access_member }
@ -117,7 +121,6 @@ expression_conditional = { "if" ~ expression ~ "then" ~ expression ~ "else" ~ ex
/// Expressions /// Expressions
// Consider structs, conditionals, postfix, primary, inline array, array initializer, and unary
expression_term = { expression_term = {
("(" ~ expression ~ ")") ("(" ~ expression ~ ")")
| expression_inline_struct | expression_inline_struct
@ -170,6 +173,6 @@ from_import = { "from" ~ "\"" ~ import_source ~ "\"" ~ "import" ~ variable ~ ("a
main_import = {"import" ~ "\"" ~ import_source ~ "\"" ~ ("as" ~ variable)? ~ NEWLINE+} main_import = {"import" ~ "\"" ~ import_source ~ "\"" ~ ("as" ~ variable)? ~ NEWLINE+}
import_source = @{(!"\"" ~ ANY)*} import_source = @{(!"\"" ~ ANY)*}
/// Abstract Syntax Tree File /// Program File
file = { SOI ~ NEWLINE* ~ import* ~ NEWLINE* ~ struct_definition* ~ NEWLINE* ~ function_definition* ~ NEWLINE* ~ EOI } file = { SOI ~ NEWLINE* ~ import* ~ NEWLINE* ~ struct_definition* ~ NEWLINE* ~ function_definition* ~ NEWLINE* ~ EOI }

View File

@ -1,16 +1,11 @@
extern crate from_pest;
extern crate pest; extern crate pest;
extern crate pest_ast;
#[macro_use] #[macro_use]
extern crate pest_derive; extern crate pest_derive;
extern crate from_pest;
// #[macro_use]
extern crate pest_ast;
#[macro_use] #[macro_use]
extern crate lazy_static; extern crate lazy_static;
pub mod ast; pub mod ast;
pub mod program;
pub mod aleo_program;
// pub mod zokrates_program;

View File

@ -1,25 +1,23 @@
use language::*; use leo::*;
use snarkos_algorithms::snark::{
create_random_proof, generate_random_parameters, prepare_verifying_key, verify_proof,
};
use snarkos_curves::bls12_377::{Bls12_377, Fr};
use snarkos_errors::gadgets::SynthesisError;
use snarkos_models::{
curves::{Field, PrimeField},
gadgets::r1cs::{ConstraintSynthesizer, ConstraintSystem}
};
use from_pest::FromPest; use from_pest::FromPest;
use rand::thread_rng;
use std::{ use std::{
fs, fs,
marker::PhantomData, marker::PhantomData,
time::{Duration, Instant}, time::{Duration, Instant},
}; };
use snarkos_curves::bls12_377::{Bls12_377, Fr};
use snarkos_errors::gadgets::SynthesisError;
use snarkos_models::curves::{Field, PrimeField};
use snarkos_models::gadgets::r1cs::{ConstraintSynthesizer, ConstraintSystem};
use snarkos_algorithms::snark::{
create_random_proof, generate_random_parameters, prepare_verifying_key, verify_proof,
};
use rand::thread_rng;
// use std::env;
pub struct Benchmark<F: Field + PrimeField> { pub struct Benchmark<F: Field + PrimeField> {
_engine: PhantomData<F>, _engine: PhantomData<F>,
} }
@ -38,20 +36,20 @@ impl<F: Field + PrimeField> ConstraintSynthesizer<F> for Benchmark<F> {
cs: &mut CS, cs: &mut CS,
) -> Result<(), SynthesisError> { ) -> Result<(), SynthesisError> {
// Read in file as string // Read in file as string
let unparsed_file = fs::read_to_string("simple.program").expect("cannot read file"); let unparsed_file = fs::read_to_string("simple.leo").expect("cannot read file");
// Parse the file using langauge.pest // Parse the file using leo.pest
let mut file = ast::parse(&unparsed_file).expect("unsuccessful parse"); let mut file = ast::parse(&unparsed_file).expect("unsuccessful parse");
// Build the abstract syntax tree // Build the abstract syntax tree
let syntax_tree = ast::File::from_pest(&mut file).expect("infallible"); let syntax_tree = ast::File::from_pest(&mut file).expect("infallible");
// println!("{:#?}", syntax_tree); // println!("{:#?}", syntax_tree);
let program = aleo_program::Program::<'_, F>::from(syntax_tree); let program = program::Program::<'_, F>::from(syntax_tree);
println!(" compiled: {:#?}", program); println!(" compiled: {:#?}", program);
let program = program.name("simple".into()); let program = program.name("simple".into());
aleo_program::ResolvedProgram::generate_constraints(cs, program); program::ResolvedProgram::generate_constraints(cs, program);
Ok(()) Ok(())
} }
@ -67,8 +65,8 @@ fn main() {
let start = Instant::now(); let start = Instant::now();
let params = { let params = {
let c = Benchmark::<Fr>::new(); let circuit = Benchmark::<Fr>::new();
generate_random_parameters::<Bls12_377, _, _>(c, rng).unwrap() generate_random_parameters::<Bls12_377, _, _>(circuit, rng).unwrap()
}; };
let prepared_verifying_key = prepare_verifying_key::<Bls12_377>(&params.vk); let prepared_verifying_key = prepare_verifying_key::<Bls12_377>(&params.vk);
@ -87,13 +85,16 @@ fn main() {
let start = Instant::now(); let start = Instant::now();
let _ = verify_proof(&prepared_verifying_key, &proof, &[]).unwrap(); let is_success = verify_proof(&prepared_verifying_key, &proof, &[]).unwrap();
verifying += start.elapsed(); verifying += start.elapsed();
println!(" Setup time : {:?} seconds", setup.as_secs()); println!(" ");
println!(" Proving time : {:?} seconds", proving.as_secs()); println!(" Setup time : {:?} milliseconds", setup.as_millis());
println!(" Verifying time: {:?} seconds", verifying.as_secs()); println!(" Prover time : {:?} milliseconds", proving.as_millis());
println!(" Verifier time : {:?} milliseconds", verifying.as_millis());
println!(" Verifier output : {}", is_success);
println!(" ");
// let mut cs = TestConstraintSystem::<Fr>::new(); // let mut cs = TestConstraintSystem::<Fr>::new();
// //

View File

@ -4,8 +4,8 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue}; use crate::program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::aleo_program::{ use crate::program::{
new_variable_from_variable, BooleanExpression, BooleanSpreadOrExpression, Parameter, Variable, new_variable_from_variable, BooleanExpression, BooleanSpreadOrExpression, Parameter, Variable,
}; };

View File

@ -4,9 +4,9 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::aleo_program::{Expression, Function, Import, Program, Statement, Type};
use crate::ast; use crate::ast;
use crate::program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::program::{Expression, Function, Import, Program, Statement, Type};
use from_pest::FromPest; use from_pest::FromPest;
use snarkos_models::curves::{Field, PrimeField}; use snarkos_models::curves::{Field, PrimeField};

View File

@ -4,8 +4,8 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue}; use crate::program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::aleo_program::{ use crate::program::{
Expression, IntegerExpression, IntegerRangeOrExpression, StructMember, Variable, Expression, IntegerExpression, IntegerRangeOrExpression, StructMember, Variable,
}; };

View File

@ -4,8 +4,8 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue}; use crate::program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::aleo_program::{ use crate::program::{
new_variable_from_variable, FieldExpression, FieldSpreadOrExpression, Parameter, Variable, new_variable_from_variable, FieldExpression, FieldSpreadOrExpression, Parameter, Variable,
}; };

View File

@ -4,16 +4,13 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue}; use crate::program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::aleo_program::{ use crate::program::{Integer, IntegerExpression, IntegerSpreadOrExpression, Variable, Parameter, new_variable_from_variable};
new_variable_from_variable, Integer, IntegerExpression, IntegerSpreadOrExpression, Parameter,
Variable,
};
use snarkos_models::curves::{Field, PrimeField}; use snarkos_models::curves::{Field, PrimeField};
use snarkos_models::gadgets::{ use snarkos_models::gadgets::{
r1cs::ConstraintSystem, r1cs::ConstraintSystem,
utilities::{ boolean::Boolean, eq::ConditionalEqGadget, uint32::UInt32}, utilities::{boolean::Boolean, eq::ConditionalEqGadget, uint32::UInt32},
}; };
impl<F: Field + PrimeField, CS: ConstraintSystem<F>> ResolvedProgram<F, CS> { impl<F: Field + PrimeField, CS: ConstraintSystem<F>> ResolvedProgram<F, CS> {

View File

@ -4,8 +4,8 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::ResolvedValue; use crate::program::constraints::ResolvedValue;
use crate::aleo_program::types::Variable; use crate::program::types::Variable;
use snarkos_models::curves::{Field, PrimeField}; use snarkos_models::curves::{Field, PrimeField};
use snarkos_models::gadgets::r1cs::ConstraintSystem; use snarkos_models::gadgets::r1cs::ConstraintSystem;

View File

@ -4,7 +4,7 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::types::{Function, Struct, StructMember, Variable}; use crate::program::types::{Function, Struct, StructMember, Variable};
use snarkos_models::curves::{Field, PrimeField}; use snarkos_models::curves::{Field, PrimeField};
use snarkos_models::gadgets::{utilities::boolean::Boolean, utilities::uint32::UInt32}; use snarkos_models::gadgets::{utilities::boolean::Boolean, utilities::uint32::UInt32};

View File

@ -4,8 +4,8 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue}; use crate::program::constraints::{new_scope_from_variable, ResolvedProgram, ResolvedValue};
use crate::aleo_program::{ use crate::program::{
Assignee, Expression, IntegerExpression, IntegerRangeOrExpression, Statement, Variable, Assignee, Expression, IntegerExpression, IntegerRangeOrExpression, Statement, Variable,
}; };

View File

@ -47,7 +47,7 @@ impl<'ast> Import<'ast> {
pub fn get_file(&self) -> String { pub fn get_file(&self) -> String {
let path = self.get_source().to_str().unwrap(); let path = self.get_source().to_str().unwrap();
format!("{}.program", path) format!("{}.leo", path)
} }
} }

View File

@ -4,15 +4,15 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
pub mod types;
pub use self::types::*;
pub mod constraints; pub mod constraints;
pub use self::constraints::*; pub use self::constraints::*;
pub mod imports; pub mod imports;
pub use self::imports::*; pub use self::imports::*;
pub mod types;
pub use self::types::*;
pub mod types_display; pub mod types_display;
pub use self::types_display::*; pub use self::types_display::*;

View File

@ -5,7 +5,7 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::Import; use crate::program::Import;
use snarkos_models::curves::{Field, PrimeField}; use snarkos_models::curves::{Field, PrimeField};
use std::collections::HashMap; use std::collections::HashMap;

View File

@ -4,7 +4,7 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::{ use crate::program::{
Assignee, BooleanExpression, BooleanSpreadOrExpression, Expression, FieldExpression, Assignee, BooleanExpression, BooleanSpreadOrExpression, Expression, FieldExpression,
FieldSpreadOrExpression, Function, FunctionName, Integer, IntegerExpression, FieldSpreadOrExpression, Function, FunctionName, Integer, IntegerExpression,
IntegerRangeOrExpression, IntegerSpreadOrExpression, Parameter, Statement, Struct, StructField, IntegerRangeOrExpression, IntegerSpreadOrExpression, Parameter, Statement, Struct, StructField,

View File

@ -4,7 +4,7 @@
//! @author Collin Chin <collin@aleo.org> //! @author Collin Chin <collin@aleo.org>
//! @date 2020 //! @date 2020
use crate::aleo_program::{types, Import, PathString}; use crate::program::{types, Import, PathString};
use crate::ast; use crate::ast;
use snarkos_models::curves::{Field, PrimeField}; use snarkos_models::curves::{Field, PrimeField};