Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix links in kaleidoscope #470

Merged
merged 2 commits into from
Feb 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 56 additions & 53 deletions examples/kaleidoscope/README.md
Original file line number Diff line number Diff line change
@@ -1,53 +1,56 @@
# Kaleidoscope

This example shows how one can implement the [Kaleidoscope programming language](https://llvm.org/docs/tutorial/index.html) using Inkwell.
It implements every feature up to the [7th chapter](https://llvm.org/docs/tutorial/LangImpl07.html).

The [usage](../../README.md#usage) part doesn't fit the example as it shares the same `Cargo.toml` file with the whole project.

To run the example, the LLVM version is required:
```sh
cargo run --example kaleidoscope --features llvm$(llvm-config --version | sed 's/\./-/;s/\.[0-9]*//')
```

When running this command, a prompt will be displayed; for example:

```
?> 1 + 1
=> 2

?> var a = 5, b = 10 in a * b
=> 50

?> def fib(n) if n < 2 then n else fib(n - 1) + fib(n - 2)

?> fib(40)
=> 102334155

?>
```

Additional arguments can be passed to the produced executable:
- `--dc`: **D**isplay **C**ompiler output
- `--dp`: **D**isplay **P**arser output
- `--dl`: **D**isplay **L**exer output

For example, running with all three switches may lead to the following output:
```
?> 1 + 2 * 2
-> Attempting to parse lexed input:
[Number(1), Op('+'), Number(2), Op('*'), Number(2)]

-> Expression parsed:
Binary { op: '+', left: Number(1), right: Binary { op: '*', left: Number(2), right: Number(2) } }

-> Expression compiled to IR:
define double @anonymous() {
entry:
ret double 5.000000e+00
}

=> 5
```

Finally, the prompt can be exited by entering "exit" or "quit".
# Kaleidoscope

This example shows how one can implement the [Kaleidoscope programming language](https://llvm.org/docs/tutorial/index.html) using Inkwell.
It implements every feature up to the [7th chapter](https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl07.html).

The [usage](../../README.md#usage) part doesn't fit the example as it shares the same `Cargo.toml` file with the whole project.

To run the example, the LLVM version is required:

```sh
cargo run --example kaleidoscope --features llvm$(llvm-config --version | sed 's/\./-/;s/\.[0-9]*//')
```

When running this command, a prompt will be displayed; for example:

```
?> 1 + 1
=> 2

?> var a = 5, b = 10 in a * b
=> 50

?> def fib(n) if n < 2 then n else fib(n - 1) + fib(n - 2)

?> fib(40)
=> 102334155

?>
```

Additional arguments can be passed to the produced executable:

- `--dc`: **D**isplay **C**ompiler output
- `--dp`: **D**isplay **P**arser output
- `--dl`: **D**isplay **L**exer output

For example, running with all three switches may lead to the following output:

```
?> 1 + 2 * 2
-> Attempting to parse lexed input:
[Number(1), Op('+'), Number(2), Op('*'), Number(2)]

-> Expression parsed:
Binary { op: '+', left: Number(1), right: Binary { op: '*', left: Number(2), right: Number(2) } }

-> Expression compiled to IR:
define double @anonymous() {
entry:
ret double 5.000000e+00
}

=> 5
```

Finally, the prompt can be exited by entering "exit" or "quit".
14 changes: 8 additions & 6 deletions examples/kaleidoscope/main.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
//! This is an example of the [Kaleidoscope tutorial](https://llvm.org/docs/tutorial/)
//! made in Rust, using Inkwell.
//! Currently, all features up to the [7th chapter](https://llvm.org/docs/tutorial/LangImpl07.html)
//! Currently, all features up to the
//! [7th chapter](https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl07.html)
//! are available.
//! This example is supposed to be ran as a executable, which launches a REPL.
//! The source code is in the following order:
//! - Lexer,
//! - Parser,
//! - Compiler,
//! - Program.
//! - `implementation_typed_pointers.rs`:
//! Lexer,
//! Parser,
//! Compiler.
//! - `main.rs`:
//! Program.
//!
//! Both the `Parser` and the `Compiler` may fail, in which case they would return
//! an error represented by `Result<T, &'static str>`, for easier error reporting.
Expand Down Expand Up @@ -108,7 +111,6 @@ fn run_passes_on(module: &Module) {

/// Entry point of the program; acts as a REPL.
pub fn main() {
// use self::inkwell::support::add_symbol;
let mut display_lexer_output = false;
let mut display_parser_output = false;
let mut display_compiler_output = false;
Expand Down
Loading