Skip to main content

oak_pascal/ast/
mod.rs

1#![doc = include_str!("readme.md")]
2use core::range::Range;
3
4
5/// Root node for Pascal AST.
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[derive(Debug, Clone)]
8pub struct PascalRoot {
9    /// List of items in the program.
10    pub items: Vec<PascalItem>,
11    /// Source range of the root node.
12    #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
13    pub range: Range<usize>,
14}
15
16/// An item in a Pascal program.
17#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18#[derive(Debug, Clone)]
19pub enum PascalItem {
20    /// A program declaration.
21    Program {
22        /// Name of the program.
23        name: String,
24        /// Source range.
25        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
26        range: Range<usize>,
27    },
28    /// A declaration (e.g., var, const, type).
29    Declaration {
30        /// Content of the declaration.
31        content: String,
32        /// Source range.
33        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
34        range: Range<usize>,
35    },
36    /// A statement.
37    Statement {
38        /// Content of the statement.
39        content: String,
40        /// Source range.
41        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
42        range: Range<usize>,
43    },
44}