wip: working on analyzer
- Feat: add `nest_ctx` and `fin_ctx` fns for working with context and environment - Feat: add block analyzer - Feat: add conditional statement analyzer
This commit is contained in:
@@ -16,21 +16,6 @@ typedef enum
|
||||
FZL_AN_CTX_TYPE_LOOP, // when analyzing loop
|
||||
} fzl_an_ctx_type_t;
|
||||
|
||||
// Analyzer descriptor
|
||||
typedef struct
|
||||
{
|
||||
char *warnings[256];
|
||||
size_t warnings_top;
|
||||
|
||||
char *errors[256];
|
||||
size_t errors_top;
|
||||
|
||||
fzl_symtable_t *symbols[256];
|
||||
size_t symbols_top;
|
||||
|
||||
fzl_node_t *root;
|
||||
} fzl_analyzer_t;
|
||||
|
||||
// Inner node analyzing result descriptor
|
||||
typedef struct
|
||||
{
|
||||
@@ -48,6 +33,22 @@ typedef struct fzl_an_ctx
|
||||
fzl_an_ctx_type_t type;
|
||||
} fzl_an_ctx_t;
|
||||
|
||||
// Analyzer descriptor
|
||||
typedef struct
|
||||
{
|
||||
char *warnings[256];
|
||||
size_t warnings_top;
|
||||
|
||||
char *errors[256];
|
||||
size_t errors_top;
|
||||
|
||||
fzl_symtable_t *symbols[256];
|
||||
size_t symbols_top;
|
||||
|
||||
fzl_node_t *root;
|
||||
fzl_an_ctx_t *ctx;
|
||||
} fzl_analyzer_t;
|
||||
|
||||
// Temp container for error
|
||||
extern char alast_error[256];
|
||||
|
||||
@@ -69,5 +70,11 @@ void fzl_freeanalyzer(fzl_analyzer_t *analyzer);
|
||||
fzl_an_res_t analyze_common(fzl_analyzer_t *analyzer, fzl_node_t *node);
|
||||
fzl_an_res_t analyze_call(fzl_analyzer_t *analyzer, fzl_node_t *call_node);
|
||||
fzl_an_res_t analyze_identifier(fzl_analyzer_t *analyzer, fzl_node_t *id);
|
||||
fzl_an_res_t analyze_conditional(fzl_analyzer_t *analyzer, fzl_node_t *cond);
|
||||
fzl_an_res_t analyze_function(fzl_analyzer_t *analyzer, fzl_node_t *fn_node);
|
||||
fzl_an_res_t analyze_block(fzl_analyzer_t *analyzer, fzl_node_t *block_node);
|
||||
|
||||
fzl_an_ctx_t *an_nest_ctx(fzl_analyzer_t *analyzer, fzl_an_ctx_type_t type);
|
||||
fzl_an_ctx_t *an_fin_ctx(fzl_analyzer_t *analyzer);
|
||||
|
||||
#endif // FZL_ANALYZER_H
|
||||
|
||||
Reference in New Issue
Block a user