source: icGREP/icgrep-devel/icgrep/printer_pablos.cpp @ 4133

Last change on this file since 4133 was 4086, checked in by cameron, 5 years ago

Support for Pablo if-statements; use for utf-8 scope streams

File size: 4.0 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_pablos.h"
8
9
10std::string StatementPrinter::PrintStmts(CodeGenState cg_state)
11{
12    std::string strOut = "[";
13
14    strOut = strOut.substr(0, strOut.length() - 1);
15    strOut += "],[";
16
17    strOut = Print_PB_PabloStmts(cg_state.stmtsl, strOut);
18
19    strOut = strOut.substr(0, strOut.length() - 1);
20    strOut += "],";
21
22    //Print the name of the variable that holds the match result for the overall expression so far.
23    strOut += "'" + cg_state.newsym + "'";
24
25    return strOut;
26}
27
28std::string StatementPrinter::Print_PB_PabloStmts(std::list<PabloS*> stmts, std::string strOut)
29{
30    std::list<PabloS*>::iterator it;
31    //std::cout << "Total Statements: " + std::to_string(stmts.size()) << std::endl;
32    for (it = stmts.begin(); it != stmts.end(); ++it)
33    {
34        strOut += ShowPabloS(*it);
35    }
36
37    return strOut;
38}
39
40std::string StatementPrinter::Print_CC_PabloStmts(std::list<PabloS*> stmts)
41{
42    std::string strOut;
43
44    std::cout << "Total Statements: " + std::to_string(stmts.size()) << std::endl;
45    std::list<PabloS*>::iterator it;
46    for (it = stmts.begin(); it != stmts.end(); ++it)
47    {
48        strOut += ShowPabloS(*it) + "\n";
49    }
50
51    return strOut;
52}
53
54std::string StatementPrinter::ShowPabloS(PabloS* stmt)
55{
56    std::string retVal = "";
57
58    if (Assign* an = dynamic_cast<Assign*>(stmt))
59    {
60        retVal = "Assign('" + an->getM() + "', " + ShowPabloE(an->getExpr()) + "),";
61    }
62    else if (If* ifstmt = dynamic_cast<If*>(stmt))
63    {
64        retVal = "If(" + ShowPabloE(ifstmt->getExpr()) + ", " + Print_PB_PabloStmts(ifstmt->getPSList(), retVal) + ")";
65    }
66    else if (While* whl = dynamic_cast<While*>(stmt))
67    {
68        retVal = "While(" + ShowPabloE(whl->getExpr()) + ", " + Print_PB_PabloStmts(whl->getPSList(), retVal) + ")";
69    }
70    else retVal = "UNKNOWN_STATEMENT_TYPE!!!";
71    return retVal;
72}
73
74std::string StatementPrinter::ShowPabloE(PabloE* expr)
75{
76    std::string retVal = "";
77
78    if (All* all = dynamic_cast<All*>(expr))
79    {
80        retVal = "All " + std::to_string(all->getNum()) + " ";
81    }
82    else if (Call* pablo_call = dynamic_cast<Call*>(expr))
83    {
84        retVal = "Call '" + pablo_call->getCallee() + "'";
85    }
86    else if (Var* pablo_var = dynamic_cast<Var*>(expr))
87    {
88        retVal = "Var '" + pablo_var->getVar() + "' ";
89    }
90    else if (And* pablo_and = dynamic_cast<And*>(expr))
91    {
92        retVal = "And(" + ShowPabloE(pablo_and->getExpr1()) +", " + ShowPabloE(pablo_and->getExpr2()) + ")";
93    }
94    else if (Or* pablo_or = dynamic_cast<Or*>(expr))
95    {
96        retVal = "Or(" + ShowPabloE(pablo_or->getExpr1()) + ", " + ShowPabloE(pablo_or->getExpr2()) + ")";
97    }
98    else if (Sel* pablo_sel = dynamic_cast<Sel*>(expr))
99    {
100        retVal = "((" + ShowPabloE(pablo_sel->getIf_expr()) + "And " + ShowPabloE(pablo_sel->getT_expr()) +
101                ")|(Not(" + ShowPabloE(pablo_sel->getIf_expr()) + ") And " + ShowPabloE(pablo_sel->getF_expr()) + ")";
102    }
103    else if (Not* pablo_not = dynamic_cast<Not*>(expr))
104    {
105        retVal = "Not (" + ShowPabloE(pablo_not->getExpr()) + ")";
106    }
107    else if (CharClass* cc = dynamic_cast<CharClass*>(expr))
108    {
109        retVal = "CharClass '" + cc->getCharClass() + "'";
110    }
111    else if (Name* name = dynamic_cast<Name*>(expr))
112    {
113        retVal = "Name '" + name->getName() + "'";
114    }
115    else if (Advance* adv = dynamic_cast<Advance*>(expr))
116    {
117        retVal = "Advance(" + ShowPabloE(adv->getExpr()) + ")";
118    }
119    else if (MatchStar* mstar = dynamic_cast<MatchStar*>(expr))
120    {
121        retVal = "MatchStar (" + ShowPabloE(mstar->getExpr1()) + ", " + ShowPabloE(mstar->getExpr2()) + ")";
122    }
123    else if (ScanThru* sthru = dynamic_cast<ScanThru*>(expr))
124    {
125        retVal = "ScanThru (" + ShowPabloE(sthru->getScanFrom()) + ", " + ShowPabloE(sthru->getScanThru()) + ")";
126    }
127    else retVal = "UNKNOWN_Pablo_EXPRESSION_TYPE!!!";
128
129    return retVal;
130}
131
132
Note: See TracBrowser for help on using the repository browser.