Skip to content

Commit 13628e5

Browse files
committed
Initial commit
0 parents  commit 13628e5

27 files changed

+1426
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/target
2+
**/*.rs.bk

.vscode/settings.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"files.exclude": {
3+
"**/target": true
4+
}
5+
}

Cargo.lock

+311
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "qry"
3+
version = "0.1.0"
4+
authors = ["Ruan Pearce-Authers <[email protected]>"]
5+
edition = "2018"
6+
7+
[dependencies]
8+
peg = "0.6.2"
9+
rustyline = "6.1.2"
10+
11+
[[bin]]
12+
name = "qry"
13+
path = "src/cli/main.rs"

rust-toolchain

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
nightly-1.45

src/cli/main.rs

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use qry::lang::parse;
2+
use qry::runtime::{eval, InterpreterState};
3+
use rustyline::error::ReadlineError;
4+
use rustyline::Editor;
5+
6+
fn main() {
7+
let mut rl = Editor::<()>::new();
8+
let mut state = InterpreterState::new();
9+
10+
loop {
11+
match rl.readline("qry> ") {
12+
Ok(line) => match parse(&line) {
13+
Ok(syntax) => match eval(&mut state, &syntax) {
14+
Ok(value) => println!("{:?}", value),
15+
Err(err) => println!("interpreter error: {:?}", err),
16+
},
17+
Err(err) => println!("parser error {:?}", err),
18+
},
19+
Err(ReadlineError::Interrupted) | Err(ReadlineError::Eof) => break,
20+
Err(err) => {
21+
println!("error {:?}", err);
22+
break;
23+
}
24+
}
25+
}
26+
}

src/lang/mod.rs

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pub mod parser;
2+
pub mod syntax;
3+
4+
pub use parser::*;
5+
pub use syntax::*;

0 commit comments

Comments
 (0)