20 lines
991 B
Markdown
20 lines
991 B
Markdown
# 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
|