1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
//@beginlicenses@
//@license{chiba_tokyo}{}@
//@license{chiba_tsukuba}{}@
//@license{chiba_tokyo}{}@
//
// Permission to use, copy, distribute and modify this software and its
// documentation for any purpose is hereby granted without fee, provided that
// the above copyright notice appears in all copies and that both that copyright
// notice and this permission notice appear in supporting documentation.
//
// 1997-2001 Shigeru Chiba, Tokyo Institute of Technology. make(s) no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or implied
// warranty.
//
// Copyright (C) 1997-2001 Shigeru Chiba, Tokyo Institute of Technology.
//
// -----------------------------------------------------------------
//
// Permission to use, copy, distribute and modify this software and its
// documentation for any purpose is hereby granted without fee, provided that
// the above copyright notice appears in all copies and that both that copyright
// notice and this permission notice appear in supporting documentation.
//
// 1997-2001 Shigeru Chiba, University of Tsukuba. make(s) no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or implied
// warranty.
//
// Copyright (C) 1997-2001 Shigeru Chiba, University of Tsukuba.
//
// -----------------------------------------------------------------
//
// Permission to use, copy, distribute and modify this software and its
// documentation for any purpose is hereby granted without fee, provided that
// the above copyright notice appears in all copies and that both that copyright
// notice and this permission notice appear in supporting documentation.
//
// 1997-2001 Shigeru Chiba, Tokyo Institute of Technology. make(s) no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or implied
// warranty.
//
// Copyright (C) 1997-2001 Shigeru Chiba, Tokyo Institute of Technology.
//
//@endlicenses@
#include <iostream>
#include <opencxx/parser/PtreeBrace.h>
#include <opencxx/parser/AbstractTranslatingWalker.h>
#include <opencxx/parser/token-names.h>
#include <opencxx/parser/MopMsg.h>
#include <opencxx/parser/TheErrorLog.h>
#include <opencxx/parser/ErrorLog.h>
namespace Opencxx
{
void PtreeBrace::Print(std::ostream& s, int indent, int depth)
{
if(TooDeep(s, depth))
return;
int indent2 = indent + 1;
s << "[{";
Ptree* body = PtreeUtil::Rest(this);
if(body == 0){
PrintIndent(s, indent2);
s << "0";
}
else
while(body != 0){
PrintIndent(s, indent2);
if(body->IsLeaf()){
s << "@ ";
body->Print(s, indent + 1, depth + 1);
}
else{
Ptree* head = body->Car();
if(head == 0)
s << "0";
else
head->Print(s, indent + 1, depth + 1);
}
body = body->Cdr();
}
PrintIndent(s, indent);
s << "}]";
}
int PtreeBrace::Write(std::ostream& out, int indent)
{
int n = 0;
out << '{';
Ptree* p = this->Cdr()->Car();
while(p != 0){
if(p->IsLeaf()){
TheErrorLog().Report(
MopMsg(Msg::Fatal, "PtreeBrace::Write()", "non list"));
break;
}
else{
PrintIndent(out, indent + 1);
++n;
Ptree* q = p->Car();
p = p->Cdr();
if(q != 0)
n += q->Write(out, indent + 1);
}
}
PrintIndent(out, indent);
++n;
out << '}';
return n;
}
Ptree* PtreeBrace::Translate(AbstractTranslatingWalker* w)
{
return w->TranslateBrace(this);
}
}
|