Skip to content

Commit be067d9

Browse files
committed
Accept YaccKind and YaccOriginalActionKind prefix in grmtools section
1 parent 7c21a9d commit be067d9

File tree

1 file changed

+30
-18
lines changed

1 file changed

+30
-18
lines changed

cfgrammar/src/lib/yacc/parser.rs

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -381,34 +381,46 @@ impl YaccParser {
381381
update_yacc_kind: bool,
382382
) -> Result<usize, YaccGrammarError> {
383383
// Compares haystack converted to lowercase to needle (assumed to be lowercase).
384-
fn starts_with_lower(needle: &'static str, haystack: &'_ str) -> bool {
384+
fn starts_with_lower(needle: &'_ str, haystack: &'_ str) -> bool {
385385
if let Some((prefix, _)) = haystack.split_at_checked(needle.len()) {
386386
prefix.to_lowercase() == needle
387387
} else {
388388
false
389389
}
390390
}
391+
const ACTION_KINDS: [(&str, YaccOriginalActionKind); 3] = [
392+
("noaction", YaccOriginalActionKind::NoAction),
393+
("useraction", YaccOriginalActionKind::UserAction),
394+
("genericparsetree", YaccOriginalActionKind::GenericParseTree),
395+
];
391396

392-
const YACC_KINDS: [(&str, YaccKind); 5] = [
393-
("grmtools", YaccKind::Grmtools),
394-
(
395-
"original(noaction)",
396-
YaccKind::Original(YaccOriginalActionKind::NoAction),
397-
),
398-
(
399-
"original(useraction)",
400-
YaccKind::Original(YaccOriginalActionKind::UserAction),
401-
),
402-
(
403-
"original(genericparsetree)",
404-
YaccKind::Original(YaccOriginalActionKind::GenericParseTree),
405-
),
406-
("Eco", YaccKind::Eco),
397+
let mut yacc_kinds = vec![
398+
("grmtools".to_string(), YaccKind::Grmtools),
399+
("yacckind::grmtools".to_string(), YaccKind::Grmtools),
400+
("Eco".to_string(), YaccKind::Eco),
401+
("yackind::Eco".to_string(), YaccKind::Eco),
407402
];
403+
for (name, action_kind) in ACTION_KINDS {
404+
let yk = "YaccKind".to_lowercase();
405+
let ak = "YaccOriginalActionKind".to_lowercase();
406+
yacc_kinds.push((format!("original({name})"), YaccKind::Original(action_kind)));
407+
yacc_kinds.push((
408+
format!("{yk}::original({name})"),
409+
YaccKind::Original(action_kind),
410+
));
411+
yacc_kinds.push((
412+
format!("{yk}::original({ak}::{name})"),
413+
YaccKind::Original(action_kind),
414+
));
415+
yacc_kinds.push((
416+
format!("original({ak}::{name})"),
417+
YaccKind::Original(action_kind),
418+
));
419+
}
408420
let j = self.parse_ws(i, false)?;
409421
let s = &self.src[i..];
410-
for (kind_name, kind) in YACC_KINDS {
411-
if starts_with_lower(kind_name, s) {
422+
for (kind_name, kind) in yacc_kinds {
423+
if starts_with_lower(&kind_name, s) {
412424
if update_yacc_kind {
413425
self.yacc_kind = Some(kind);
414426
}

0 commit comments

Comments
 (0)