33 #ifndef WALLAROO_DETAIL_GRAMMAR_H_
34 #define WALLAROO_DETAIL_GRAMMAR_H_
86 template <
typename SemanticActions >
90 Grammar( std::istream& in, SemanticActions& sa ) :
91 input( in ), lookahead(
Token::done ), actions( sa )
99 lookahead = input.
Next();
110 switch ( lookahead.
type )
122 const std::string value = NextLexem();
124 actions.Load( value );
134 const std::string lvalue = NextLexem();
136 switch ( lookahead.
type )
142 const std::string rvalue = NextLexem();
149 const std::string attId = NextLexem();
152 const std::string attValue = NextLexem();
154 actions.AssignAttribute( lvalue, attId, attValue );
159 actions.Create( lvalue, rvalue );
165 const std::string dep = NextLexem();
168 const std::string rvalue = NextLexem();
170 actions.AssignDep( lvalue, dep, rvalue );
174 throw SyntaxError(
"expecting = or .", input.
Line(), input.
Col() );
179 if ( lookahead.
type == t ) lookahead = input.
Next();
182 std::string NextLexem()
const
184 return lookahead.
lexem;
188 SemanticActions& actions;
194 #endif // WALLAROO_DETAIL_GRAMMAR_H_
Definition: tokensource.h:57
std::size_t Line() const
Definition: tokensource.h:209
Definition: tokensource.h:48
Type type
Definition: tokensource.h:64
std::string lexem
Definition: tokensource.h:65
static std::string Description(Type t)
Definition: tokensource.h:68
Definition: exceptions.h:227
Grammar(std::istream &in, SemanticActions &sa)
Definition: grammar.h:90
Definition: tokensource.h:52
Definition: tokensource.h:62
Definition: tokensource.h:55
Definition: tokensource.h:59
Definition: tokensource.h:56
void Parse()
Definition: grammar.h:97
Definition: attribute.h:45
Definition: tokensource.h:54
Definition: tokensource.h:61
std::size_t Col() const
Definition: tokensource.h:210
Token Next()
Definition: tokensource.h:96
Definition: tokensource.h:58
Definition: tokensource.h:60
Type
Definition: tokensource.h:51
Definition: tokensource.h:53