Skip to main content

oak_pascal/ast/
mod.rs

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