From 8652b44d5d5c246cf75443a11401a11eaa972562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ko=C4=8Di=C4=8Dka?= <martin.kocicka@gmail.com> Date: Wed, 11 May 2016 10:43:45 +0200 Subject: [PATCH] implemented generating unique end of input symbol for CFG --- alib2algo/src/grammar/parsing/LRParser.cpp | 26 +++++++++++++++++++++ alib2algo/src/grammar/parsing/LRParser.h | 27 ++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 alib2algo/src/grammar/parsing/LRParser.cpp create mode 100644 alib2algo/src/grammar/parsing/LRParser.h diff --git a/alib2algo/src/grammar/parsing/LRParser.cpp b/alib2algo/src/grammar/parsing/LRParser.cpp new file mode 100644 index 0000000000..4abbc01eed --- /dev/null +++ b/alib2algo/src/grammar/parsing/LRParser.cpp @@ -0,0 +1,26 @@ +/* + * LRParser.cpp + * + * Created on: 30. 4. 2016 + * Author: Martin Kocicka + */ + +#include "LRParser.h" + +#include <stack> + +namespace grammar { + +namespace parsing { + +alphabet::Symbol LRParser::getEndOfInputSymbol ( grammar::CFG originalGrammar ) { + alphabet::Symbol endOfInputSymbol = alphabet::symbolFrom ( "$" ); + while ( originalGrammar.getTerminalAlphabet ( ) . find ( endOfInputSymbol ) != originalGrammar.getTerminalAlphabet ( ) . end ( ) ) { + endOfInputSymbol.inc ( ); + } + return endOfInputSymbol; +} + +} /* namespace parsing */ + +} /* namespace grammar */ diff --git a/alib2algo/src/grammar/parsing/LRParser.h b/alib2algo/src/grammar/parsing/LRParser.h new file mode 100644 index 0000000000..24fae9faaf --- /dev/null +++ b/alib2algo/src/grammar/parsing/LRParser.h @@ -0,0 +1,27 @@ +/* + * LRParser.h + * + * Created on: 30. 4. 2015 + * Author: Martin Kocicka + */ + +#ifndef LR_PARSER_H_ +#define LR_PARSER_H_ + +#include <alphabet/Symbol.h> +#include <grammar/ContextFree/CFG.h> + +namespace grammar { + +namespace parsing { + +class LRParser { +public: + static alphabet::Symbol getEndOfInputSymbol ( grammar::CFG originalGrammar ); +}; + +} /* namespace parsing */ + +} /* namespace grammar */ + +#endif /* LR_PARSER_H_ */ -- GitLab