source: icGREP/icgrep-devel/icgrep/cc/cc_compiler.h @ 4209

Last change on this file since 4209 was 4209, checked in by nmedfort, 5 years ago

Minor revisions

File size: 2.2 KB
Line 
1/*
2 *  Copyright (c) 2014 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 *  icgrep is a trademark of International Characters.
5 */
6
7#ifndef CC_COMPILER_H
8#define CC_COMPILER_H
9
10#include <string>
11#include <list>
12#include <map>
13#include "utf_encoding.h"
14#include <pablo/codegenstate.h>
15#include <pablo/pe_pabloe.h>
16#include <re/re_cc.h>
17
18
19namespace cc {
20
21struct Expression{
22    std::string expr_string;
23    pablo::PabloE * pablo_expr;
24};
25
26class CC_Compiler{
27    typedef std::map<std::string, re::RE*>      REMap;
28    typedef std::map<std::string, Expression*>  ExpressionMap;
29    typedef ExpressionMap::iterator             MapIterator;
30    typedef std::list<pablo::PabloE *>          List;
31public:
32    CC_Compiler(const Encoding encoding, const std::string basis_pattern = "basis", const std::string gensym_pattern = "temp");
33    void compile_from_map(const REMap & re_map);
34    List get_compiled();
35
36    const std::string getBasisPattern() const {
37        return mBasisPattern;
38    }
39
40private:
41    void process_re_map(const REMap &re_map);
42    void process_re(const re::RE *re);
43    std::string bit_var(int n);
44    pablo::PabloE * make_bitv(int n);
45    pablo::PabloE * bit_pattern_expr(int pattern, int selected_bits);
46    pablo::PabloE * char_test_expr(const re::CodePointType ch);
47    pablo::PabloE * make_range(const re::CodePointType n1, const re::CodePointType n2);
48    pablo::PabloE * GE_Range(int N, int n);
49    pablo::PabloE * LE_Range(int N, int n);
50    pablo::PabloE * char_or_range_expr(const re::CodePointType lo, const re::CodePointType hi);
51    pablo::PabloE * charset_expr(const re::CC *cc);
52    Expression* expr2pabloe(pablo::PabloE * expr);
53    void cc2pablos(const re::CC *cc);
54
55    void add_predefined(std::string key_value, Expression *mapped_value);
56    Expression* add_assignment(std::string value, Expression* expr);
57    Expression* expr_to_variable(Expression* cgo);
58
59
60    Encoding                    mEncoding;
61    const std::string           mBasisPattern;
62    const std::string           mGenSymPattern;
63    int                         mGenSymCounter;
64    List                        mStmtsl;
65    ExpressionMap               mCommon_Expression_Map;
66};
67
68}
69
70#endif // CC_COMPILER_H
71
72
Note: See TracBrowser for help on using the repository browser.