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

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

Removed 'newsym' from CodeGenState? and replaced with an Assign target system in RE_Compiler

File size: 2.1 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
18namespace cc {
19
20struct Expression{
21    std::string expr_string;
22    pablo::PabloE * pablo_expr;
23};
24
25class CC_Compiler{
26    typedef std::map<std::string, re::RE*>      REMap;
27    typedef std::map<std::string, Expression*>  ExpressionMap;
28    typedef ExpressionMap::iterator             MapIterator;
29    typedef std::list<pablo::PabloE *>          List;
30public:
31
32    CC_Compiler(pablo::CodeGenState & cg, const Encoding encoding, const std::string basis_pattern = "basis", const std::string gensym_pattern = "temp");
33
34    void compile(const REMap & re_map);
35
36    const std::string getBasisPattern() const {
37        return mBasisPattern;
38    }
39
40private:
41    void process_re(const re::RE *re);
42    pablo::Var * getBasisVar(const int n) const;
43    pablo::PabloE * bit_pattern_expr(int pattern, int selected_bits);
44    pablo::PabloE * char_test_expr(const re::CodePointType ch);
45    pablo::PabloE * make_range(const re::CodePointType n1, const re::CodePointType n2);
46    pablo::PabloE * GE_Range(int N, int n);
47    pablo::PabloE * LE_Range(int N, int n);
48    pablo::PabloE * char_or_range_expr(const re::CodePointType lo, const re::CodePointType hi);
49    pablo::PabloE * charset_expr(const re::CC *cc);
50    Expression* expr2pabloe(pablo::PabloE * expr);
51    void process(const re::CC *cc);
52
53    Expression * add(std::string key_value, Expression *mapped_value);
54    Expression * add_assignment(std::string value, Expression* expr);
55    Expression* expr_to_variable(Expression* cgo);
56
57    pablo::CodeGenState &       mCG;
58    const Encoding              mEncoding;
59    const std::string           mGenSymPattern;
60    const std::string           mBasisPattern;
61    ExpressionMap               mCommon_Expression_Map;
62};
63
64}
65
66#endif // CC_COMPILER_H
67
68
Note: See TracBrowser for help on using the repository browser.