From 24034efc7b1333b27f1161871ece27b7ea226248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <tomaspecka@gmail.com> Date: Thu, 16 Jan 2014 16:34:24 +0100 Subject: [PATCH] Build for are2fa --- .../src/conversions/re2fa/Brzozowski.cpp | 14 +++++++ .../src/conversions/re2fa/Brzozowski.h | 3 ++ .../src/conversions/re2fa/Glushkov.cpp | 13 +++++++ aconversions/src/conversions/re2fa/Glushkov.h | 16 +++++++- aconversions/src/conversions/re2fa/Makefile | 26 ++++++++++--- .../conversions/re2fa/are2fa.brzozowski.cpp | 37 +++++++++++++++++++ .../src/conversions/re2fa/are2fa.glushkov.cpp | 37 +++++++++++++++++++ .../re2fa/{are2fa.cpp => are2fa.thompson.cpp} | 8 ---- 8 files changed, 140 insertions(+), 14 deletions(-) create mode 100644 aconversions/src/conversions/re2fa/are2fa.brzozowski.cpp create mode 100644 aconversions/src/conversions/re2fa/are2fa.glushkov.cpp rename aconversions/src/conversions/re2fa/{are2fa.cpp => are2fa.thompson.cpp} (74%) diff --git a/aconversions/src/conversions/re2fa/Brzozowski.cpp b/aconversions/src/conversions/re2fa/Brzozowski.cpp index 479ffb37f1..ba42a73b5d 100644 --- a/aconversions/src/conversions/re2fa/Brzozowski.cpp +++ b/aconversions/src/conversions/re2fa/Brzozowski.cpp @@ -7,7 +7,21 @@ #include "Brzozowski.h" +using namespace automaton; +using namespace regexp; + namespace conversions { +Brzozowski::Brzozowski( const RegExp & re ) : AbstractREtoFAConverter( re ) +{ + +} + +const FSM Brzozowski::convert( void ) +{ + return m_fsm; +} + + } /* namespace conversions */ diff --git a/aconversions/src/conversions/re2fa/Brzozowski.h b/aconversions/src/conversions/re2fa/Brzozowski.h index cae0c27c9a..3da6f85cd9 100644 --- a/aconversions/src/conversions/re2fa/Brzozowski.h +++ b/aconversions/src/conversions/re2fa/Brzozowski.h @@ -18,6 +18,9 @@ namespace conversions */ class Brzozowski : public AbstractREtoFAConverter { +public: + Brzozowski( const regexp::RegExp & re ); + const automaton::FSM convert( void ); }; } /* namespace conversions */ diff --git a/aconversions/src/conversions/re2fa/Glushkov.cpp b/aconversions/src/conversions/re2fa/Glushkov.cpp index be1c514c89..c784a226a5 100644 --- a/aconversions/src/conversions/re2fa/Glushkov.cpp +++ b/aconversions/src/conversions/re2fa/Glushkov.cpp @@ -7,7 +7,20 @@ #include "Glushkov.h" +using namespace automaton; +using namespace regexp; + namespace conversions { +Glushkov::Glushkov( const RegExp & re ) : AbstractREtoFAConverter( re ) +{ + +} + +const FSM Glushkov::convert( void ) +{ + return m_fsm; +} + } /* namespace conversions */ diff --git a/aconversions/src/conversions/re2fa/Glushkov.h b/aconversions/src/conversions/re2fa/Glushkov.h index 6032ce3f91..5da8240f33 100644 --- a/aconversions/src/conversions/re2fa/Glushkov.h +++ b/aconversions/src/conversions/re2fa/Glushkov.h @@ -8,6 +8,9 @@ #ifndef GLUSHKOV_H_ #define GLUSHKOV_H_ +#include <regexp/RegExp.h> +#include <regexp/RegExpSymbol.h> + #include "AbstractREtoFAConverter.h" namespace conversions @@ -18,9 +21,20 @@ namespace conversions */ class Glushkov : public AbstractREtoFAConverter { +public: + Glushkov( const regexp::RegExp & re ); + const automaton::FSM convert( void ); + +private: + struct Struct + { + regexp::RegExpSymbol & m_symbol; + int m_i; + + std::string constructStateName(); + }; }; } /* namespace conversions */ - #endif /* GLUSHKOV_H_ */ diff --git a/aconversions/src/conversions/re2fa/Makefile b/aconversions/src/conversions/re2fa/Makefile index 7f78a561d2..fd14edb345 100644 --- a/aconversions/src/conversions/re2fa/Makefile +++ b/aconversions/src/conversions/re2fa/Makefile @@ -1,12 +1,28 @@ -EXECUTABLE=are2fa +all: are2fa.glushkov are2fa.brzozowski are2fa.thompson +# cp are2fa.glushkov $(BIN_DIR) +# cp are2fa.brzozowski $(BIN_DIR) + cp are2fa.thompson $(BIN_DIR) -all: $(EXECUTABLE).o AbstractREtoFAConverter.o Brzozowski.o Glushkov.o Thompson.o AutomatonUtils.o ConversionException.o - $(LD) $(LDFLAGS) $^ -o $(EXECUTABLE) - cp $(EXECUTABLE) $(BIN_DIR) +#are2fa.glushkov: are2fa.glushkov.o Glushkov.o AbstractREtoFAConverter.o +# $(LD) $(LDFLAGS) $^ -o $@ -$(EXECUTABLE).o: are2fa.cpp Brzozowski.h AbstractREtoFAConverter.h Glushkov.h Thompson.h +#are2fa.brzozowski: are2fa.brzozowski.o Brzozowski.o AbstractREtoFAConverter.o +# $(LD) $(LDFLAGS) $^ -o $@ + +are2fa.thompson: are2fa.thompson.o Thompson.o AbstractREtoFAConverter.o AutomatonUtils.o ConversionException.o + $(LD) $(LDFLAGS) $^ -o $@ + + +are2fa.brzozowski.o: are2fa.brzozowski.cpp Brzozowski.h AbstractREtoFAConverter.h + $(CXX) $(CXXFLAGS) $< -o $@ + +are2fa.glushkov.o: are2fa.glushkov.cpp Glushkov.h AbstractREtoFAConverter.h + $(CXX) $(CXXFLAGS) $< -o $@ + +are2fa.thompson.o: are2fa.thompson.cpp Thompson.h AbstractREtoFAConverter.h $(CXX) $(CXXFLAGS) $< -o $@ + AbstractREtoFAConverter.o: AbstractREtoFAConverter.cpp AbstractREtoFAConverter.h $(CXX) $(CXXFLAGS) $< -o $@ diff --git a/aconversions/src/conversions/re2fa/are2fa.brzozowski.cpp b/aconversions/src/conversions/re2fa/are2fa.brzozowski.cpp new file mode 100644 index 0000000000..e23912e899 --- /dev/null +++ b/aconversions/src/conversions/re2fa/are2fa.brzozowski.cpp @@ -0,0 +1,37 @@ +#include <iostream> + +#include <AlibException.h> +#include <automaton/AutomatonPrinter.h> +#include <regexp/RegExp.h> +#include <regexp/RegExpParser.h> +#include <sax/SaxInterface.h> + +#include "Brzozowski.h" + + +using namespace std; +using namespace automaton; +using namespace regexp; +using namespace alib; +using namespace conversions; + +int main(int argc, char** argv) +{ + try + { + list<Token> tokens; + string input(istreambuf_iterator<char>(cin), (istreambuf_iterator<char>())); + SaxInterface::parseMemory(input, tokens); + RegExp re = RegExpParser::parse(tokens); + + Brzozowski conv( re ); + conv.convert( ).toXML( cout ); + } + catch( AlibException & e ) + { + cout << e.what() << endl; + return 1; + } + + return 0; +} diff --git a/aconversions/src/conversions/re2fa/are2fa.glushkov.cpp b/aconversions/src/conversions/re2fa/are2fa.glushkov.cpp new file mode 100644 index 0000000000..9fb57c5d65 --- /dev/null +++ b/aconversions/src/conversions/re2fa/are2fa.glushkov.cpp @@ -0,0 +1,37 @@ +#include <iostream> + +#include <AlibException.h> +#include <automaton/AutomatonPrinter.h> +#include <regexp/RegExp.h> +#include <regexp/RegExpParser.h> +#include <sax/SaxInterface.h> + +#include "Glushkov.h" + + +using namespace std; +using namespace automaton; +using namespace regexp; +using namespace alib; +using namespace conversions; + +int main(int argc, char** argv) +{ + try + { + list<Token> tokens; + string input(istreambuf_iterator<char>(cin), (istreambuf_iterator<char>())); + SaxInterface::parseMemory(input, tokens); + RegExp re = RegExpParser::parse(tokens); + + Glushkov conv( re ); + conv.convert( ).toXML( cout ); + } + catch( AlibException & e ) + { + cout << e.what() << endl; + return 1; + } + + return 0; +} diff --git a/aconversions/src/conversions/re2fa/are2fa.cpp b/aconversions/src/conversions/re2fa/are2fa.thompson.cpp similarity index 74% rename from aconversions/src/conversions/re2fa/are2fa.cpp rename to aconversions/src/conversions/re2fa/are2fa.thompson.cpp index 167925f02f..0535c949d1 100644 --- a/aconversions/src/conversions/re2fa/are2fa.cpp +++ b/aconversions/src/conversions/re2fa/are2fa.thompson.cpp @@ -1,11 +1,3 @@ -//============================================================================ -// Name : are2fa.cpp -// Author : Tomas Pecka -// Version : -// Copyright : -// Description : -//============================================================================ - #include <iostream> #include <AlibException.h> -- GitLab