5 #include "lexeme_impl.h"
7 using namespace utakata::lexeme;
8 using namespace utakata::utf8_string;
10 smart_ptr<ILexeme> utakata::lexeme::makeOpenParen()
12 return smart_ptr<ILexeme>(new OpenParen());
15 smart_ptr<ILexeme> utakata::lexeme::makeEOS()
17 return smart_ptr<ILexeme>(new EOS());
20 smart_ptr<ILexeme> utakata::lexeme::makeCloseParen()
22 return smart_ptr<ILexeme>(new CloseParen());
25 smart_ptr<ILexeme> utakata::lexeme::makeBackQuote()
27 return smart_ptr<ILexeme>(new BackQuote());
30 smart_ptr<ILexeme> utakata::lexeme::makeQuote()
32 return smart_ptr<ILexeme>(new Quote());
35 smart_ptr<ILexeme> utakata::lexeme::makeDot()
37 return smart_ptr<ILexeme>(new Dot());
40 smart_ptr<ILexeme> utakata::lexeme::makeIdentifier(const utakata::utf8_string::UTF8String& str)
42 return smart_ptr<ILexeme>(new Identifier(str));
45 smart_ptr<ILexeme> utakata::lexeme::makeString(const utakata::utf8_string::UTF8String& str)
47 return smart_ptr<ILexeme>(new String(str));
50 smart_ptr<ILexeme> utakata::lexeme::makeUnquoteSplicing(const utakata::utf8_string::UTF8String& str)
52 return smart_ptr<ILexeme>(new UnquoteSplicing());
55 smart_ptr<ILexeme> utakata::lexeme::makeUnquote()
57 return smart_ptr<ILexeme>(new Unquote());
60 smart_ptr<ILexeme> utakata::lexeme::makeByteVector()
62 return smart_ptr<ILexeme>(new ByteVector());
65 smart_ptr<ILexeme> utakata::lexeme::makeVector()
67 return smart_ptr<ILexeme>(new Vector());
70 smart_ptr<ILexeme> utakata::lexeme::makeSyntax()
72 return smart_ptr<ILexeme>(new Syntax());
75 smart_ptr<ILexeme> utakata::lexeme::makeQuasiSyntax()
77 return smart_ptr<ILexeme>(new QuasiSyntax());
80 smart_ptr<ILexeme> utakata::lexeme::makeUnsyntaxSplicing()
82 return smart_ptr<ILexeme>(new UnsyntaxSplicing());
85 smart_ptr<ILexeme> utakata::lexeme::makeUnsyntax()
87 return smart_ptr<ILexeme>(new Unsyntax());
90 smart_ptr<ILexeme> utakata::lexeme::makeCharactor(const utakata::utf8_string::UTF8String& str)
92 return smart_ptr<ILexeme>(new Charactor(str));
95 smart_ptr<ILexeme> utakata::lexeme::makeBoolean(const smart_ptr<utakata::utf8_string::UTF8Char>& ch)
97 return smart_ptr<ILexeme>(new Boolean(ch));
100 smart_ptr<ILexeme> utakata::lexeme::makeNanImaginary(const utakata::utf8_string::UTF8String& str,
103 return smart_ptr<ILexeme>(new Number(utakata::utf8_string::UTF8String(),
107 smart_ptr<ILexeme> utakata::lexeme::makeInfImaginary(const utakata::utf8_string::UTF8String& str,
110 return smart_ptr<ILexeme>(new Number(utakata::utf8_string::UTF8String(),
114 smart_ptr<ILexeme> utakata::lexeme::makeImaginaryOnly(const utakata::utf8_string::UTF8String& str,
118 return smart_ptr<ILexeme>(new Number(utakata::utf8_string::UTF8String(),
122 smart_ptr<ILexeme> utakata::lexeme::makeNumber(const utakata::utf8_string::UTF8String& real,
123 const utakata::utf8_string::UTF8String& imagin,
124 bool exact, int radix)
126 return smart_ptr<ILexeme>(new Number(real, imagin, exact, radix));
136 const utakata::lexeme::LexemeID OpenParen::getID() const
138 return utakata::lexeme::LexemeID::openParenthesis;
141 smart_ptr<utakata::utf8_string::UTF8String> OpenParen::toString() const
143 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
144 *p += std::string("(");
152 const utakata::lexeme::LexemeID EOS::getID() const
154 return utakata::lexeme::LexemeID::eos;
157 smart_ptr<utakata::utf8_string::UTF8String> EOS::toString() const
159 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
160 *p += std::string("");
169 const utakata::lexeme::LexemeID CloseParen::getID() const
171 return utakata::lexeme::LexemeID::closeParenthesis;
174 smart_ptr<utakata::utf8_string::UTF8String> CloseParen::toString() const
176 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
177 *p += std::string(")");
185 const utakata::lexeme::LexemeID BackQuote::getID() const
187 return utakata::lexeme::LexemeID::backquote;
190 smart_ptr<utakata::utf8_string::UTF8String> BackQuote::toString() const
192 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
193 *p += std::string("`");
201 const utakata::lexeme::LexemeID Quote::getID() const
203 return utakata::lexeme::LexemeID::quote;
206 smart_ptr<utakata::utf8_string::UTF8String> Quote::toString() const
208 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
209 *p += std::string("'");
217 const utakata::lexeme::LexemeID Dot::getID() const
219 return utakata::lexeme::LexemeID::dot;
222 smart_ptr<utakata::utf8_string::UTF8String> Dot::toString() const
224 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
225 *p += std::string(".");
229 /////////////////////
230 // UnquoteSplicing //
231 /////////////////////
233 const utakata::lexeme::LexemeID UnquoteSplicing::getID() const
235 return utakata::lexeme::LexemeID::unquoteSplicing;
238 smart_ptr<utakata::utf8_string::UTF8String> UnquoteSplicing::toString() const
240 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
241 *p += std::string(",@");
249 const utakata::lexeme::LexemeID ByteVector::getID() const
251 return utakata::lexeme::LexemeID::byteVector;
254 smart_ptr<utakata::utf8_string::UTF8String> ByteVector::toString() const
256 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
257 *p += std::string("#vu8(");
265 const utakata::lexeme::LexemeID Vector::getID() const
267 return utakata::lexeme::LexemeID::vector;
270 smart_ptr<utakata::utf8_string::UTF8String> Vector::toString() const
272 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
273 *p += std::string("#vu8(");
281 const utakata::lexeme::LexemeID Unquote::getID() const
283 return utakata::lexeme::LexemeID::unquote;
286 smart_ptr<utakata::utf8_string::UTF8String> Unquote::toString() const
288 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
289 *p += std::string(",");
297 const utakata::lexeme::LexemeID Syntax::getID() const
299 return utakata::lexeme::LexemeID::syntax;
302 smart_ptr<utakata::utf8_string::UTF8String> Syntax::toString() const
304 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
305 *p += std::string("#'");
313 const utakata::lexeme::LexemeID QuasiSyntax::getID() const
315 return utakata::lexeme::LexemeID::quasiSyntax;
318 smart_ptr<utakata::utf8_string::UTF8String> QuasiSyntax::toString() const
320 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
321 *p += std::string("#`");
329 const utakata::lexeme::LexemeID Unsyntax::getID() const
331 return utakata::lexeme::LexemeID::unsyntax;
334 smart_ptr<utakata::utf8_string::UTF8String> Unsyntax::toString() const
336 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
337 *p += std::string("#,");
341 //////////////////////
342 // UnsyntaxSplicing //
343 //////////////////////
345 const utakata::lexeme::LexemeID UnsyntaxSplicing::getID() const
347 return utakata::lexeme::LexemeID::unsyntaxSplicing;
350 smart_ptr<utakata::utf8_string::UTF8String> UnsyntaxSplicing::toString() const
352 smart_ptr<utakata::utf8_string::UTF8String> p(new utf8_string::UTF8String);
353 *p += std::string("#,@");
361 Identifier::Identifier(const utakata::utf8_string::UTF8String& str) :
362 str_(new utakata::utf8_string::UTF8String(str))
365 const utakata::lexeme::LexemeID Identifier::getID() const
367 return utakata::lexeme::LexemeID::identifier;
370 smart_ptr<utakata::utf8_string::UTF8String> Identifier::toString() const
379 String::String(const utakata::utf8_string::UTF8String& str) :
380 str_(new utakata::utf8_string::UTF8String(str))
383 const utakata::lexeme::LexemeID String::getID() const
385 return utakata::lexeme::LexemeID::string;
388 smart_ptr<utakata::utf8_string::UTF8String> String::toString() const
397 Number::Number(const UTF8String& real,
398 const UTF8String& imagin,
399 bool exact, int radix) :
400 real_(new UTF8String(real)), imagin_(new UTF8String(imagin)),
401 exact_(exact), radix_(radix)
405 const utakata::lexeme::LexemeID Number::getID() const
407 return utakata::lexeme::LexemeID::number;
410 smart_ptr<utakata::utf8_string::UTF8String> Number::toString() const
412 return smart_ptr<UTF8String>(new UTF8String(*real_ + *imagin_));
419 Charactor::Charactor(const UTF8String& ch) : ch_(new UTF8String(ch))
422 const utakata::lexeme::LexemeID Charactor::getID() const
424 return utakata::lexeme::LexemeID::charactor;
427 smart_ptr<utakata::utf8_string::UTF8String> Charactor::toString() const
436 Boolean::Boolean(const smart_ptr<UTF8Char>& ch) : str_(new UTF8String())
441 const utakata::lexeme::LexemeID Boolean::getID() const
443 return utakata::lexeme::LexemeID::boolean;
446 smart_ptr<utakata::utf8_string::UTF8String> Boolean::toString() const