| // Copyright 2017-2020 The Verible Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "verilog/parser/verilog_token.h" |
| |
| #include <string> |
| |
| #include "absl/strings/string_view.h" |
| #include "verilog/parser/verilog_parser.h" |
| |
| namespace verilog { |
| |
| // Strings returned by this function are used as token tags |
| // in verible-verilog-syntax' JSON output. Changing them might |
| // break third-party code. |
| |
| absl::string_view TokenTypeToString(size_t tokentype) { |
| switch (tokentype) { |
| // Returns stringified symbol name |
| #define CASE_STRINGIFY(val) \ |
| case verilog_tokentype::val: \ |
| return #val; |
| |
| // Tokens with verbose or unusual aliases |
| CASE_STRINGIFY(TK_COMMENT_BLOCK) |
| CASE_STRINGIFY(TK_EOL_COMMENT) |
| CASE_STRINGIFY(TK_SPACE) |
| CASE_STRINGIFY(TK_NEWLINE) |
| CASE_STRINGIFY(TK_LINE_CONT) |
| CASE_STRINGIFY(TK_ATTRIBUTE) |
| CASE_STRINGIFY(TK_FILEPATH) |
| |
| CASE_STRINGIFY(PP_define_body) |
| CASE_STRINGIFY(PP_default_text) |
| |
| #undef CASE_STRINGIFY |
| |
| // The string returned by verilog_symbol_name() for single quote character |
| // ("'\\''") contains backslash. This is the only such case, so generic |
| // unescaping code in `default` section below would be superfluous. |
| case '\'': |
| return "'"; |
| |
| // Returns token type name or its alias (if available) as used in verilog.y |
| default: { |
| absl::string_view symbol_name(verilog_symbol_name(tokentype)); |
| if (symbol_name.size() >= 2 && |
| (symbol_name[0] == '"' || symbol_name[0] == '\'')) { |
| // Strip quotes |
| return symbol_name.substr(1, symbol_name.size() - 2); |
| } |
| return symbol_name; |
| } |
| } |
| } |
| |
| } // namespace verilog |