diff --git a/.circleci/config.yml b/.circleci/config.yml index 4f3c59a64c..426ef14306 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -136,124 +136,32 @@ jobs: paths: project/ - clear_environment: cache_key: leo-executable-cache -# -# leo-new: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo new -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-new.sh -# -# leo-init: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo init -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-init.sh -# -# leo-clean: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo clean -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-clean.sh -# -# leo-setup: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo setup -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-setup.sh - # leo-add-remove: - # docker: - # - image: cimg/rust:1.62 - # resource_class: xlarge - # steps: - # - attach_workspace: - # at: /home/circleci/project/ - # - run: - # name: leo add & remove - # command: | - # export LEO=/home/circleci/project/project/bin/leo - # ./project/.circleci/leo-add-remove.sh + leo-new: + docker: + - image: cimg/rust:1.62 + resource_class: xlarge + steps: + - attach_workspace: + at: /home/circleci/project/ + - run: + name: leo new + command: | + export LEO=/home/circleci/project/project/bin/leo + ./project/.circleci/leo-new.sh -# todo (collin): uncomment after compiler refactor -# leo-check-constraints: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo check constraints for Pedersen Hash -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-check-constraints.sh -# -# leo-login-logout: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo login & logout -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-login-logout.sh -# -# leo-clone: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo clone -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-clone.sh -# -# leo-publish: -# docker: -# - image: cimg/rust:1.62 -# resource_class: xlarge -# steps: -# - attach_workspace: -# at: /home/circleci/project/ -# - run: -# name: leo publish -# command: | -# export LEO=/home/circleci/project/project/bin/leo -# ./project/.circleci/leo-publish.sh + leo-clean: + docker: + - image: cimg/rust:1.62 + resource_class: xlarge + steps: + - attach_workspace: + at: /home/circleci/project/ + - run: + name: leo clean + command: | + export LEO=/home/circleci/project/project/bin/leo + ./project/.circleci/leo-clean.sh workflows: version: 2 @@ -262,30 +170,9 @@ workflows: - check-style - clippy - leo-executable -# - leo-new: -# requires: -# - leo-executable -# - leo-init: -# requires: -# - leo-executable -# - leo-clean: -# requires: -# - leo-executable -# - leo-setup: -# requires: -# - leo-executable -# - leo-add-remove: -# requires: -# - leo-executable -# - leo-check-constraints: -# requires: -# - leo-executable -# - leo-login-logout: -# requires: -# - leo-executable -# - leo-clone: -# requires: -# - leo-executable -# - leo-publish: -# requires: -# - leo-executable + - leo-new: + requires: + - leo-executable + - leo-clean: + requires: + - leo-executable diff --git a/.circleci/leo-clean.sh b/.circleci/leo-clean.sh index 8448ae24c2..d2ede6a74d 100755 --- a/.circleci/leo-clean.sh +++ b/.circleci/leo-clean.sh @@ -1,38 +1,23 @@ -# leo new hello-world - -$LEO new hello-world +# Create a new Leo program named `foo`. +$LEO new foo ls -la -cd hello-world && ls -la +cd foo && ls -la + +# Run `leo build`. $LEO build -# Assert that the 'outputs' folder is not empty - -cd outputs || exit 1 -if [ "$(ls -A $DIR)" ]; then - echo "$DIR is not empty" +# Assert that the 'build' folder exists. +if [ "$(ls -A build)" ]; then + echo "build is not empty" else - echo "$DIR is empty" + echo "build is empty" exit 1 fi -cd .. - -# leo clean +# Run `leo clean` $LEO clean -cd outputs && ls -la -cd .. - -# Assert that the 'outputs' folder is empty - -if [ "$(ls -A outputs)" ]; then - echo "outputs is not empty" - exit 1 -else - echo "outputs is empty" -fi - -# Assert that the 'build' folder is empty +# Assert that the 'build' folder is empty. if [ "$(ls -A build)" ]; then echo "build is not empty" exit 1 diff --git a/.circleci/leo-new.sh b/.circleci/leo-new.sh index 46d4e3790b..02a0c32f1a 100755 --- a/.circleci/leo-new.sh +++ b/.circleci/leo-new.sh @@ -1,7 +1,7 @@ -# Create a new foo project. +# Create a new Leo program named `foo`. $LEO new foo ls -la cd foo && ls -la -# Try to compile and run the template project. +# Try to run `leo build`. $LEO run diff --git a/docs/grammar/abnf-grammar.txt b/docs/grammar/abnf-grammar.txt index 4fbdbbcb66..acffb7edcf 100644 --- a/docs/grammar/abnf-grammar.txt +++ b/docs/grammar/abnf-grammar.txt @@ -184,13 +184,18 @@ atomic-literal = numeric-literal / address-literal / string-literal -symbol = "!" / "&&" / "||" +symbol = "!" + / "&&" / "||" / "==" / "!=" / "<" / "<=" / ">" / ">=" / "&" / "|" / "^" / "<<" / ">>" / "+" / "-" / "*" / "/" / "%" / "**" / "=" + / "+=" / "-=" / "*=" / "/=" / "%=" / "**=" + / "<<=" / ">>=" + / "&=" / "|=" / "^=" + / "&&=" / "||=" / "(" / ")" / "[" / "]" / "{" / "}" @@ -375,6 +380,19 @@ loop-statement = %s"for" identifier ":" type block assignment-operator = "=" + / "+=" + / "-=" + / "*=" + / "/=" + / "%=" + / "**=" + / "<<=" + / ">>=" + / "&=" + / "|=" + / "^=" + / "&&=" + / "||=" assignment-statement = expression assignment-operator expression ";" diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000000..39e4806b68 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,25 @@ +# Leo Examples + +This directory includes the following Leo code examples: + +1. Hello World -> Basic Sum of two u32 +2. Groups -> Basic operations over groups +3. Core -> Core circuits functions over a field type +4. Bubblesort -> Sorting algorithms over a tuple +5. Import point -> Import code from an other file +6. Message -> Initialization of a circuit type +7. Token -> Record example + +## Build Guide + +To compile each example, run: +```bash +leo build +``` +When you run this command for the first time the snarkvm parameters (universal setup) will be downloaded, these are necessary to run the circuits. + +To run each program, run: +```bash +leo run main +``` +This command will look in the input file inputs/*.in where should find a section [main] and use the variables as inputs to the program. \ No newline at end of file diff --git a/examples/bubblesort/README.md b/examples/bubblesort/README.md index 34d507afc8..15bc6bfbd1 100644 --- a/examples/bubblesort/README.md +++ b/examples/bubblesort/README.md @@ -9,5 +9,11 @@ leo build To run this program, run: ```bash -leo run -``` \ No newline at end of file +leo run main +``` + +## Overview + +This example shows how to sort an array. + +It takes the input data from inputs/bubblesort.in diff --git a/examples/groups/README.md b/examples/groups/README.md index a1a8a58c67..251772baf0 100644 --- a/examples/groups/README.md +++ b/examples/groups/README.md @@ -9,5 +9,27 @@ leo build To run this program, run: ```bash -leo run -``` \ No newline at end of file +leo run main +``` + +## Overview + +This example shows how to do basic operations over groups. + +It takes the input data from inputs/groups.in + + +## Documentation Group Element + +The set of affine points on the elliptic curve passed into the Leo compiler forms a group. Leo supports this set as a primitive data type. Group elements are special since their values can be defined as coordinate pairs ```(x, y)group```. The group type keyword group must be used when specifying a pair of group coordinates since implicit syntax would collide with normal tuple (a, b) values. + +``` +let b = 0group; // the zero of the group + +let a = 1group; // the group generator + +let c = 2group; // 2 * the group generator + +let d = (0, 1)group; // coordinate notation +``` + diff --git a/examples/helloworld/README.md b/examples/helloworld/README.md index e04a14969b..0a9324edb5 100644 --- a/examples/helloworld/README.md +++ b/examples/helloworld/README.md @@ -9,5 +9,10 @@ leo build To run this program, run: ```bash -leo run -``` \ No newline at end of file +leo run main +``` +## Overview + +This example shows how to sum two u32 numbers. + +It takes the input data from inputs/helloworld.in \ No newline at end of file