1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//! The frontend of text form Koopa IR.
//!
//! This module provides text form IR related implementations, including:
//!
//! * Tokens ([`token`]) and abstract syntax tree ([`ast`]) of Koopa IR.
//! * [`Span`](span::Span) struct for holding source code locations.
//! * Lexer ([`Lexer`](lexer::Lexer)), parser ([`Parser`](parser::Parser))
//! and analyzer ([`Builder`](builder::Builder)) of Koopa IR.
//! * Koopa IR frontend driver ([`Driver`]).
//!
//! # Examples
//!
//! Convert text form Koopa IR program into the in-memory form:
//!
//! ```
//! use koopa::front::Driver;
//!
//! let driver: Driver<_> = r#"
//! fun @fib(@n: i32): i32 {
//! %entry:
//! %cond = le @n, 2
//! br %cond, %then, %else
//!
//! %then:
//! ret 1
//!
//! %else:
//! %0 = sub @n, 1
//! %x = call @fib(%0)
//! %1 = sub @n, 2
//! %y = call @fib(%1)
//! %ans = add %x, %y
//! ret %ans
//! }
//! "#.into();
//! let program = driver.generate_program().unwrap();
//! ```
//!
//! Build Koopa IR program from a text file:
//!
//! ```no_run
//! use koopa::front::Driver;
//!
//! # fn main() -> std::io::Result<()> {
//! let driver = Driver::from_path("/path/to/file")?;
//! let program = driver.generate_program().unwrap();
//! # Ok(())
//! # }
//! ```
pub use Driver;