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

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

Removed string based CC lookup in CC Compiler.

File size: 1.7 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 "utf_encoding.h"
11#include <pablo/codegenstate.h>
12#include <pablo/pe_pabloe.h>
13#include <re/re_cc.h>
14#include <string>
15#include <set>
16
17namespace cc {
18
19class CC_Compiler{
20    typedef std::map<std::string, re::RE *> REMap;
21    typedef std::set<std::string>           ComputedSet;
22public:
23
24    CC_Compiler(pablo::CodeGenState & cg, const Encoding encoding, const std::string basis_pattern = "basis", const std::string gensym_pattern = "temp");
25
26    void compile(const REMap & re_map);
27
28    const std::string getBasisPattern() const {
29        return mBasisPattern;
30    }
31
32private:
33    void process_re(const re::RE *re);
34    pablo::Var * getBasisVar(const int n) const;
35    pablo::PabloE * bit_pattern_expr(int pattern, int selected_bits);
36    pablo::PabloE * char_test_expr(const re::CodePointType ch);
37    pablo::PabloE * make_range(const re::CodePointType n1, const re::CodePointType n2);
38    pablo::PabloE * GE_Range(int N, int n);
39    pablo::PabloE * LE_Range(int N, int n);
40    pablo::PabloE * char_or_range_expr(const re::CodePointType lo, const re::CodePointType hi);
41    pablo::PabloE * charset_expr(const re::CC *cc);
42    void process(const re::CC *cc);
43
44    pablo::CodeGenState &       mCG;
45    std::vector<pablo::Var *>   mBasisBit;
46    const Encoding              mEncoding;
47    const std::string           mGenSymPattern;
48    const std::string           mBasisPattern;
49    ComputedSet                 mComputedSet;
50};
51
52}
53
54#endif // CC_COMPILER_H
55
56
Note: See TracBrowser for help on using the repository browser.