| # Syntax and the AST |
| |
| Working directly with source code is very inconvenient and error-prone. |
| Thus, before we do anything else, we convert raw source code into an |
| [Abstract Syntax Tree (AST)][AST]. It turns out that doing this involves a lot of work, |
| including [lexing, parsing], [macro expansion], [name resolution], conditional |
| compilation, [feature-gate checking], and [validation] of the [AST]. |
| In this chapter, we take a look at all of these steps. |
| |
| Notably, there isn't always a clean ordering between these tasks. |
| For example, macro expansion relies on name resolution to resolve the names of macros and imports. |
| And parsing requires macro expansion, which in turn may require parsing the output of the macro. |
| |
| [AST]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html |
| [macro expansion]: ./macro-expansion.md |
| [feature-gate checking]: ./feature-gate-ck.md |
| [lexing, parsing]: ./the-parser.md |
| [name resolution]: ./name-resolution.md |
| [validation]: ./ast-validation.md |