source: icGREP/icgrep-devel/icgrep/printer_re.cpp @ 4187

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

Some refactoring of the RE CC class and CC Compiler; Moved RE into re subdirectory.

File size: 2.5 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#include "printer_re.h"
8
9//Regular Expressions
10#include "re/re_re.h"
11#include "re/re_alt.h"
12#include "re/re_cc.h"
13#include "re/re_name.h"
14#include "re/re_end.h"
15#include "re/re_rep.h"
16#include "re/re_seq.h"
17#include "re/re_start.h"
18
19
20const std::string Printer_RE::PrintRE(const RE * re)
21{
22    std::string retVal = "";
23
24    if (re == nullptr) {
25        retVal = "--> RE NullPtr! <--";
26    }
27    else if (const Alt* re_alt = dynamic_cast<const Alt*>(re))
28    {
29        retVal += "(Alt[";
30        bool comma = false;
31        for (const RE * re : *re_alt) {
32            if (comma) {
33                retVal += ',';
34            }
35            retVal += PrintRE(re);
36            comma = true;
37        }
38        retVal += "])";
39    }
40    else if (const CC* re_cc = dynamic_cast<const CC*>(re))
41    {
42        retVal = "CC \"";
43        retVal += re_cc->getName();
44        retVal += "\" ";
45
46        for (const CharSetItem & item : *re_cc)
47        {
48            retVal += "[";
49            retVal += std::to_string(item.lo_codepoint) + ",";
50            retVal += std::to_string(item.hi_codepoint);
51            retVal += "]";
52        }
53    }
54    else if (const Name* re_name = dynamic_cast<const Name*>(re))
55    {
56        retVal = "Name \"";
57        retVal += re_name->getName();
58        retVal += "\" ";
59    }
60    else if (dynamic_cast<const End*>(re))
61    {
62        retVal = "End";
63    }
64    else if (const Rep* re_rep = dynamic_cast<const Rep*>(re))
65    {
66        retVal = "Rep(";
67        retVal.append(PrintRE(re_rep->getRE()));
68        retVal.append(",");
69        retVal.append(std::to_string(re_rep->getLB()));
70        retVal.append(",");
71        if (re_rep->getUB() == Rep::UNBOUNDED_REP) {
72            retVal.append("Unbounded");
73        }
74        else {
75            retVal.append(std::to_string(re_rep->getUB()));           
76        }
77        retVal.append(")");
78    }
79    else if (const Seq* re_seq = dynamic_cast<const Seq*>(re))
80    {
81        retVal = "(Seq[";
82        bool comma = false;
83        for (const RE * re : *re_seq) {
84            if (comma) {
85                retVal.append(",");
86            }
87            retVal.append(PrintRE(re));
88            comma = true;
89        }
90        retVal.append("])");
91    }
92    else if (dynamic_cast<const Start*>(re))
93    {
94        retVal = "Start";
95    }
96    else
97    {
98        retVal = "--> RE Unknown <--";
99    }
100    return std::move(retVal);
101}
Note: See TracBrowser for help on using the repository browser.