token: add helper functions

main
anna 2 years ago
parent 10ca36535f
commit 50754ed26d
Signed by: fef
GPG Key ID: EC22E476DC2D3D84

@ -82,6 +82,82 @@ pub enum Kind {
Comment,
}
impl Kind {
pub fn is_start_of_lhs_expr(&self) -> bool {
match self {
Kind::Ident => true,
Kind::IntLiteral => true,
Kind::StringLiteral => true,
_ => false
}
}
pub fn is_start_of_expr(&self) -> bool {
match self {
k if k.is_start_of_lhs_expr() => true,
Kind::Minus => true,
_ => false
}
}
pub fn is_assignment_op(&self) -> bool {
match self {
Kind::Eq => true,
Kind::PlusEq => true,
Kind::MinusEq => true,
Kind::AsteriskEq => true,
Kind::AsteriskAsteriskEq => true,
Kind::SlashEq => true,
Kind::PercentEq => true,
Kind::GtGtEq => true,
Kind::LtLtEq => true,
Kind::PipeEq => true,
Kind::AmpEq => true,
Kind::CaretEq => true,
_ => false,
}
}
/// If this token is a binary operator, return its precedence value when
/// interpreted as such. See `operator-precedence.txt` for details.
pub fn binary_op_precedence(&self) -> Option<u32> {
match self {
Kind::Eq => Some(2),
Kind::PlusEq => Some(2),
Kind::MinusEq => Some(2),
Kind::AsteriskEq => Some(2),
Kind::AsteriskAsteriskEq => Some(2),
Kind::SlashEq => Some(2),
Kind::PercentEq => Some(2),
Kind::AmpEq => Some(2),
Kind::PipeEq => Some(2),
Kind::CaretEq => Some(2),
Kind::GtGtEq => Some(2),
Kind::LtLtEq => Some(2),
Kind::PipePipe => Some(3),
Kind::AmpAmp => Some(4),
Kind::EqEq => Some(5),
Kind::BangEq => Some(5),
Kind::Gt => Some(5),
Kind::GtEq => Some(5),
Kind::Lt => Some(5),
Kind::LtEq => Some(5),
Kind::Pipe => Some(6),
Kind::Caret => Some(7),
Kind::Amp => Some(8),
Kind::GtGt => Some(9),
Kind::LtLt => Some(9),
Kind::Plus => Some(10),
Kind::Minus => Some(10),
Kind::Asterisk => Some(11),
Kind::Slash => Some(11),
Kind::Percent => Some(11),
Kind::AsteriskAsterisk => Some(12),
_ => None
}
}
}
impl fmt::Display for Kind {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(

Loading…
Cancel
Save