lexer.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "lexer.h"
  2. #include "lexer_detail.h"
  3. #include "token.h"
  4. #include <util/generic/ptr.h>
  5. namespace NYson {
  6. ////////////////////////////////////////////////////////////////////////////////
  7. class TStatelessLexer::TImpl {
  8. private:
  9. THolder<TStatelessYsonLexerImplBase> Impl;
  10. public:
  11. TImpl(bool enableLinePositionInfo = false)
  12. : Impl(enableLinePositionInfo
  13. ? static_cast<TStatelessYsonLexerImplBase*>(new TStatelesYsonLexerImpl<true>())
  14. : static_cast<TStatelessYsonLexerImplBase*>(new TStatelesYsonLexerImpl<false>()))
  15. {
  16. }
  17. size_t GetToken(const TStringBuf& data, TToken* token) {
  18. return Impl->GetToken(data, token);
  19. }
  20. };
  21. ////////////////////////////////////////////////////////////////////////////////
  22. TStatelessLexer::TStatelessLexer()
  23. : Impl(new TImpl())
  24. {
  25. }
  26. TStatelessLexer::~TStatelessLexer() {
  27. }
  28. size_t TStatelessLexer::GetToken(const TStringBuf& data, TToken* token) {
  29. return Impl->GetToken(data, token);
  30. }
  31. ////////////////////////////////////////////////////////////////////////////////
  32. } // namespace NYson