use sim_kernel::{Fixity, PrattOperator, PrattResult, PrattTable, Symbol};
pub fn supports_pratt() -> bool {
true
}
pub fn default_pratt_table() -> PrattTable {
let mut table = PrattTable::new();
table.register(PrattOperator {
symbol: Symbol::new("+"),
fixity: Fixity::InfixLeft,
left_bp: 50,
right_bp: 51,
result: PrattResult::ExprInfix,
});
table.register(PrattOperator {
symbol: Symbol::new("-"),
fixity: Fixity::InfixLeft,
left_bp: 50,
right_bp: 51,
result: PrattResult::ExprInfix,
});
table.register(PrattOperator {
symbol: Symbol::new("*"),
fixity: Fixity::InfixLeft,
left_bp: 60,
right_bp: 61,
result: PrattResult::ExprInfix,
});
table.register(PrattOperator {
symbol: Symbol::new("/"),
fixity: Fixity::InfixLeft,
left_bp: 60,
right_bp: 61,
result: PrattResult::ExprInfix,
});
table.register(PrattOperator {
symbol: Symbol::new("^"),
fixity: Fixity::InfixRight,
left_bp: 80,
right_bp: 80,
result: PrattResult::ExprInfix,
});
table.register(PrattOperator {
symbol: Symbol::new("-"),
fixity: Fixity::Prefix,
left_bp: 0,
right_bp: 90,
result: PrattResult::ExprPrefix,
});
table.register(PrattOperator {
symbol: Symbol::new("!"),
fixity: Fixity::Postfix,
left_bp: 100,
right_bp: 0,
result: PrattResult::ExprPostfix,
});
table
}