Skip to content

Commit cfd3b40

Browse files
committed
Support more term-level operators
1 parent eb8ed55 commit cfd3b40

1 file changed

Lines changed: 39 additions & 3 deletions

File tree

src/annot.rs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ where
219219
),
220220
_ => unimplemented!(),
221221
},
222+
TokenKind::BinOp(BinOpToken::Minus) => {
223+
let (operand, _) = self.parse_atom_term()?;
224+
(operand.neg(), TermKind::Other)
225+
}
222226
TokenKind::BinOp(BinOpToken::Star) => {
223227
let (operand, kind) = self.parse_atom_term()?;
224228
match kind {
@@ -237,11 +241,12 @@ where
237241
}
238242
_ => {
239243
return Err(ParseAttrError::unexpected_token_tree(
240-
"*, ^, (, identifier, or literal",
244+
"-, *, ^, (, identifier, or literal",
241245
tt,
242246
))
243247
}
244248
};
249+
245250
Ok((term, kind))
246251
}
247252

@@ -264,11 +269,36 @@ where
264269
let (rhs, _) = self.parse_atom_term()?;
265270
lhs.mul(rhs)
266271
}
272+
Some(TokenKind::EqEq) => {
273+
self.consume();
274+
let (rhs, _) = self.parse_atom_term()?;
275+
lhs.eq(rhs)
276+
}
277+
Some(TokenKind::Ne) => {
278+
self.consume();
279+
let (rhs, _) = self.parse_atom_term()?;
280+
lhs.ne(rhs)
281+
}
267282
Some(TokenKind::Ge) => {
268283
self.consume();
269284
let (rhs, _) = self.parse_atom_term()?;
270285
lhs.ge(rhs)
271286
}
287+
Some(TokenKind::Le) => {
288+
self.consume();
289+
let (rhs, _) = self.parse_atom_term()?;
290+
lhs.le(rhs)
291+
}
292+
Some(TokenKind::Gt) => {
293+
self.consume();
294+
let (rhs, _) = self.parse_atom_term()?;
295+
lhs.gt(rhs)
296+
}
297+
Some(TokenKind::Lt) => {
298+
self.consume();
299+
let (rhs, _) = self.parse_atom_term()?;
300+
lhs.lt(rhs)
301+
}
272302
_ => return Ok((lhs, lhs_kind)),
273303
};
274304

@@ -321,11 +351,17 @@ where
321351

322352
fn parse_formula_atom(&mut self) -> Result<chc::Formula<T::Output>> {
323353
match self.look_ahead_token_tree(0).cloned() {
324-
Some(TokenTree::Token(Token { kind: TokenKind::Not, .. }, _)) => {
354+
Some(TokenTree::Token(
355+
Token {
356+
kind: TokenKind::Not,
357+
..
358+
},
359+
_,
360+
)) => {
325361
self.consume();
326362
let atom = self.parse_atom()?;
327363
Ok(chc::Formula::Atom(atom).not())
328-
},
364+
}
329365
Some(TokenTree::Delimited(_, _, Delimiter::Parenthesis, s)) => {
330366
self.consume();
331367
let mut parser = Parser {

0 commit comments

Comments
 (0)