| //! Token types for constraint DSL | |
| 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 | |
| ) | |
| } | |
| } | |
| mod tests { | |
| use super::*; | |
| fn token_classification() { | |
| assert!(Token::Require.is_keyword()); | |
| assert!(!Token::Identifier("test".to_string()).is_keyword()); | |
| } | |
| } | |