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

Last change on this file since 5037 was 5037, checked in by nmedfort, 3 years ago

UnicodeSet? bug fix and compile warning clean-up.

File size: 2.9 KB
RevLine 
[3850]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
[4602]10#include <re/re_cc.h>
[4612]11#include <pablo/builder.hpp>
[4132]12#include "utf_encoding.h"
[4215]13#include <string>
[3850]14
[4657]15
16namespace pablo {
17    class PabloFunction;
18}
19
[4198]20namespace cc {
21
[4249]22class CC_NameMap;
23
[4187]24class CC_Compiler{
[3850]25public:
[4209]26
[4612]27    using Vars = std::vector<pablo::Var *>;
[4210]28
[4657]29    CC_Compiler(pablo::PabloFunction & function, const Encoding & encoding, const std::string prefix = "basis");
[4242]30
[4612]31    pablo::Assign * compileCC(const re::CC *cc);
32
[4602]33    pablo::Assign * compileCC(const re::CC *cc, pablo::PabloBlock & block);
[4357]34
[4612]35    pablo::Assign * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
[4602]36
[4612]37    pablo::Assign * compileCC(const std::string && canonicalName, const re::CC *cc, pablo::PabloBlock & block);
[4249]38
[4622]39    pablo::Assign * compileCC(const std::string && canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
[4612]40
[4622]41    pablo::PabloBuilder & getBuilder();
42
[4681]43    const std::vector<pablo::Var *> & getBasisBits() {
44        return mBasisBit;
45    }
46
[4337]47private:
[5037]48    pablo::Var * getBasisVar(const unsigned n) const;
[4612]49    template<typename PabloBlockOrBuilder>
50    pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb);
51    template<typename PabloBlockOrBuilder>
52    pablo::PabloAST * char_test_expr(const re::codepoint_t ch, PabloBlockOrBuilder & pb);
53    template<typename PabloBlockOrBuilder>
54    pablo::PabloAST * make_range(const re::codepoint_t n1, const re::codepoint_t n2, PabloBlockOrBuilder & pb);
55    template<typename PabloBlockOrBuilder>
56    pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
57    template<typename PabloBlockOrBuilder>
58    pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
59    template<typename PabloBlockOrBuilder>
60    pablo::PabloAST * char_or_range_expr(const re::codepoint_t lo, const re::codepoint_t hi, PabloBlockOrBuilder & pb);
61    template<typename PabloBlockOrBuilder>
62    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
[4602]63private:   
[4612]64    pablo::PabloBuilder         mBuilder;
[4270]65    std::vector<pablo::Var *>   mBasisBit;
[4617]66    const Encoding &            mEncoding;
[3850]67};
68
[4612]69inline pablo::Assign * CC_Compiler::compileCC(const re::CC *cc) {
70    return compileCC(cc, mBuilder);
[4198]71}
72
[4612]73inline pablo::Assign * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
74    return compileCC(std::move(cc->canonicalName(re::ByteClass)), cc, block);
75}
76
77inline pablo::Assign * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
78    return compileCC(std::move(cc->canonicalName(re::ByteClass)), cc, builder);
79}
80
[4622]81inline pablo::PabloBuilder & CC_Compiler::getBuilder() {
82    return mBuilder;
83}
[4612]84
[4622]85
[4612]86}
87
[3850]88#endif // CC_COMPILER_H
89
90
Note: See TracBrowser for help on using the repository browser.