diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp index 6752b0a903f51c5c0878965d45b4382ec0e658e3..73c7468386b4b3cda290fda5406637b2356b7762 100644 --- a/aarbology2/src/aarbology.cpp +++ b/aarbology2/src/aarbology.cpp @@ -60,6 +60,12 @@ int main ( int argc, char * argv[] ) { TCLAP::MultiArg < std::string > patternInput ( "p", "pattern", "Pattern tree from file", false, "file" ); cmd.add ( patternInput ); + TCLAP::ValueArg < std::string > subtreeWildcardInput ( "w", "subtree_wildcard", "Wildcard to be used in algorithms needing it", false, "-", "file" ); + cmd.add ( subtreeWildcardInput ); + + TCLAP::ValueArg < std::string > nonlinearVariablesInput ( "n", "nonlinear_variables", "Set of nonlinear variables to be used in algorithms needing it", false, "-", "file" ); + cmd.add ( nonlinearVariablesInput ); + TCLAP::SwitchArg ends ( "e", "ends", "Return occurrences as end indexes when applicable", false ); cmd.add ( ends ); @@ -207,11 +213,12 @@ int main ( int argc, char * argv[] ) { alib::XmlDataFactory::toStdout ( res ); } else if ( algorithm.getValue ( ) == "exactTreePatternAutomaton" ) { tree::Tree subject = alib::XmlDataFactory::fromTokens < tree::Tree > ( std::move ( sax::FromXMLParserHelper::parseInput(true, subjectInput).front ( ) ) ); + alphabet::Symbol subtreeWildcard = alib::XmlDataFactory::fromTokens < alphabet::Symbol > ( sax::FromXMLParserHelper::parseInput(subtreeWildcardInput) ); measurements::end ( ); measurements::start ( "Algorithm", measurements::Type::MAIN ); - automaton::Automaton res = arbology::exact::ExactTreePatternAutomaton::construct ( subject ); + automaton::Automaton res = arbology::exact::ExactTreePatternAutomaton::construct ( subject, subtreeWildcard ); measurements::end ( ); measurements::start ( "Output write", measurements::Type::AUXILIARY ); diff --git a/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.cpp b/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.cpp index 5878f8eb4f6067bc94f0bcf95a6b1063b0101fad..d163279f6bcfd4cb910440f02f2a42f204b4ecb9 100644 --- a/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.cpp +++ b/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.cpp @@ -18,18 +18,10 @@ namespace arbology { namespace exact { -automaton::Automaton ExactTreePatternAutomaton::construct ( const tree::Tree & tree ) { - return construct ( tree, alphabet::Symbol ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::SubtreeWildcardSymbol::SUBTREE_WILDCARD ), 0 ) ) ); -} - automaton::Automaton ExactTreePatternAutomaton::construct ( const tree::Tree & tree, const alphabet::Symbol & subtreeWildcard ) { return dispatch ( tree.getData ( ), subtreeWildcard ); } -automaton::InputDrivenNPDA ExactTreePatternAutomaton::construct ( const tree::PrefixRankedTree & tree ) { - return construct ( tree, alphabet::Symbol ( alphabet::RankedSymbol ( alphabet::Symbol ( alphabet::SubtreeWildcardSymbol::SUBTREE_WILDCARD ), 0 ) ) ); -} - automaton::InputDrivenNPDA ExactTreePatternAutomaton::construct ( const tree::PrefixRankedTree & tree, const alphabet::Symbol & subtreeWildcard ) { alphabet::Symbol S = alphabet::symbolFrom ( 'S' ); automaton::InputDrivenNPDA res ( automaton::State ( 0 ), S ); diff --git a/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h b/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h index ee75320844b34d4e1b4cc51a2f5ba76dbed83446..0e08a9bc7a04f0b429e2729f548a099462b16201 100644 --- a/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h +++ b/alib2algo/src/arbology/exact/ExactTreePatternAutomaton.h @@ -23,10 +23,8 @@ public: * Performs conversion. * @return left regular grammar equivalent to source automaton. */ - static automaton::Automaton construct ( const tree::Tree & tree ); static automaton::Automaton construct ( const tree::Tree & tree, const alphabet::Symbol & subtreeWildcard ); - static automaton::InputDrivenNPDA construct ( const tree::PrefixRankedTree & tree ); static automaton::InputDrivenNPDA construct ( const tree::PrefixRankedTree & tree, const alphabet::Symbol & subtreeWildcard ); }; diff --git a/tests.aarbology.sh b/tests.aarbology.sh index f2434b5a62656ff7af21f124b3037945fb65b105..3c6e031d2a86720eed26e7a44e651da6e9e26b0b 100755 --- a/tests.aarbology.sh +++ b/tests.aarbology.sh @@ -356,7 +356,7 @@ function runTestPatternEnds { runTestPatternEnds "Exact Pattern Matching Automaton (PrefixRanked)" "./aarbology2 -a exactPatternMatchingAutomaton -p <(./acast2 -t PrefixRankedPattern -i <(./alphabetManip2 -o add -i \"\$PATTERN_FILE\" -a <( ./alphabetManip2 -o get -i \"\$SUBJECT_FILE\" ) ) ) | ./adeterminize2 | ./arun2 -t occurrences -a - -i <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" | ./acast2 -t LinearString ) | ./astat2 -p size" RAND_SIZE_SUBJECT=100 -runTestPatternEnds "Exact Tree Pattern Automaton (PrefixRanked)" "./aarbology2 -a exactTreePatternAutomaton -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) | ./adeterminize2 | ./arun2 -t result -i <(./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" | ./acast2 -t LinearString ) | ./astat2 -p size" +runTestPatternEnds "Exact Tree Pattern Automaton (PrefixRanked)" "./aarbology2 -a exactTreePatternAutomaton -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -w <( ./aaccess2 --tree subtree_wildcard -i \"\$PATTERN_FILE\" ) | ./adeterminize2 | ./arun2 -t result -i <(./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" | ./acast2 -t LinearString ) | ./astat2 -p size" RAND_SIZE_SUBJECT=1000 runTestSubtree "Exact Boyer Moore Horspool (Subtree PrefixRankedBar)" "./aarbology2 -a boyerMooreHorspool -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarTree -i <(./alphabetManip2 -o add -i \"\$PATTERN_FILE\" -a <(./alphabetManip2 -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size"