#ifndef EMPATHY_PARSER_RESOLVER_H
#define EMPATHY_PARSER_RESOLVER_H
#include "parser.h"
namespace empathy::parser
{
class Resolver
{
public:
Resolver( const ptr< Lexer >& lexer, const sema::Context& c ) :
m_lexer( lexer ),
m_context( c )
{}
bool eos() const;
optional< ir::Term > consume();
optional< ir::Term > consumeUnresolved();
optional< ir::Term > lookAhead( size_t distance = 0 );
optional< ir::Term > lookAheadUnresolved( size_t distance = 0 );
private:
ir::Term resolve( const ir::Term& t ) const;
ptr< Lexer > m_lexer;
sema::Context m_context;
deque< ir::Term > m_lookAheadCache;
};
}
#endif