21 #define EXTRACT_TOKEN(type, msg){ \
22 if(lexem(text) != type){ \
23 throw spear::Exception(msg, lexer_.getLineCount()); \
61 void unget(
String& text,
int lex);
64 std::list< spear::Pair<String, int> > buffer_;
72 ) : lexer_(syn_stream)
99 "Syntax error: Left parenthesis expected",
100 lexer_.getLineCount()
118 edge -> setLabel(text);
125 edge -> setLabel(
"TOP");
135 int headPosition = -1;
146 edge -> addChild(child);
154 headPosition < (
int) edge->getChildren().size())
158 const_iterator it = edge->getChildren().begin();
159 it != edge->getChildren().end();
160 it ++, headPosition --)
163 if(headPosition == 0)
169 }
else unget(text, lex);
177 "Syntax error: Left parenthesis or string expected",
178 lexer_.getLineCount()));
183 "Syntax error: Right parenthesis expected");
191 if(buffer_.empty() ==
true)
195 return lexer_.lexem(text);
213 void EdgeParser<T>::unget(
String& text,
int lex)
EdgeParser(IStream &syn_stream)
construct a parser object with text input 'syn_stream'
Definition: EdgeParser.h:70
static const int TOKEN_STRING
Definition: EdgeLexer.h:24
int toInteger(const String &s)
Definition: CharUtils.cc:74
const T1 & getFirst() const
Definition: Pair.h:23
Definition: EdgeParser.h:36
static const int TOKEN_RP
Definition: EdgeLexer.h:26
const T2 & getSecond() const
Definition: Pair.h:25
Definition: Exception.h:15
Definition: EdgeLexer.h:19
#define EXTRACT_TOKEN(type, msg)
Definition: EdgeParser.h:21
#define String
Definition: Wide.h:36
spear::RCIPtr< T > parseEdge()
parse the next edge in the stream
Definition: EdgeParser.h:77
static const int TOKEN_EOF
Definition: EdgeLexer.h:23
static const int TOKEN_LP
Definition: EdgeLexer.h:25
#define IStream
Definition: Wide.h:39