delete parser generator. let's try recursive descent

This commit is contained in:
Andrew Kelley 2015-11-23 19:21:52 -07:00
parent 5b663ddbb2
commit 6b911f1e94
4 changed files with 22 additions and 1148 deletions

View File

@ -21,7 +21,6 @@ include_directories(
)
set(GRAMMAR_TXT "${CMAKE_BINARY_DIR}/simple.txt")
set(PARSER_GENERATED_CPP "${CMAKE_BINARY_DIR}/parser_generated.cpp")
set(ZIG_SOURCES
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
@ -30,13 +29,6 @@ set(ZIG_SOURCES
"${CMAKE_SOURCE_DIR}/src/parser.cpp"
"${CMAKE_SOURCE_DIR}/src/tokenizer.cpp"
"${CMAKE_SOURCE_DIR}/src/util.cpp"
${PARSER_GENERATED_CPP}
)
set(PARSERGEN_SOURCES
"${CMAKE_SOURCE_DIR}/src/parsergen.cpp"
"${CMAKE_SOURCE_DIR}/src/util.cpp"
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
)
set(CONFIGURE_OUT_FILE "${CMAKE_BINARY_DIR}/config.h")
@ -63,15 +55,3 @@ target_link_libraries(zig LINK_PUBLIC
)
install(TARGETS zig DESTINATION bin)
add_executable(parsergen ${PARSERGEN_SOURCES})
set_target_properties(parsergen PROPERTIES
LINKER_LANGUAGE C
COMPILE_FLAGS ${EXE_CFLAGS})
add_custom_command(
OUTPUT ${PARSER_GENERATED_CPP}
COMMAND parsergen ARGS ${GRAMMAR_TXT} ${PARSER_GENERATED_CPP}
DEPENDS ${GRAMMAR_TXT} ${PARSERGEN_SOURCES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)

View File

@ -79,8 +79,13 @@ void ast_print(AstNode *node, int indent) {
}
}
AstNode *ast_create_root(Token *token) {
return nullptr;
struct ParseContext {
Buf *buf;
AstNode *root;
};
AstNode *ast_create_root(void) {
zig_panic("TODO create root");
}
void ast_invalid_token_error(Buf *buf, Token *token) {
@ -88,3 +93,17 @@ void ast_invalid_token_error(Buf *buf, Token *token) {
buf_init_from_mem(&token_value, buf_ptr(buf) + token->start_pos, token->end_pos - token->start_pos);
ast_error(token, "invalid token: '%s'", buf_ptr(&token_value));
}
void ast_parse_fn_decls(ParseContext *pc, ZigList<AstNode *> *fn_decls) {
zig_panic("TODO parse fn decls");
}
AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens) {
ParseContext pc = {0};
pc.buf = buf;
pc.root = ast_create_root();
ast_parse_fn_decls(&pc, &pc.root->data.root.fn_decls);
return pc.root;
}

View File

@ -91,6 +91,6 @@ const char *node_type_str(NodeType node_type);
void ast_print(AstNode *node, int indent);
AstNode *ast_create_root(Token *token);
AstNode *ast_create_root(void);
#endif

File diff suppressed because it is too large Load Diff