$Revision$
$HeadURL$
*/
-#include "grammar.h"
-#include "lexer.h"
-#include "exn.h"
+#include <libparse.h>
AST* grammar_toplevel(Parser* p)
{
+++ /dev/null
-/**
- @file grammar.h
- @brief Describes the grammar and parsing rules that form the SCLPL language.
-*/
-#ifndef GRAMMAR_H
-#define GRAMMAR_H
-
-#include "parser.h"
-
-AST* grammar_toplevel(Parser* p);
-void grammar_require(Parser* p);
-void grammar_type_annotation(Parser* p);
-void grammar_type_definition(Parser* p);
-void grammar_type(Parser* p);
-void grammar_tuple(Parser* p);
-void grammar_function(Parser* p);
-void grammar_definition(Parser* p);
-void grammar_expression(Parser* p);
-void grammar_literal(Parser* p);
-void grammar_arglist(Parser* p);
-void grammar_if_stmnt(Parser* p);
-void grammar_fn_stmnt(Parser* p);
-
-#endif /* GRAMMAR_H */
$Revision$
$HeadURL$
*/
-#include "lexer.h"
-#include "mem.h"
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
+#include <libparse.h>
static char* read(Lexer* ctx, size_t* line, size_t* col);
static bool eof(Lexer* ctx);
+++ /dev/null
-/**
- @file lexer.h
- @brief TODO: Describe this file
- $Revision$
- $HeadURL$
- */
-#ifndef LEXER_H
-#define LEXER_H
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <string.h>
-#include <assert.h>
-
-typedef struct {
- char* p_line;
- size_t index;
- size_t lineno;
- FILE* p_input;
- char* p_prompt;
-} Lexer;
-
-typedef enum {
- T_ID, T_CHAR, T_INT, T_FLOAT, T_BOOL, T_STRING, T_LBRACE, T_RBRACE, T_LBRACK,
- T_RBRACK, T_LPAR, T_RPAR, T_COMMA, T_SQUOTE, T_DQUOTE, T_END, T_END_FILE
-} TokenType;
-
-typedef struct {
- TokenType type;
- const char* file;
- size_t line;
- size_t col;
- void* value;
-} Token;
-
-Lexer* lexer_new(char* p_prompt, FILE* p_input);
-
-Token* lex_tok_new(TokenType type, void* val);
-
-Token* lexer_read(Lexer* p_lexer);
-
-void lexer_skipline(Lexer* p_lexer);
-
-char* lexer_dup(const char* p_old);
-
-#endif /* LEXER_H */
--- /dev/null
+/**
+ @file libparse.h
+ @brief TODO: Describe this file
+ $Revision$
+ $HeadURL$
+ */
+#ifndef LIBPARSE_H
+#define LIBPARSE_H
+
+#include <stddef.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <errno.h>
+#include "mem.h"
+#include "vec.h"
+#include "exn.h"
+
+typedef struct {
+ char* p_line;
+ size_t index;
+ size_t lineno;
+ FILE* p_input;
+ char* p_prompt;
+} Lexer;
+
+typedef enum {
+ T_ID, T_CHAR, T_INT, T_FLOAT, T_BOOL, T_STRING, T_LBRACE, T_RBRACE, T_LBRACK,
+ T_RBRACK, T_LPAR, T_RPAR, T_COMMA, T_SQUOTE, T_DQUOTE, T_END, T_END_FILE
+} TokenType;
+
+typedef struct {
+ TokenType type;
+ const char* file;
+ size_t line;
+ size_t col;
+ void* value;
+} Token;
+
+DECLARE_EXCEPTION(ParseException);
+
+typedef struct {
+ Lexer* p_lexer;
+ Token* p_tok;
+ vec_t* p_tok_buf;
+} Parser;
+
+typedef enum {
+ ATOM,
+ TREE
+} ASTTag;
+
+typedef struct {
+ ASTTag tag;
+ union {
+ Token* tok;
+ vec_t* vec;
+ } ptr;
+} AST;
+
+// Lexer routines
+Lexer* lexer_new(char* p_prompt, FILE* p_input);
+Token* lex_tok_new(TokenType type, void* val);
+Token* lexer_read(Lexer* p_lexer);
+void lexer_skipline(Lexer* p_lexer);
+char* lexer_dup(const char* p_old);
+
+// Parser routines
+Parser* parser_new(char* p_prompt, FILE* input);
+void fetch(Parser* p_parser);
+Token* peek(Parser* p_parser);
+bool parser_eof(Parser* p_parser);
+void parser_resume(Parser* p_parser);
+void error(Parser* p_parser, const char* p_text);
+bool accept(Parser* p_parser, TokenType type);
+bool accept_str(Parser* p_parser, TokenType type, const char* p_text);
+bool expect(Parser* p_parser, TokenType type);
+bool expect_str(Parser* p_parser, TokenType type, const char* p_text);
+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, TokenType type, void* value);
+
+// AST Routines
+AST* tree_convert(AST* p_tree);
+AST* tree_new(ASTTag 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);
+
+// Grammar Routines
+AST* grammar_toplevel(Parser* p);
+void grammar_require(Parser* p);
+void grammar_type_annotation(Parser* p);
+void grammar_type_definition(Parser* p);
+void grammar_type(Parser* p);
+void grammar_tuple(Parser* p);
+void grammar_function(Parser* p);
+void grammar_definition(Parser* p);
+void grammar_expression(Parser* p);
+void grammar_literal(Parser* p);
+void grammar_arglist(Parser* p);
+void grammar_if_stmnt(Parser* p);
+void grammar_fn_stmnt(Parser* p);
+
+#endif /* LIBPARSE_H */
$Revision$
$HeadURL$
*/
-#include "parser.h"
-#include "vec.h"
+#include <libparse.h>
DEFINE_EXCEPTION(ParseException, &RuntimeException);
+++ /dev/null
-/**
- @file parser.h
- @brief A collection of helper functions for implementing recursive descent parsers.
- $Revision$
- $HeadURL$
-*/
-#ifndef PARSER_H
-#define PARSER_H
-
-#include "lexer.h"
-#include "vec.h"
-#include "exn.h"
-#include "tree.h"
-
-DECLARE_EXCEPTION(ParseException);
-
-typedef struct {
- Lexer* p_lexer;
- Token* p_tok;
- vec_t* p_tok_buf;
-} Parser;
-
-Parser* parser_new(char* p_prompt, FILE* input);
-
-void fetch(Parser* p_parser);
-
-Token* peek(Parser* p_parser);
-
-bool parser_eof(Parser* p_parser);
-
-void parser_resume(Parser* p_parser);
-
-void error(Parser* p_parser, const char* p_text);
-
-bool accept(Parser* p_parser, TokenType type);
-
-bool accept_str(Parser* p_parser, TokenType type, const char* p_text);
-
-bool expect(Parser* p_parser, TokenType type);
-
-bool expect_str(Parser* p_parser, TokenType type, const char* p_text);
-
-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, TokenType type, void* value);
-
-#endif /* PARSER_H */
$Revision$
$HeadURL$
*/
-#include "tree.h"
+#include <libparse.h>
static void tree_free(void* p_obj) {
AST* p_tree = ((AST*)p_obj);
return ret;
}
-void tree_walk(AST* tree, tree_walker_t* walker)
-{
- size_t idx;
- walker->fn(walker->env, tree, PRE_NODE);
- if (tree->tag == TREE) {
- walker->fn(walker->env, tree, PRE_CHILDREN);
- for (idx = 0; idx < vec_size(tree->ptr.vec); idx++) {
- AST* child = (AST*)vec_at(tree->ptr.vec, idx);
- walker->fn(walker->env, tree, PRE_CHILD);
- tree_walk( child, walker );
- walker->fn(walker->env, tree, POST_CHILD);
- }
- walker->fn(walker->env, tree, POST_CHILDREN);
- }
- walker->fn(walker->env, tree, POST_NODE);
-}
-
-tree_walker_t* tree_walker(void* env, tree_walk_fn_t fn)
-{
- tree_walker_t* p_walker = (tree_walker_t*)mem_allocate(sizeof(tree_walker_t),NULL);
- p_walker->env = env;
- p_walker->fn = fn;
- return p_walker;
-}
-
+++ /dev/null
-/**
- @file tree.h
- @brief Module containing definition and common operations on parse trees.
- $Revision$
- $HeadURL$
- */
-#ifndef TREE_H
-#define TREE_H
-
-#include "vec.h"
-#include "lexer.h"
-
-typedef enum {
- ATOM,
- TREE
-} ASTTag;
-
-typedef struct {
- ASTTag tag;
- union {
- Token* tok;
- vec_t* vec;
- } ptr;
-} AST;
-
-typedef enum {
- PRE_NODE,
- POST_NODE,
- PRE_CHILDREN,
- POST_CHILDREN,
- PRE_CHILD,
- POST_CHILD,
-} tree_walk_pos_t;
-
-typedef AST* (*tree_walk_fn_t)(void* env, AST* node, tree_walk_pos_t pos);
-
-typedef struct {
- void* env;
- tree_walk_fn_t fn;
-} tree_walker_t;
-
-AST* tree_convert(AST* p_tree);
-AST* tree_new(ASTTag 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);
-void tree_walk(AST* tree, tree_walker_t* walker);
-tree_walker_t* tree_walker(void* env, tree_walk_fn_t fn);
-
-#endif /* TREE_H */
-#include "parser.h"
+#include <libparse.h>
#include "codegen.h"
#include "pprint.h"
#include "opts.h"
#include "str.h"
#include "list.h"
-#include "grammar.h"
-#include "parser.h"
-#include "lexer.h"
#include "pprint.h"
#include "codegen.h"
#include "sys.h"
#include "log.h"
#include "ops.h"
-#include "tree.h"
+#include <libparse.h>
+
/* Command Line Options
*****************************************************************************/
$HeadURL$
*/
#include "opts.h"
-#include "parser.h"
#include "str.h"
#include "sys.h"
-#include "tree.h"
-#include "grammar.h"
#include "pprint.h"
#include "codegen.h"
+#include <libparse.h>
vec_t* ops_parse_file(str_t* in) {
bool failed = false;
#ifndef PPRINT_H
#define PPRINT_H
-#include "parser.h"
-#include "lexer.h"
+#include <libparse.h>
void pprint_token_type(FILE* file, Token* token);