From 1aac95a7375e58bacade69ed12f9dade484a03a8 Mon Sep 17 00:00:00 2001 From: Ignacio Etcheverry Date: Mon, 22 Oct 2018 19:43:19 +0200 Subject: Parse C# script namespace and class - Added a very simple parser that can extract the namespace and class name of a C# script. --- modules/mono/editor/script_class_parser.h | 74 +++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 modules/mono/editor/script_class_parser.h (limited to 'modules/mono/editor/script_class_parser.h') diff --git a/modules/mono/editor/script_class_parser.h b/modules/mono/editor/script_class_parser.h new file mode 100644 index 0000000000..11cf1853e2 --- /dev/null +++ b/modules/mono/editor/script_class_parser.h @@ -0,0 +1,74 @@ +#ifndef SCRIPT_CLASS_PARSER_H +#define SCRIPT_CLASS_PARSER_H + +#include "core/ustring.h" +#include "core/variant.h" +#include "core/vector.h" + +class ScriptClassParser { + +public: + struct NameDecl { + enum Type { + NAMESPACE_DECL, + CLASS_DECL, + STRUCT_DECL + }; + + String name; + Type type; + }; + + struct ClassDecl { + String name; + String namespace_; + Vector base; + bool nested; + bool has_script_attr; + }; + +private: + String code; + int idx; + int line; + String error_str; + bool error; + Variant value; + + Vector classes; + + enum Token { + TK_BRACKET_OPEN, + TK_BRACKET_CLOSE, + TK_CURLY_BRACKET_OPEN, + TK_CURLY_BRACKET_CLOSE, + TK_PERIOD, + TK_COLON, + TK_COMMA, + TK_SYMBOL, + TK_IDENTIFIER, + TK_STRING, + TK_NUMBER, + TK_OP_LESS, + TK_OP_GREATER, + TK_EOF, + TK_ERROR + }; + + Token get_token(); + + Error _skip_type_parameters(); + + Error _parse_class_base(Vector &r_base); + Error _parse_namespace_name(String &r_name, int &r_curly_stack); + +public: + Error parse(const String &p_code); + Error parse_file(const String &p_filepath); + + String get_error(); + + Vector get_classes(); +}; + +#endif // SCRIPT_CLASS_PARSER_H -- cgit v1.2.3