diff --git a/cli/src/generate/build_tables/token_conflicts.rs b/cli/src/generate/build_tables/token_conflicts.rs index edb92108..a71dcca6 100644 --- a/cli/src/generate/build_tables/token_conflicts.rs +++ b/cli/src/generate/build_tables/token_conflicts.rs @@ -1,9 +1,9 @@ -use crate::generate::build_tables::item::{TokenSetDisplay}; +use crate::generate::build_tables::item::TokenSetDisplay; use crate::generate::grammars::{LexicalGrammar, SyntaxGrammar}; use crate::generate::nfa::{CharacterSet, NfaCursor, NfaTransition}; use crate::generate::rules::TokenSet; -use std::collections::HashSet; use std::cmp::Ordering; +use std::collections::HashSet; use std::fmt; #[derive(Clone, Debug, Default, PartialEq, Eq)] diff --git a/cli/src/generate/nfa.rs b/cli/src/generate/nfa.rs index 2e23dc1e..abab8739 100644 --- a/cli/src/generate/nfa.rs +++ b/cli/src/generate/nfa.rs @@ -266,6 +266,13 @@ fn compare_chars(left: &Vec, right: &Vec) -> SetComparision { result.common = true; } } + + match (i, j) { + (Some(_), _) => result.left_only = true, + (_, Some(_)) => result.right_only = true, + _ => {} + } + result } @@ -810,5 +817,12 @@ mod tests { ); assert!(a.does_intersect(&b)); assert!(b.does_intersect(&a)); + + let (a, b) = ( + CharacterSet::Include(vec!['c']), + CharacterSet::Exclude(vec!['a']), + ); + assert!(a.does_intersect(&b)); + assert!(b.does_intersect(&a)); } }