#include <stdio.h>
#include <errno.h>
#include "mem.h"
-#include "vec.h"
#include "exn.h"
/* Token Types
struct AST* body;
} func;
/* Code Block */
- vec_t block;
+ //vec_t block;
/* String */
char* stringval;
/* Symbol */
FILE* input;
char* prompt;
Tok* tok;
- vec_t* stack;
} Parser;
// Lexer routines
bool accept_str(Parser* p_parser, TokType type, const char* p_text);
bool expect(Parser* p_parser, TokType type);
bool expect_str(Parser* p_parser, TokType type, const char* p_text);
-Tok* shifttok(Parser* parser, TokType type);
-
-//size_t stack_push(Parser* ctx, AST* node);
-//AST* stack_pop(Parser* ctx);
-//AST* stack_get(Parser* ctx, int index);
-
-
-
-//size_t mark(Parser* p_parser);
-//void reduce(Parser* p_parser, size_t mark);
-//AST* get_tree(Parser* p_parser);
-//void insert(Parser* p_parser, TokType type, char* value);
-
-#if 0
-// AST Routines
-AST* tree_convert(AST* p_tree);
-AST* tree_new(ASTType tag, void* p_obj);
-AST* tree_get_child(AST* p_tree, size_t idx);
-void* tree_get_val(AST* p_tree);
-void* tree_get_child_val(AST* p_tree, size_t idx);
-bool tree_is_formtype(AST* p_tree, const char* val);
-#endif
// Grammar Routines
AST* toplevel(Parser* p);
if ((NULL != parser->tok) && (&tok_eof != parser->tok)) {
mem_release(parser->tok);
}
- mem_release(parser->stack);
+ //mem_release(parser->stack);
}
Parser* parser_new(char* prompt, FILE* input)
parser->input = input;
parser->prompt = prompt;
parser->tok = NULL;
- parser->stack = vec_new(0);
+ //parser->stack = vec_new(0);
return parser;
}
mem_release(parser->tok);
parser->tok = NULL;
}
- vec_clear(parser->stack);
+ //vec_clear(parser->stack);
/* We ignore the rest of the current line and attempt to start parsing
* again on the next line */
fetchline(parser);
{
Tok* tok = NULL;
if (peek(parser)->type == type) {
- vec_push_back(parser->stack, parser->tok);
+ //vec_push_back(parser->stack, parser->tok);
parser->tok = NULL;
} else {
error(parser, "Unexpected token");
return ret;
}
-size_t stack_push(Parser* ctx, AST* node)
-{
- vec_push_back(ctx->stack, node);
- return vec_size(ctx->stack)-1;
-}
-
-AST* stack_pop(Parser* ctx)
-{
- return (AST*)vec_pop_back(ctx->stack);
-}
-
-AST* stack_get(Parser* ctx, int index)
-{
- index = (index < 0) ? (vec_size(ctx->stack)+index) : index;
- return (AST*)vec_at(ctx->stack, (size_t)index);
-}
-
+++ /dev/null
-/**
- @file tree.c
- @brief See header for details
- $Revision$
- $HeadURL$
- */
-#include <libparse.h>
-
-#if 0
-static void tree_free(void* p_obj) {
- AST* p_tree = ((AST*)p_obj);
- if (NULL != p_tree->ptr.tok) {
- mem_release(p_tree->ptr.tok);
- }
-}
-
-static bool is_punctuation(Tok* p_tok) {
- bool ret = false;
- switch(p_tok->type) {
- case T_END:
- case T_LBRACE:
- case T_RBRACE:
- case T_LBRACK:
- case T_RBRACK:
- case T_LPAR:
- case T_RPAR:
- case T_COMMA:
- ret = true;
- default:
- break;
- }
- return ret;
-}
-
-AST* tree_convert(AST* p_tree) {
- AST* p_newtree = NULL;
- if (p_tree->tag == ATOM) {
- if (!is_punctuation(p_tree->ptr.tok))
- p_newtree = mem_retain(p_tree);
- } else {
- vec_t* p_vec = p_tree->ptr.vec;
- vec_t* p_newvec = vec_new(0);
- p_newtree = tree_new(TREE, p_newvec);
- for(size_t idx = 0; idx < vec_size(p_vec); idx++) {
- AST* p_item = tree_convert(vec_at(p_vec,idx));
- if (NULL != p_item)
- vec_push_back(p_newvec, p_item);
- }
- }
- return p_newtree;
-}
-
-AST* tree_new(ASTType tag, void* p_obj) {
- AST* p_tree = (AST*)mem_allocate(sizeof(AST), &tree_free);
- //p_tree->tag = tag;
- //p_tree->ptr.tok = (Tok*)p_obj;
- return p_tree;
-}
-
-AST* tree_get_child(AST* p_tree, size_t idx) {
- AST* child = NULL;
- if (p_tree->tag == TREE) {
- vec_t* vec = p_tree->ptr.vec;
- if (idx < vec_size(vec))
- child = vec_at(vec, idx);
- }
- return child;
-}
-
-void* tree_get_val(AST* p_tree) {
- void* ret = NULL;
- if (p_tree->tag == ATOM) {
- ret = p_tree->ptr.tok->value.text;
- }
- return ret;
-}
-
-void* tree_get_child_val(AST* p_tree, size_t idx) {
- void* ret = NULL;
- AST* child = tree_get_child(p_tree,idx);
- if (child != NULL) {
- ret = tree_get_val(child);
- }
- return ret;
-}
-
-bool tree_is_formtype(AST* p_tree, const char* val) {
- bool ret = false;
- AST* child = tree_get_child(p_tree, 0);
- if ((NULL != child) && (child->tag == ATOM)) {
- Tok* token = child->ptr.tok;
- if ((token->type == T_ID) &&
- (0 == strcmp(val, token->value.text))) {
- ret = true;
- }
- }
- return ret;
-}
-#endif