You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Parse C# script namespace and class
- Added a very simple parser that can extract the namespace and class name of a C# script.
This commit is contained in:
74
modules/mono/editor/script_class_parser.h
Normal file
74
modules/mono/editor/script_class_parser.h
Normal file
@@ -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<String> base;
|
||||
bool nested;
|
||||
bool has_script_attr;
|
||||
};
|
||||
|
||||
private:
|
||||
String code;
|
||||
int idx;
|
||||
int line;
|
||||
String error_str;
|
||||
bool error;
|
||||
Variant value;
|
||||
|
||||
Vector<ClassDecl> 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<String> &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<ClassDecl> get_classes();
|
||||
};
|
||||
|
||||
#endif // SCRIPT_CLASS_PARSER_H
|
||||
Reference in New Issue
Block a user