void test_regex_boundary(void) { mpc_parser_t *re0, *re1, *re2; re0 = mpc_re("\\bfoo\\b"); re1 = mpc_re("(w| )?\\bfoo\\b"); re2 = mpc_re("py\\B.*"); PT_ASSERT(regex_test_pass(re0, "foo", "foo")); PT_ASSERT(regex_test_pass(re0, "foo.", "foo")); PT_ASSERT(regex_test_pass(re0, "foo)", "foo")); PT_ASSERT(regex_test_pass(re0, "foo baz", "foo")); PT_ASSERT(regex_test_fail(re0, "foobar", "foo")); PT_ASSERT(regex_test_fail(re0, "foo3", "foo")); PT_ASSERT(regex_test_pass(re1, "foo", "foo")); PT_ASSERT(regex_test_pass(re1, " foo", " foo")); PT_ASSERT(regex_test_fail(re1, "wfoo", "foo")); PT_ASSERT(regex_test_pass(re2, "python", "python")); PT_ASSERT(regex_test_pass(re2, "py3", "py3")); PT_ASSERT(regex_test_pass(re2, "py2", "py2")); PT_ASSERT(regex_test_fail(re2, "py", "py")); PT_ASSERT(regex_test_fail(re2, "py.", "py.")); PT_ASSERT(regex_test_fail(re2, "py!", "py!")); mpc_delete(re0); mpc_delete(re1); mpc_delete(re2); }
int main(int argc, char** argv) { /* Build a new parser, 'Adjective' to recognise descriptions */ mpc_parser_t* Adjective = mpc_or(4, mpc_sym("wow"), mpc_sym("many"), mpc_sym("so"), mpc_sym("such") ); /* Build a new parser, 'Noun' to recognise things */ mpc_parser_t* Noun = mpc_or(5, mpc_sym("lisp"), mpc_sym("language"), mpc_sym("c"), mpc_sym("book"), mpc_sym("build") ); mpc_parser_t* Phrase = mpc_and(2, mpcf_strfold, Adjective, Noun, free); mpc_parser_t* Doge = mpc_many(mpcf_strfold, Phrase); /* do some parsing here... */ mpc_delete(Doge); return 0; }
int main (int argc, char** argv) { //build a parser named: "Adjective" to recognize descriptions mpc_parser_t* Adjective = mpc_or(4, mpc_sym("wow"), mpc_sym("many"), mpc_sym("so"), mpc_sym("such") ); //build a parser named: "Noun" to recognize things mpc_parser_t* Noun = mpc_or(5, mpc_sym("lisp"), mpc_sym("language"), mpc_sym("book"), mpc_sym("build"), mpc_sym("c") ); //Creating our phrase parser to combine nouns and adjectives //the mpc_and function means one thing is required AND THEN another mpc_parser_t* Phrase = mpc_and(2, mpcf_strfold, Adjective, Noun, free); //... mpc_parser_t* Doge = mpc_many(mpcf_strfold, Phrase); /*DO SOME PARSING HERE*/ mpc_delete(Doge); return 0; }
void test_regex_range(void) { mpc_parser_t *re0, *re1, *re2, *re3; re0 = mpc_re("abg[abcdef]"); re1 = mpc_re("y*[a-z]"); re2 = mpc_re("zz(p+)?[A-Z_0\\]123]*"); re3 = mpc_re("^[^56hy].*$"); /* TODO: Testing */ mpc_delete(re0); mpc_delete(re1); mpc_delete(re2); mpc_delete(re3); }
void test_regex_lisp_comment(void) { mpc_parser_t *re0 = mpc_re(";[^\\n\\r]*"); PT_ASSERT(regex_test_pass(re0, ";comment", ";comment")); PT_ASSERT(regex_test_pass(re0, ";i am the\nman", ";i am the")); mpc_delete(re0); }
void test_regex_string(void) { mpc_parser_t *re0 = mpc_re("\"(\\\\.|[^\"])*\""); PT_ASSERT(regex_test_pass(re0, "\"there\"", "\"there\"")); PT_ASSERT(regex_test_pass(re0, "\"hello\"", "\"hello\"")); PT_ASSERT(regex_test_pass(re0, "\"i am dan\"", "\"i am dan\"")); PT_ASSERT(regex_test_pass(re0, "\"i a\\\"m dan\"", "\"i a\\\"m dan\"")); mpc_delete(re0); }
void test_regex_basic(void) { mpc_parser_t *re0, *re1, *re2, *re3, *re4, *re5; re0 = mpc_re("abc|bcd"); re1 = mpc_re("abc|bcd|e"); re2 = mpc_re("ab()c(ab)*"); re3 = mpc_re("abc(abdd)?"); re4 = mpc_re("ab|c(abdd)?"); re5 = mpc_re("abc(ab|dd)+g$"); PT_ASSERT(regex_test_pass(re0, "abc", "abc")); PT_ASSERT(regex_test_pass(re0, "bcd", "bcd")); PT_ASSERT(regex_test_fail(re0, "bc", "bc")); PT_ASSERT(regex_test_fail(re0, "ab", "ab")); PT_ASSERT(regex_test_pass(re1, "e", "e")); PT_ASSERT(regex_test_pass(re2, "abc", "abc")); PT_ASSERT(regex_test_pass(re2, "abcabab", "abcabab")); PT_ASSERT(regex_test_pass(re2, "abcababd", "abcabab")); PT_ASSERT(regex_test_pass(re5, "abcddg", "abcddg")); mpc_delete(re0); mpc_delete(re1); mpc_delete(re2); mpc_delete(re3); mpc_delete(re4); mpc_delete(re5); }
void test_ident(void) { /* ^[a-zA-Z_][a-zA-Z0-9_]*$ */ mpc_parser_t* Ident = mpc_whole( mpc_and(2, mpcf_strfold, mpc_or(2, mpc_alpha(), mpc_underscore()), mpc_many1(mpcf_strfold, mpc_or(3, mpc_alpha(), mpc_underscore(), mpc_digit())), free), free ); PT_ASSERT(mpc_test_pass(Ident, "test", "test", string_eq, free, string_print)); PT_ASSERT(mpc_test_fail(Ident, " blah", "", string_eq, free, string_print)); PT_ASSERT(mpc_test_pass(Ident, "anoth21er", "anoth21er", string_eq, free, string_print)); PT_ASSERT(mpc_test_pass(Ident, "du__de", "du__de", string_eq, free, string_print)); PT_ASSERT(mpc_test_fail(Ident, "some spaces", "", string_eq, free, string_print)); PT_ASSERT(mpc_test_fail(Ident, "", "", string_eq, free, string_print)); PT_ASSERT(mpc_test_fail(Ident, "18nums", "", string_eq, free, string_print)); mpc_delete(Ident); }