From 9811b0a26b439931516f45950068c4101a45db57 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 19 May 2015 13:16:27 +0200 Subject: [PATCH] +aarbology binary --- aarbology2/makefile | 178 ++++++++++++++++++ aarbology2/src/aarbology.cpp | 101 ++++++++++ .../src/arbology/exact/ExactSubtreeMatch.cpp | 20 ++ .../src/arbology/exact/ExactSubtreeMatch.h | 2 + examples2/tree/RankedTree.xml | 55 +++++- examples2/tree/RankedTree2.xml | 103 ++++++++++ makefile | 1 + 7 files changed, 459 insertions(+), 1 deletion(-) create mode 100644 aarbology2/makefile create mode 100644 aarbology2/src/aarbology.cpp create mode 100644 examples2/tree/RankedTree2.xml diff --git a/aarbology2/makefile b/aarbology2/makefile new file mode 100644 index 0000000000..86b9297bee --- /dev/null +++ b/aarbology2/makefile @@ -0,0 +1,178 @@ +SHELL:=/bin/bash +EXECUTABLE:=aarbology2 + +define NEW_LINE + + +endef + +export NEW_LINE + +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. + +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. + +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) + +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) + +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc + +all: + @echo "What to do master?" + +obj%/makefile: makefile + mkdir -p $(dir $@) + echo "\ + SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ + SRCDIR:=$${NEW_LINE}\ + DEPTH:=$${NEW_LINE}\ + OBJECTS_BASE_DIR:=$${NEW_LINE}\ + $${NEW_LINE}\ + define NEW_LINE$${NEW_LINE}\ + $${NEW_LINE}\ + $${NEW_LINE}\ + endef$${NEW_LINE}\ + $${NEW_LINE}\ + export NEW_LINE$${NEW_LINE}\ + $${NEW_LINE}\ + CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC -I/usr/include/libxml2/ -I../../\$$(DEPTH)alib2std/src -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/ -I../../\$$(DEPTH)alib2elgo/src/$${NEW_LINE}\ + $${NEW_LINE}\ + SOURCES:= \$$(shell find ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ + DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ + OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))$${NEW_LINE}\ + SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)$${NEW_LINE}\ + OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))$${NEW_LINE}\ + OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))$${NEW_LINE}\ + $${NEW_LINE}\ + .PHONY: all$${NEW_LINE}\ + .PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)$${NEW_LINE}\ + $${NEW_LINE}\ + all: \$$(OBJECTS_DIRS) \$$(OBJECTS)$${NEW_LINE}\ + $${NEW_LINE}\ + %.d: makefile$${NEW_LINE}\ + @echo \"\\$${NEW_LINE}\ + \$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -M \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \" > \$$@$${NEW_LINE}\ + $${NEW_LINE}\ + %/makefile: makefile$${NEW_LINE}\ + mkdir -p \$$(dir \$$@)$${NEW_LINE}\ + cp makefile \$$@$${NEW_LINE}\ + $${NEW_LINE}\ + %/: FORCE | %/makefile$${NEW_LINE}\ + @accesstime=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ + \$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=\$$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\$${NEW_LINE}\ + accesstime2=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ + if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\$${NEW_LINE}\ + touch .; \\$${NEW_LINE}\ + fi$${NEW_LINE}\ + $${NEW_LINE}\ + FORCE:$${NEW_LINE}\ + $${NEW_LINE}\ + -include \$$(DEPENDENCIES)" > $@ + +gcc-debug: build-gcc-debug + +llvm-debug: build-llvm-debug + +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release + $(RM) -r doc + +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc + + + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) + +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) + mkdir -p $(dir $@) + clang++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ + +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ + +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ + +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ + + + +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) + +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) + +build-gcc-release: bin-gcc-release/$(EXECUTABLE) + +build-llvm-release: bin-llvm-release/$(EXECUTABLE) + + + +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug + +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug + +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release + +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release + + + +FORCE: + + + +doc: + doxygen + diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp new file mode 100644 index 0000000000..60460031e0 --- /dev/null +++ b/aarbology2/src/aarbology.cpp @@ -0,0 +1,101 @@ +/* + * aarbology.cpp + * + * Created on: 26. 3. 2014 + * Author: Jan Travnicek + */ + +#include <tclap/CmdLine.h> +#include <vector> + +#include <factory/XmlDataFactory.hpp> +#include <exception/AlibException.h> +#include <tree/Tree.h> +#include <container/Container.h> + +#include <arbology/exact/ExactSubtreeMatch.h> + +int main(int argc, char* argv[]) { + try { + TCLAP::CmdLine cmd("Arbology algorithm access binary", ' ', "0.01"); + + std::vector<std::string> allowed; + allowed.push_back("exactSubtreeMatch"); + TCLAP::ValuesConstraint<std::string> allowedVals( allowed ); + + TCLAP::ValueArg<std::string> algorithm( "a", "algorithm", "Execute algorithm", false, "exactSubtreeMatch", &allowedVals); + cmd.add(algorithm); + + TCLAP::MultiArg<std::string> subject( "s", "subject", "Subject tree from file", false, "file"); + cmd.add( subject ); + + TCLAP::MultiArg<std::string> pattern( "p", "pattern", "Pattern tree from file", false, "file"); + cmd.add( pattern ); + + cmd.parse(argc,argv); + + int needPattern = 0; + int needSubject = 0; + if( algorithm.getValue() == "exactSubtreeMatch") { + needPattern = needSubject = 1; + } else { + } + + std::deque<std::deque<sax::Token>> subjectTokens; + if(subject.isSet()) { + for(const std::string& fileName : subject.getValue()) { + std::deque<sax::Token> tmp; + if(fileName == "-") { + sax::SaxParseInterface::parseStdin(tmp); + } else { + sax::SaxParseInterface::parseFile(fileName, tmp); + } + subjectTokens.emplace_back(std::move(tmp)); + } + } else if(needSubject) { + std::deque<sax::Token> tmp; + sax::SaxParseInterface::parseStdin(tmp); + subjectTokens.emplace_back(std::move(tmp)); + } + + std::deque<std::deque<sax::Token>> patternTokens; + if(pattern.isSet()) { + for(const std::string& fileName : pattern.getValue()) { + std::deque<sax::Token> tmp; + if(fileName == "-") { + sax::SaxParseInterface::parseStdin(tmp); + } else { + sax::SaxParseInterface::parseFile(fileName, tmp); + } + patternTokens.emplace_back(std::move(tmp)); + } + } else if(needPattern) { + std::deque<sax::Token> tmp; + sax::SaxParseInterface::parseStdin(tmp); + patternTokens.emplace_back(std::move(tmp)); + } + + if( algorithm.getValue() == "exactSubtreeMatch") { + tree::Tree subject = alib::XmlDataFactory::fromTokens<tree::Tree>(subjectTokens.front()); + tree::Tree pattern = alib::XmlDataFactory::fromTokens<tree::Tree>(patternTokens.front()); + std::set<unsigned> res = arbology::exact::ExactSubtreeMatch::match(subject, pattern); + alib::XmlDataFactory::toStdout(res); + return 0; + } else { + throw exception::AlibException( "Invalid algorithm" ); + return 1; + } + } catch( const exception::AlibException & exception ) { + alib::XmlDataFactory::toStdout( exception ); + return 1; + } catch(const TCLAP::ArgException& exception) { + std::cout << exception.error() << std::endl; + return 2; + } catch (const std::exception& exception) { + std::cerr << "Exception caught: " << exception.what() << std::endl; + return 3; + } catch(...) { + std::cerr << "Unknown exception caught." << std::endl; + return 127; + } +} diff --git a/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp b/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp index 0870594266..fb89ade3de 100644 --- a/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp +++ b/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp @@ -8,6 +8,7 @@ #include "ExactSubtreeMatch.h" #include <exception/AlibException.h> #include <tree/ranked/RankedTree.h> +#include <tree/ranked/PrefixRankedNotation.h> #include <tree/unranked/UnrankedTree.h> #include <deque> @@ -71,6 +72,20 @@ std::set<unsigned> ExactSubtreeMatch::match(const tree::RankedTree& subject, con return occ; } +std::set<unsigned> ExactSubtreeMatch::match(const tree::PrefixRankedNotation& subject, const tree::PrefixRankedNotation& pattern) { + std::set<unsigned> occ; + for(unsigned i = 0; i <= subject.getContent().size() - pattern.getContent().size(); i++) { + unsigned j = 0; + for(; j < pattern.getContent().size(); j++) { + if(pattern.getContent()[j] != subject.getContent()[i+j]) break; + } + + if( j == pattern.getContent().size() ) + occ.insert(i); + } + return occ; +} + void ExactSubtreeMatch::Visit(void* data, const tree::UnrankedTree& subject, const tree::UnrankedTree& pattern) const { std::set<unsigned> & res = *((std::set<unsigned>*) data); res = this->match(subject, pattern); @@ -81,6 +96,11 @@ void ExactSubtreeMatch::Visit(void* data, const tree::RankedTree& subject, const res = this->match(subject, pattern); } +void ExactSubtreeMatch::Visit(void* data, const tree::PrefixRankedNotation& subject, const tree::PrefixRankedNotation& pattern) const { + std::set<unsigned> & res = *((std::set<unsigned>*) data); + res = this->match(subject, pattern); +} + const ExactSubtreeMatch ExactSubtreeMatch::EXACT_SUBTREE_MATCH; } /* namespace exact */ diff --git a/alib2algo/src/arbology/exact/ExactSubtreeMatch.h b/alib2algo/src/arbology/exact/ExactSubtreeMatch.h index bbfd582ee8..de77fa513e 100644 --- a/alib2algo/src/arbology/exact/ExactSubtreeMatch.h +++ b/alib2algo/src/arbology/exact/ExactSubtreeMatch.h @@ -30,6 +30,7 @@ public: static std::set<unsigned> match(const tree::UnrankedTree& subject, const tree::UnrankedTree& pattern); static std::set<unsigned> match(const tree::RankedTree& subject, const tree::RankedTree& pattern); + static std::set<unsigned> match(const tree::PrefixRankedNotation& subject, const tree::PrefixRankedNotation& pattern); private: static bool matchHelper(const tree::UnrankedNode& subject, const tree::UnrankedNode& pattern); static bool matchHelper(const tree::RankedNode& subject, const tree::RankedNode& pattern); @@ -39,6 +40,7 @@ private: void Visit(void*, const tree::UnrankedTree& subject, const tree::UnrankedTree& pattern) const; void Visit(void*, const tree::RankedTree& subject, const tree::RankedTree& pattern) const; + void Visit(void*, const tree::PrefixRankedNotation& subject, const tree::PrefixRankedNotation& pattern) const; static const ExactSubtreeMatch EXACT_SUBTREE_MATCH; }; diff --git a/examples2/tree/RankedTree.xml b/examples2/tree/RankedTree.xml index cfa71eadf9..bdf21190ff 100644 --- a/examples2/tree/RankedTree.xml +++ b/examples2/tree/RankedTree.xml @@ -1,2 +1,55 @@ <?xml version="1.0"?> -<RankedTree><rankedAlphabet><RankedSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel><Integer>2</Integer></RankedSymbol><RankedSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel><Integer>1</Integer></RankedSymbol><RankedSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel><Integer>0</Integer></RankedSymbol></rankedAlphabet><rankedNode><RankedSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel><Integer>2</Integer></RankedSymbol><rankedNode><RankedSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel><Integer>2</Integer></RankedSymbol><rankedNode><RankedSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel><Integer>2</Integer></RankedSymbol><rankedNode><RankedSymbol><PrimitiveLabel><Character>b</Character></PrimitiveLabel><Integer>1</Integer></RankedSymbol><rankedNode><RankedSymbol><PrimitiveLabel><Character>a</Character></PrimitiveLabel><Integer>2</Integer></RankedSymbol><rankedNode><RankedSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel><Integer>0</Integer></RankedSymbol></rankedNode><rankedNode><RankedSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel><Integer>0</Integer></RankedSymbol></rankedNode></rankedNode></rankedNode><rankedNode><RankedSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel><Integer>0</Integer></RankedSymbol></rankedNode></rankedNode><rankedNode><RankedSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel><Integer>0</Integer></RankedSymbol></rankedNode></rankedNode><rankedNode><RankedSymbol><PrimitiveLabel><Character>c</Character></PrimitiveLabel><Integer>0</Integer></RankedSymbol></rankedNode></rankedNode></RankedTree> +<RankedTree> + <rankedAlphabet> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <RankedSymbol> + <PrimitiveLabel> + <Character>b</Character> + </PrimitiveLabel> + <Integer>1</Integer> + </RankedSymbol> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedAlphabet> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>b</Character> + </PrimitiveLabel> + <Integer>1</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + </rankedNode> + </rankedNode> +</RankedTree> diff --git a/examples2/tree/RankedTree2.xml b/examples2/tree/RankedTree2.xml new file mode 100644 index 0000000000..24601d1d27 --- /dev/null +++ b/examples2/tree/RankedTree2.xml @@ -0,0 +1,103 @@ +<?xml version="1.0"?> +<RankedTree> + <rankedAlphabet> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <RankedSymbol> + <PrimitiveLabel> + <Character>b</Character> + </PrimitiveLabel> + <Integer>1</Integer> + </RankedSymbol> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedAlphabet> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>b</Character> + </PrimitiveLabel> + <Integer>1</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>a</Character> + </PrimitiveLabel> + <Integer>2</Integer> + </RankedSymbol> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + </rankedNode> + </rankedNode> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + </rankedNode> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + </rankedNode> + <rankedNode> + <RankedSymbol> + <PrimitiveLabel> + <Character>c</Character> + </PrimitiveLabel> + <Integer>0</Integer> + </RankedSymbol> + </rankedNode> + </rankedNode> +</RankedTree> diff --git a/makefile b/makefile index 41eae4c46e..c16f5a982b 100644 --- a/makefile +++ b/makefile @@ -8,6 +8,7 @@ CORE_LIB = alib2data ALGO_LIB = alib2algo ELGO_LIB = alib2elgo SUBDIRS_BINS = aecho2 \ + aarbology2 \ aconversions2 \ aconvert2 \ acompaction2 \ -- GitLab