Fix more parser bugs

This commit is contained in:
Greg Shuflin 2021-11-22 01:52:08 -08:00
parent fc463d3807
commit 9c0f60b6ce
2 changed files with 8 additions and 12 deletions

View File

@ -470,7 +470,7 @@ peg::parser! {
bin_literal() / hex_literal() / unmarked_literal() bin_literal() / hex_literal() / unmarked_literal()
rule unmarked_literal() -> ExpressionKind = rule unmarked_literal() -> ExpressionKind =
digits:digits() { ExpressionKind::NatLiteral(digits.parse().unwrap()) } digits:digits() { let n = digits.chars().filter(|ch| *ch != '_').collect::<String>().parse().unwrap(); ExpressionKind::NatLiteral(n) }
rule bin_literal() -> ExpressionKind = rule bin_literal() -> ExpressionKind =
"0b" digits:bin_digits() {? parse_binary(digits).map(ExpressionKind::NatLiteral) } "0b" digits:bin_digits() {? parse_binary(digits).map(ExpressionKind::NatLiteral) }
@ -482,12 +482,12 @@ peg::parser! {
ds:$( digits() "." digits()? / "." digits() ) { ExpressionKind::FloatLiteral(ds.parse().unwrap()) } ds:$( digits() "." digits()? / "." digits() ) { ExpressionKind::FloatLiteral(ds.parse().unwrap()) }
rule digits() -> &'input str = $((digit_group() "_"*)+) rule digits() -> &'input str = $((digit_group() "_"*)+)
rule bin_digits() -> &'input str = $((bin_digit_group() "_"*)+) rule bin_digits() -> &'input str = $((bin_digit_group() "_"*)+)
rule hex_digits() -> &'input str = $((hex_digit_group() "_"*)+) rule hex_digits() -> &'input str = $((hex_digit_group() "_"*)+)
rule digit_group() -> &'input str = $(['0'..='9']+) rule digit_group() -> &'input str = $(['0'..='9']+)
rule bin_digit_group() -> &'input str = $(['0' | '1']+) rule bin_digit_group() -> &'input str = $(['0' | '1']+)
rule hex_digit_group() -> &'input str = $(['0'..='9' | 'a'..='f' | 'A'..='F']+) rule hex_digit_group() -> &'input str = $(['0'..='9' | 'a'..='f' | 'A'..='F']+)
} }
} }

View File

@ -1383,7 +1383,6 @@ fn blocks() {
assert_block!("{}", vec![].into()); assert_block!("{}", vec![].into());
//TODO this case is broken in the peg version
let source = r#"{ let source = r#"{
//hella //hella
@ -1391,11 +1390,8 @@ fn blocks() {
11; /*chutney*/0xf 11; /*chutney*/0xf
}"#; }"#;
let mut parser = Parser::new(); assert_block!(
let block = parser.block_comb(source); source,
assert_eq!(
block.unwrap(),
vec![ vec![
Statement { Statement {
id: Default::default(), id: Default::default(),