diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 19:00:43 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 19:10:17 +0200 |
commit | aeaeba2d7362a055c5c78f410a743ea977d8cd36 (patch) | |
tree | eceab3dcaf74b3d224aaab9481c0f051bed10c9c /src/output.cpp | |
parent | 475326bf1295f1985b1853d04ca036156bcad889 (diff) | |
download | solar-aeaeba2d7362a055c5c78f410a743ea977d8cd36.tar solar-aeaeba2d7362a055c5c78f410a743ea977d8cd36.zip |
Add support for escape sequences in character symbols
Diffstat (limited to 'src/output.cpp')
-rw-r--r-- | src/output.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/output.cpp b/src/output.cpp index 7f6e5c8..9c30443 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -64,6 +64,48 @@ void output_t::initialize() { } } +std::string output_t::symbol_case(const symbol_t &sym) { + if (sym.get_type() == SYMBOL_TYPE_CHAR) { + switch (sym.get_value()[0]) { + case '\a': + return "'\\a'"; + + case '\b': + return "'\\b'"; + + case '\f': + return "'\\f'"; + + case '\n': + return "'\\n'"; + + case '\r': + return "'\\r'"; + + case '\t': + return "'\\t'"; + + case '\v': + return "'\\v'"; + + case '\\': + return "'\\\\'"; + + case '\'': + return "'\\''"; + + default: + return "'" + sym.get_value() + "'"; + } + } + else { + if (sym.get_value().empty()) + return "0"; + else + return token_prefix_str + sym.get_value(); + } +} + void output_t::emit_tokens() { if (tokens.empty()) return; |