oak_prolog/lexer/
token_type.rs1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type PrologToken = Token<PrologTokenType>;
6
7impl PrologTokenType {
8 pub fn is_token(&self) -> bool {
9 !self.is_element()
10 }
11
12 pub fn is_element(&self) -> bool {
13 matches!(self, Self::Root | Self::Functor | Self::Clause | Self::Rule | Self::Fact | Self::Query | Self::Directive | Self::List | Self::Structure)
14 }
15}
16
17impl TokenType for PrologTokenType {
18 type Role = UniversalTokenRole;
19 const END_OF_STREAM: Self = Self::Error;
20
21 fn is_ignored(&self) -> bool {
22 false
23 }
24
25 fn role(&self) -> Self::Role {
26 match self {
27 _ => UniversalTokenRole::None,
28 }
29 }
30}
31
32#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
33#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
34pub enum PrologTokenType {
35 Whitespace,
37 Newline,
38 Comment,
39
40 Atom,
42 Integer,
43 Float,
44 String,
45 Variable,
46
47 Unify, NotUnify, Equal, NotEqual, ArithEqual, ArithNotEqual, Less, Greater, LessEqual, GreaterEqual, Is, Plus, Minus, Multiply, Divide, IntDivide, Modulo, Power, BitwiseAnd, BitwiseOr, BitwiseXor, BitwiseNot, LeftShift, RightShift, LeftParen, RightParen, LeftBracket, RightBracket, LeftBrace, RightBrace, Comma, Dot, Pipe, Semicolon, Cut, Question, Colon, ColonMinus, QuestionMinus, Functor,
92 Clause,
93 Rule,
94 Fact,
95 Query,
96 Directive,
97 List,
98 Structure,
99
100 Root,
102 Error,
103 Eof,
104}