From d311e253ca3dcabb9e52d273110dea8b950571f7 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 9 Aug 2009 15:20:02 +0200 Subject: Implement lexical analyzer for the CLI language --- cli/lexer.ixx | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 cli/lexer.ixx (limited to 'cli/lexer.ixx') diff --git a/cli/lexer.ixx b/cli/lexer.ixx new file mode 100644 index 0000000..f7ff77e --- /dev/null +++ b/cli/lexer.ixx @@ -0,0 +1,86 @@ +// file : cli/lexer.ixx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009 Code Synthesis Tools CC +// license : MIT; see accompanying LICENSE file + +// Lexer::Char +// +inline Lexer::Char:: +Char (IntType v, std::size_t l, std::size_t c) + : v_ (v), l_ (l), c_ (c) +{ +} + +inline Lexer::Char:: +operator CharType () const +{ + return Traits::to_char_type (v_); +} + +inline Lexer::Char::IntType Lexer::Char:: +value () const +{ + return v_; +} + +inline std::size_t Lexer::Char:: +line () const +{ + return l_; +} + +inline std::size_t Lexer::Char:: +column () const +{ + return c_; +} + +// Lexer +// +inline bool Lexer:: +is_alpha (char c) const +{ + return std::isalpha (c, loc_); +} + +inline bool Lexer:: +is_oct_digit (char c) const +{ + return std::isdigit (c, loc_) && c != '8' && c != '9'; +} + +inline bool Lexer:: +is_dec_digit (char c) const +{ + return std::isdigit (c, loc_); +} + +inline bool Lexer:: +is_hex_digit (char c) const +{ + return std::isxdigit (c, loc_); +} + +inline bool Lexer:: +is_alnum (char c) const +{ + return std::isalnum (c, loc_); +} + +inline bool Lexer:: +is_space (char c) const +{ + return std::isspace (c, loc_); +} + +inline bool Lexer:: +is_eos (Char const& c) const +{ + return c.value () == Char::Traits::eof (); +} + +inline char Lexer:: +to_upper (char c) const +{ + return std::toupper (c, loc_); +} -- cgit v1.1