AbleLang is coming together boys :) and girls and enby pals
This commit is contained in:
commit
cc66d0b63a
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/target
|
5
Cargo.lock
generated
Normal file
5
Cargo.lock
generated
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
[[package]]
|
||||||
|
name = "able-lang"
|
||||||
|
version = "0.1.0"
|
9
Cargo.toml
Normal file
9
Cargo.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[package]
|
||||||
|
name = "able-lang"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["able <abl3theabove@gmail.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
2
able-lang-test/hello_world.able
Normal file
2
able-lang-test/hello_world.able
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
var hello = "world";
|
||||||
|
print hello;
|
3
src/file_load.rs
Normal file
3
src/file_load.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
pub fn run_file(filepath: &String) {
|
||||||
|
println!("{}{}", filepath, PI);
|
||||||
|
}
|
22
src/main.rs
Normal file
22
src/main.rs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
use std::env;
|
||||||
|
pub use std::f64::consts::{
|
||||||
|
PI, // For the heretics among us
|
||||||
|
TAU,
|
||||||
|
};
|
||||||
|
|
||||||
|
mod file_load;
|
||||||
|
mod prompt;
|
||||||
|
mod tokens;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut args: Vec<String> = env::args().collect();
|
||||||
|
args.remove(0);
|
||||||
|
if args.len() > 1 {
|
||||||
|
println!("Usage: alang [script]");
|
||||||
|
} else if args.len() == 1 {
|
||||||
|
let filepath = &args[0];
|
||||||
|
file_load::run_file(filepath);
|
||||||
|
} else {
|
||||||
|
prompt::prompt();
|
||||||
|
}
|
||||||
|
}
|
20
src/prompt.rs
Normal file
20
src/prompt.rs
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
use std::io::{stdin, stdout, Write};
|
||||||
|
|
||||||
|
pub fn prompt() {
|
||||||
|
loop {
|
||||||
|
print! {"> "};
|
||||||
|
stdout().flush().unwrap();
|
||||||
|
let mut input = String::new();
|
||||||
|
stdin().read_line(&mut input).unwrap();
|
||||||
|
|
||||||
|
if input.trim() == "quit" {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
run(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(s: String) {
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
15
src/scanner.rs
Normal file
15
src/scanner.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
mod tokens;
|
||||||
|
pub struct Scanner {
|
||||||
|
pub start: u64,
|
||||||
|
pub current: u64,
|
||||||
|
pub line: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn scan() {
|
||||||
|
let tokens: Vec<tokens::Token> = vec![];
|
||||||
|
|
||||||
|
scan_token();
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
fn scan_token() {}
|
48
src/tokens.rs
Normal file
48
src/tokens.rs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
pub enum Token {
|
||||||
|
// Single-character tokens.
|
||||||
|
LEFT_PAREN, //
|
||||||
|
RIGHT_PAREN,
|
||||||
|
LEFT_BRACE,
|
||||||
|
RIGHT_BRACE,
|
||||||
|
COMMA,
|
||||||
|
DOT,
|
||||||
|
MINUS,
|
||||||
|
PLUS,
|
||||||
|
SEMICOLON,
|
||||||
|
SLASH,
|
||||||
|
STAR,
|
||||||
|
// One or two character tokens.
|
||||||
|
BANG,
|
||||||
|
BANG_EQUAL,
|
||||||
|
EQUAL,
|
||||||
|
EQUAL_EQUAL,
|
||||||
|
GREATER,
|
||||||
|
GREATER_EQUAL,
|
||||||
|
LESS,
|
||||||
|
LESS_EQUAL,
|
||||||
|
|
||||||
|
// Literals.
|
||||||
|
IDENTIFIER,
|
||||||
|
STRING,
|
||||||
|
NUMBER,
|
||||||
|
|
||||||
|
// Keywords.
|
||||||
|
AND,
|
||||||
|
CLASS,
|
||||||
|
ELSE,
|
||||||
|
FALSE,
|
||||||
|
FUN,
|
||||||
|
FOR,
|
||||||
|
IF,
|
||||||
|
NIL,
|
||||||
|
OR,
|
||||||
|
PRINT,
|
||||||
|
RETURN,
|
||||||
|
SUPER,
|
||||||
|
THIS,
|
||||||
|
TRUE,
|
||||||
|
VAR,
|
||||||
|
WHILE,
|
||||||
|
|
||||||
|
EOF,
|
||||||
|
}
|
Loading…
Reference in a new issue