summaryrefslogtreecommitdiffstats
path: root/src/output.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-04-10 19:00:43 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-04-10 19:10:17 +0200
commitaeaeba2d7362a055c5c78f410a743ea977d8cd36 (patch)
treeeceab3dcaf74b3d224aaab9481c0f051bed10c9c /src/output.cpp
parent475326bf1295f1985b1853d04ca036156bcad889 (diff)
downloadsolar-aeaeba2d7362a055c5c78f410a743ea977d8cd36.tar
solar-aeaeba2d7362a055c5c78f410a743ea977d8cd36.zip
Add support for escape sequences in character symbols
Diffstat (limited to 'src/output.cpp')
-rw-r--r--src/output.cpp42
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;