Просмотр исходного кода

zkas: Add skeleton for semantic analyzer.

parazyd 4 лет назад
Родитель
Сommit
db2e9a8d01
3 измененных файлов с 36 добавлено и 3 удалено
  1. 28 0
      zkas/src/analyzer.rs
  2. 2 0
      zkas/src/lib.rs
  3. 6 3
      zkas/src/main.rs

+ 28 - 0
zkas/src/analyzer.rs

@@ -0,0 +1,28 @@
+use std::str::Chars;
+
+use crate::ast::{Constants, Statements, Witnesses};
+
+pub struct Analyzer {
+    file: String,
+    lines: Vec<String>,
+    constants: Constants,
+    witnesses: Witnesses,
+    statements: Statements,
+}
+
+impl Analyzer {
+    pub fn new(
+        filename: &str,
+        source: Chars,
+        constants: Constants,
+        witnesses: Witnesses,
+        statements: Statements,
+    ) -> Self {
+        // For nice error reporting, we'll load everything into a string
+        // vector so we have references to lines.
+        let lines = source.as_str().lines().map(|x| x.to_string()).collect();
+        Analyzer { file: filename.to_string(), lines, constants, witnesses, statements }
+    }
+
+    pub fn analyze(self) {}
+}

+ 2 - 0
zkas/src/lib.rs

@@ -1,3 +1,5 @@
+/// Semantic analyzer
+pub mod analyzer;
 /// AST
 pub mod ast;
 /// Lexer module

+ 6 - 3
zkas/src/main.rs

@@ -2,7 +2,7 @@ use anyhow::Result;
 use clap::clap_app;
 use std::fs::read_to_string;
 
-use zkas::{lexer::Lexer, parser::Parser};
+use zkas::{analyzer::Analyzer, lexer::Lexer, parser::Parser};
 
 fn main() -> Result<()> {
     let args = clap_app!(zkas =>
@@ -22,11 +22,14 @@ fn main() -> Result<()> {
     // println!("{:#?}", tokens);
 
     let parser = Parser::new(filename, source.chars(), tokens);
-    let (constants, witnesses, circuit) = parser.parse();
+    let (constants, witnesses, statements) = parser.parse();
 
     // println!("{:#?}", constants);
     // println!("{:#?}", witnesses);
-    // println!("{:#?}", circuit);
+    // println!("{:#?}", statements);
+
+    let analyzer = Analyzer::new(filename, source.chars(), constants, witnesses, statements);
+    analyzer.analyze();
 
     Ok(())
 }