Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
MakeFITDefinition.h
Go to the documentation of this file.
1
6#pragma once
7
9
11
12namespace grammar {
13
14namespace simplify {
15
17public:
18 /*
19 * Checks whether grammar satmakefies rule about S->\eps from FIT definitions.
20 */
21 template < class T >
22 static T makeFITDefinition ( const T & grammar );
23};
24
25template < class T >
28 return grammar;
29
30 T res = grammar;
31 auto newInitial = common::createUnique ( grammar.getInitialSymbol ( ), grammar.getNonterminalAlphabet ( ), grammar.getTerminalAlphabet ( ) );
32 res.addNonterminalSymbol ( newInitial );
33
34 res.addRules ( newInitial, res.getRules ( ).find ( res.getInitialSymbol ( ) )->second );
35
36 res.setInitialSymbol ( newInitial );
37
38 return res;
39}
40
41} /* namespace simplify */
42
43} /* namespace grammar */
44
static bool isFITDefinition(const T &grammar)
Definition: IsFITDefinition.h:22
Definition: MakeFITDefinition.h:16
static T makeFITDefinition(const T &grammar)
Definition: MakeFITDefinition.h:26
return grammar
Definition: ToGrammarLeftRG.h:99
return res
Definition: MinimizeByPartitioning.h:145
T createUnique(T object, const Alphabets &... alphabets)
Definition: createUnique.hpp:46
Definition: ToAutomaton.h:24