main.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. use anyhow::Result;
  2. use clap::Parser as ClapParser;
  3. use std::fs::read_to_string;
  4. use zkas::{analyzer::Analyzer, lexer::Lexer, parser::Parser};
  5. #[derive(clap::Parser)]
  6. #[clap(name = "zkas", version)]
  7. struct Cli {
  8. /// Place the output into <FILE>
  9. #[clap(short, value_name = "FILE")]
  10. output: Option<String>,
  11. /// Strip debug symbols
  12. #[clap(short)]
  13. strip: bool,
  14. /// Preprocess only; do not compile
  15. #[clap(short)]
  16. evaluate: bool,
  17. /// ZK script to compile
  18. input: String,
  19. }
  20. fn main() -> Result<()> {
  21. let cli = Cli::parse();
  22. let filename = cli.input.as_str();
  23. let source = read_to_string(filename)?;
  24. let lexer = Lexer::new(filename, source.chars());
  25. let tokens = lexer.lex();
  26. // println!("{:#?}", tokens);
  27. let parser = Parser::new(filename, source.chars(), tokens);
  28. let (constants, witnesses, statements) = parser.parse();
  29. // println!("{:#?}", constants);
  30. // println!("{:#?}", witnesses);
  31. // println!("{:#?}", statements);
  32. let mut analyzer = Analyzer::new(filename, source.chars(), constants, witnesses, statements);
  33. analyzer.analyze_types();
  34. Ok(())
  35. }