Ejemplo n.º 1
0
Archivo: regex.c Proyecto: BATTZION/mpc
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;

}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
Archivo: regex.c Proyecto: BATTZION/mpc
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);
  
}
Ejemplo n.º 5
0
Archivo: regex.c Proyecto: BATTZION/mpc
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);
  
}
Ejemplo n.º 6
0
Archivo: regex.c Proyecto: BATTZION/mpc
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);

}
Ejemplo n.º 7
0
Archivo: regex.c Proyecto: BATTZION/mpc
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);

}
Ejemplo n.º 8
0
Archivo: core.c Proyecto: cyendra/mpc
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);

}