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

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

First stage of code generator revamp

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
33    CC_Compiler(pablo::CodeGenState & cg, const Encoding encoding, const std::string basis_pattern = "basis", const std::string gensym_pattern = "temp");
34
35    void compile(const REMap & re_map);
36
37    const std::string getBasisPattern() const {
38        return mBasisPattern;
39    }
40
41private:
42    void process_re_map(const REMap &re_map);
43    void process_re(const re::RE *re);
44    std::string bit_var(int n);
45    pablo::PabloE * make_bitv(int n);
46    pablo::PabloE * bit_pattern_expr(int pattern, int selected_bits);
47    pablo::PabloE * char_test_expr(const re::CodePointType ch);
48    pablo::PabloE * make_range(const re::CodePointType n1, const re::CodePointType n2);
49    pablo::PabloE * GE_Range(int N, int n);
50    pablo::PabloE * LE_Range(int N, int n);
51    pablo::PabloE * char_or_range_expr(const re::CodePointType lo, const re::CodePointType hi);
52    pablo::PabloE * charset_expr(const re::CC *cc);
53    Expression* expr2pabloe(pablo::PabloE * expr);
54    void cc2pablos(const re::CC *cc);
55
56    void add_predefined(std::string key_value, Expression *mapped_value);
57    Expression* add_assignment(std::string value, Expression* expr);
58    Expression* expr_to_variable(Expression* cgo);
59
60    pablo::CodeGenState &       mCG;
61    const Encoding              mEncoding;
62    const std::string           mBasisPattern;
63    const std::string           mGenSymPattern;
64    int                         mGenSymCounter;
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.