Browse Source

chore: extract AST to own module

master
Garrit Franke 3 years ago
parent
commit
4c4f9f743d
  1. 5
      src/ast/README.md
  2. 2
      src/ast/mod.rs
  3. 2
      src/builder/mod.rs
  4. 2
      src/generator/c.rs
  5. 2
      src/generator/js.rs
  6. 2
      src/generator/llvm.rs
  7. 2
      src/generator/mod.rs
  8. 2
      src/generator/tests/c_tests.rs
  9. 2
      src/generator/x86.rs
  10. 1
      src/main.rs
  11. 3
      src/parser/infer.rs
  12. 3
      src/parser/mod.rs
  13. 2
      src/parser/parser.rs
  14. 3
      src/parser/rules.rs
  15. 2
      src/parser/tests.rs

5
src/ast/README.md

@ -0,0 +1,5 @@
# AST
This module contains the node types of the Sabre AST.
The most important node is `Module`, which is the abstract representation of a Sabre file.

2
src/parser/node_type.rs → src/ast/mod.rs

@ -2,7 +2,7 @@ use crate::lexer::*;
use core::convert::TryFrom; use core::convert::TryFrom;
use std::collections::HashMap; use std::collections::HashMap;
/** /**
* Copyright 2020 Garrit Franke * Copyright 2021 Garrit Franke
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

2
src/builder/mod.rs

@ -1,9 +1,9 @@
use crate::ast::Module;
use crate::generator; use crate::generator;
use crate::lexer; use crate::lexer;
use crate::parser; use crate::parser;
use crate::Lib; use crate::Lib;
use crate::PathBuf; use crate::PathBuf;
use parser::node_type::Module;
use std::env; use std::env;
/** /**
* Copyright 2021 Garrit Franke * Copyright 2021 Garrit Franke

2
src/generator/c.rs

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
use crate::generator::Generator; use crate::generator::Generator;
use crate::parser::node_type::*; use crate::ast::*;
use crate::util::Either; use crate::util::Either;
pub struct CGenerator; pub struct CGenerator;

2
src/generator/js.rs

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
use crate::generator::Generator; use crate::generator::Generator;
use crate::parser::node_type::*; use crate::ast::*;
use std::collections::HashMap; use std::collections::HashMap;
pub struct JsGenerator; pub struct JsGenerator;

2
src/generator/llvm.rs

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
use crate::generator::Generator; use crate::generator::Generator;
use crate::parser::node_type::*; use crate::ast::*;
use inkwell::context::Context; use inkwell::context::Context;
use inkwell::module; use inkwell::module;
use inkwell::types::*; use inkwell::types::*;

2
src/generator/mod.rs

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
use crate::parser::node_type::*; use crate::ast::*;
#[cfg(feature = "backend_c")] #[cfg(feature = "backend_c")]
pub mod c; pub mod c;

2
src/generator/tests/c_tests.rs

@ -1,5 +1,5 @@
use crate::generator::c::generate_type; use crate::generator::c::generate_type;
use crate::parser::node_type::Type; use crate::ast::Type;
use crate::util::Either; use crate::util::Either;
#[test] #[test]

2
src/generator/x86.rs

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
use crate::generator::Generator; use crate::generator::Generator;
use crate::parser::node_type::{Function, Module, Statement}; use crate::ast::{Function, Module, Statement};
struct Assembly { struct Assembly {
asm: Vec<String>, asm: Vec<String>,

1
src/main.rs

@ -22,6 +22,7 @@ extern crate tempfile;
use std::path::PathBuf; use std::path::PathBuf;
use structopt::StructOpt; use structopt::StructOpt;
mod ast;
mod builder; mod builder;
mod command; mod command;
mod generator; mod generator;

3
src/parser/infer.rs

@ -1,3 +1,5 @@
use crate::ast::{Expression, Module, Statement, SymbolTable, Type};
/** /**
* Copyright 2021 Garrit Franke * Copyright 2021 Garrit Franke
* *
@ -13,7 +15,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
use super::node_type::*;
/// Try to infer types of variables /// Try to infer types of variables
/// ///

3
src/parser/mod.rs

@ -14,13 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
mod infer; mod infer;
pub mod node_type;
// TODO: Resolve this lint by renaming the module // TODO: Resolve this lint by renaming the module
#[allow(clippy::module_inception)] #[allow(clippy::module_inception)]
mod parser; mod parser;
mod rules; mod rules;
use crate::ast::Module;
use crate::lexer::Token; use crate::lexer::Token;
use node_type::Module;
#[cfg(test)] #[cfg(test)]
mod tests; mod tests;

2
src/parser/parser.rs

@ -17,7 +17,7 @@ use crate::lexer::Keyword;
use crate::lexer::Position; use crate::lexer::Position;
use crate::lexer::{Token, TokenKind}; use crate::lexer::{Token, TokenKind};
use crate::parser::infer::infer; use crate::parser::infer::infer;
use crate::parser::node_type::*; use crate::ast::*;
use crate::util::string_util::highlight_position_in_file; use crate::util::string_util::highlight_position_in_file;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::iter::Peekable; use std::iter::Peekable;

3
src/parser/rules.rs

@ -1,6 +1,5 @@
use super::node_type::Statement;
use super::node_type::*;
use super::parser::Parser; use super::parser::Parser;
use crate::ast::*;
use crate::lexer::Keyword; use crate::lexer::Keyword;
use crate::lexer::{TokenKind, Value}; use crate::lexer::{TokenKind, Value};
use std::collections::HashMap; use std::collections::HashMap;

2
src/parser/tests.rs

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
use crate::lexer::*; use crate::lexer::*;
use crate::parser::node_type::*; use crate::ast::*;
use crate::parser::parse; use crate::parser::parse;
#[test] #[test]

Loading…
Cancel
Save