File size: 1,194 Bytes
224e773 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | //! Token types for constraint DSL
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Token {
// Keywords
Require,
Balance,
Invariant,
Entropy,
Proof,
Runtime,
Identity,
Phase,
Otherwise,
Reject,
// Identifiers and literals
Identifier(String),
Number(i64),
String(String),
// Operators
LessThanEq,
Equals,
LeftParen,
RightParen,
LeftBrace,
RightBrace,
Semicolon,
Comma,
// Special
Eof,
}
impl Token {
pub fn is_keyword(&self) -> bool {
matches!(
self,
Token::Require
| Token::Balance
| Token::Invariant
| Token::Entropy
| Token::Proof
| Token::Runtime
| Token::Identity
| Token::Phase
| Token::Otherwise
| Token::Reject
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn token_classification() {
assert!(Token::Require.is_keyword());
assert!(!Token::Identifier("test".to_string()).is_keyword());
}
}
|