Added test for partial grammar definition
This commit is contained in:
4
mpc.c
4
mpc.c
@@ -2095,7 +2095,7 @@ static mpc_val_t *mpcf_re_range(mpc_val_t *x) {
|
||||
for (j = start; j <= end; j++) {
|
||||
range = realloc(range, strlen(range) + 1 + 1 + 1);
|
||||
range[strlen(range) + 1] = '\0';
|
||||
range[strlen(range) + 0] = j;
|
||||
range[strlen(range) + 0] = (char)j;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2217,7 +2217,7 @@ mpc_val_t *mpcf_oct(mpc_val_t *x) {
|
||||
|
||||
mpc_val_t *mpcf_float(mpc_val_t *x) {
|
||||
float *y = malloc(sizeof(float));
|
||||
*y = strtod(x, NULL);
|
||||
*y = strtof(x, NULL);
|
||||
free(x);
|
||||
return y;
|
||||
}
|
||||
|
@@ -128,9 +128,49 @@ void test_doge(void) {
|
||||
|
||||
}
|
||||
|
||||
void test_partial(void) {
|
||||
|
||||
mpc_ast_t *t0;
|
||||
mpc_err_t *err;
|
||||
|
||||
mpc_parser_t *Line = mpc_new("line");
|
||||
mpc_parser_t *Number = mpc_new("number");
|
||||
mpc_parser_t *QuotedString = mpc_new("quoted_string");
|
||||
mpc_parser_t *LinePragma = mpc_new("linepragma");
|
||||
mpc_parser_t *Parser = mpc_new("parser");
|
||||
|
||||
mpc_define(Line, mpca_tag(mpc_apply(mpc_sym("#line"), mpcf_str_ast), "string"));
|
||||
|
||||
err = mpca_lang(MPCA_LANG_PREDICTIVE,
|
||||
"number : /[0-9]+/ ;\n"
|
||||
"quoted_string : /\"(\\.|[^\"])*\"/ ;\n"
|
||||
"linepragma : <line> <number> <quoted_string>;\n"
|
||||
"parser : /^/ (<linepragma>)* /$/ ;\n",
|
||||
Line, Number, QuotedString, LinePragma, Parser, NULL);
|
||||
|
||||
PT_ASSERT(err == NULL);
|
||||
|
||||
t0 = mpc_ast_build(3, ">",
|
||||
mpc_ast_new("regex", ""),
|
||||
mpc_ast_build(3, "linepragma|>",
|
||||
mpc_ast_new("line|string", "#line"),
|
||||
mpc_ast_new("number|regex", "10"),
|
||||
mpc_ast_new("quoted_string|regex", "\"test\"")),
|
||||
mpc_ast_new("regex", ""));
|
||||
|
||||
PT_ASSERT(mpc_test_pass(Parser, "#line 10 \"test\"", t0,
|
||||
(int(*)(const void*,const void*))mpc_ast_eq,
|
||||
(mpc_dtor_t)mpc_ast_delete,
|
||||
(void(*)(const void*))mpc_ast_print));
|
||||
|
||||
mpc_cleanup(5, Line, Number, QuotedString, LinePragma, Parser);
|
||||
|
||||
}
|
||||
|
||||
void suite_grammar(void) {
|
||||
pt_add_test(test_grammar, "Test Grammar", "Suite Grammar");
|
||||
pt_add_test(test_language, "Test Language", "Suite Grammar");
|
||||
pt_add_test(test_language_file, "Test Language File", "Suite Grammar");
|
||||
pt_add_test(test_doge, "Test Doge", "Suite Grammar");
|
||||
pt_add_test(test_partial, "Test Partial", "Suite Grammar");
|
||||
}
|
||||
|
Reference in New Issue
Block a user