Skip to main content

oak_pascal/ast/
mod.rs

1#![doc = include_str!("readme.md")]
2use core::range::Range;
3#[cfg(feature = "serde")]
4#[cfg(feature = "serde")]
5use serde::{Deserialize, Serialize};
6
7/// Pascal AST 根节点
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9#[derive(Debug, Clone)]
10pub struct PascalRoot {
11    pub items: Vec<PascalItem>,
12    #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
13    pub range: Range<usize>,
14}
15
16/// Pascal 项目
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18#[derive(Debug, Clone)]
19pub enum PascalItem {
20    Program {
21        name: String,
22        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
23        range: Range<usize>,
24    },
25    Declaration {
26        content: String,
27        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
28        range: Range<usize>,
29    },
30    Statement {
31        content: String,
32        #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
33        range: Range<usize>,
34    },
35}