source: tools/prettyprinter/token.cc@ 65cec25

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 65cec25 was 8c97ee7, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

Fixed the pretty printer

  • Property mode set to 100644
File size: 2.5 KB
Line 
1// -*- Mode: C++ -*-
2//
3// Copyright (C) Peter A. Buhr 2017
4//
5// Pretty Printer, Copyright (C) Richard C. Bilson and Rodolfo G. Esteves 2001
6//
7// token.cc --
8//
9// Author : Peter A. Buhr
10// Created On : Wed Jun 28 22:46:23 2017
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Thu Jun 29 09:33:49 2017
13// Update Count : 9
14//
15
16#include <string>
17using namespace std;
18#include "ParserTypes.h"
19#include "parser.hh"
20#include "filter.h"
21
22Token::Token( const string & text, int kind ) : text(text), kind(kind) {
23 left = down = NULL;
24} // Token::Token
25
26Token::Token( const string & text, list<string> & ws_list, int kind ) : text(text), kind(kind) {
27// cerr << "Token3 : text \"" << text << "\"";
28// for ( list<string>::iterator i = ws_list.begin(); i != ws_list.end(); i ++ ) {
29// cerr << " WSt: \"" << *i << "\"";
30// }
31// cerr << endl;
32 left = down = NULL;
33 // O(1) transfer of the current lex whitespace list to the token's whitespace list, and clearing the lex whitespace
34 // list.
35 Token::ws_list.splice( Token::ws_list.end(), ws_list );
36} // Token::Token
37
38void Token::addLeftTail( Token * n ) {
39 Token * p = this;
40 while ( p->left != 0 ) {
41 p = p->left;
42 } // while
43 p->left = n;
44} // Token::addLeftTail
45
46void Token::addDownLeftTail( Token * n ) {
47 if ( down == 0 ) {
48 down = n;
49 } else {
50 down->addLeftTail( n );
51 } // if
52} // Token::addDownLeftTail
53
54bool Token::isTerminal() {
55 return kind < END_TERMINALS;
56} // Token::isTerminal
57
58int Token::getKind() const {
59 return kind;
60} // Token::getKind()
61
62string Token::getText() const {
63 return text;
64} // Token::getText()
65
66string Token::getWS() {
67 string ret;
68 // concatenate whitespace and comment text
69 for ( list<string>::iterator i = ws_list.begin(); i != ws_list.end(); i ++ ) {
70 ret += *i;
71 } // for
72 return ret;
73} // Token::getWS
74
75bool Token::isComment() {
76 return ws_list.size() > 1 || ( ws_list.size() == 1 && (*ws_list.begin())[0] == '/' );
77} // Token::isComment
78
79string Token::getComment() {
80 string ret;
81 // concatenate whitespace and comment text up to the last comment
82 if ( ws_list.size() > 1 ) {
83 list<string>::iterator end = -- ws_list.end();
84 if ( (*end)[0] == '/' ) end ++;
85 for ( list<string>::iterator i = ws_list.begin(); i != end; i ++ ) {
86 ret += *i;
87 } // for
88 } else if ( ws_list.size() == 1 ) {
89 if ( (*ws_list.begin())[0] == '/' ) ret = *ws_list.begin();
90 } // if
91 return ret;
92} // Token::getComment
93
94// Local Variables: //
95// mode: c++ //
96// tab-width: 4 //
97// compile-command: "make install" //
98// End: //
Note: See TracBrowser for help on using the repository browser.