示例#1
0
auto_ptr<Rule> exstatik::CreateLexer_Moderate() {
    auto_ptr<Rule> lexer(STAR("lexer"));
    Rule* or_ = lexer->AddChild(OR("Or"));
    or_->AddChild(KEYWORD("new"));
    or_->AddChild(KEYWORD("del"));
    or_->AddChild(REGEXP("ID", boost::regex("[A-Za-z_][0-9A-Za-z_]*")));
    or_->AddChild(REGEXP("INT", boost::regex("[0-9]+")));
    or_->AddChild(REGEXP("WS", boost::regex("[ \t\r]+")));
    or_->AddChild(KEYWORD(";"));
    return lexer;
}
示例#2
0
文件: Lexer.cpp 项目: nfomon/shok
auto_ptr<Rule> exstatik::CreateLexer_JSON() {
  auto_ptr<Rule> lexer(STAR("lexer"));
  Rule* or_ = lexer->AddChild(OR("Or"));
  or_->AddChild(KEYWORD("="));
  or_->AddChild(KEYWORD("{"));
  or_->AddChild(KEYWORD("}"));
  or_->AddChild(KEYWORD(";"));
  or_->AddChild(REGEXP("ID", boost::regex("[A-Za-z_][0-9A-Za-z_]*")));
  or_->AddChild(REGEXP("INT", boost::regex("[0-9]+")));
  or_->AddChild(REGEXP("STR", boost::regex("(\'([^\'\\\\\\\\]|\\\\.)*\')|(\\\"([^\\\"\\\\\\\\]|\\\\.)*\\\")")));
  or_->AddChild(REGEXP("WS", boost::regex("[ \t\r]+")));
  return lexer;
}
示例#3
0
auto_ptr<Rule> exstatik::CreateLexer_Complex() {
    auto_ptr<Rule> lexer(STAR("lexer"));
    Rule* or_ = lexer->AddChild(OR("Or"));
    or_->AddChild(KEYWORD("exit"));
    or_->AddChild(KEYWORD("new"));
    or_->AddChild(KEYWORD("renew"));
    or_->AddChild(KEYWORD("del"));
    or_->AddChild(KEYWORD("@"));
    or_->AddChild(KEYWORD("return"));
    or_->AddChild(KEYWORD("if"));
    or_->AddChild(KEYWORD("elif"));
    or_->AddChild(KEYWORD("else"));
    or_->AddChild(KEYWORD("while"));
    or_->AddChild(KEYWORD("loop"));
    or_->AddChild(KEYWORD("times"));
    or_->AddChild(KEYWORD("not"));
    or_->AddChild(KEYWORD("nor"));
    or_->AddChild(KEYWORD("and"));
    or_->AddChild(KEYWORD("or"));
    or_->AddChild(KEYWORD("xor"));
    or_->AddChild(KEYWORD("<"));
    or_->AddChild(KEYWORD("<="));
    or_->AddChild(KEYWORD(">"));
    or_->AddChild(KEYWORD(">="));
    or_->AddChild(KEYWORD("=="));
    or_->AddChild(KEYWORD("!="));
    or_->AddChild(KEYWORD("+"));
    or_->AddChild(KEYWORD("-"));
    or_->AddChild(KEYWORD("*"));
    or_->AddChild(KEYWORD("/"));
    or_->AddChild(KEYWORD("%"));
    or_->AddChild(KEYWORD("^"));
    or_->AddChild(KEYWORD("|"));
    or_->AddChild(KEYWORD("&"));
    or_->AddChild(KEYWORD("~~"));
    or_->AddChild(KEYWORD("~"));
    or_->AddChild(KEYWORD("="));
    or_->AddChild(KEYWORD("+="));
    or_->AddChild(KEYWORD("-="));
    or_->AddChild(KEYWORD("*="));
    or_->AddChild(KEYWORD("/="));
    or_->AddChild(KEYWORD("%="));
    or_->AddChild(KEYWORD("^="));
    or_->AddChild(KEYWORD("|="));
    or_->AddChild(KEYWORD("&="));
    or_->AddChild(KEYWORD("~~="));
    or_->AddChild(KEYWORD("~="));
    or_->AddChild(KEYWORD("->"));
    or_->AddChild(KEYWORD("("));
    or_->AddChild(KEYWORD(")"));
    or_->AddChild(KEYWORD("["));
    or_->AddChild(KEYWORD("]"));
    or_->AddChild(KEYWORD("{"));
    or_->AddChild(KEYWORD("}"));
    or_->AddChild(KEYWORD(","));
    or_->AddChild(KEYWORD("."));
    or_->AddChild(KEYWORD(":"));
    or_->AddChild(KEYWORD(";"));
    or_->AddChild(KEYWORD("\n"));
    or_->AddChild(REGEXP("INT", boost::regex("[0-9]+")));
    or_->AddChild(REGEXP("STR", boost::regex("(\\\'([^\\\'\\\\\\\\]|\\\\.)*\\\')|(\\\"([^\\\"\\\\\\\\]|\\\\.)*\\\")")));
    or_->AddChild(REGEXP("ID", boost::regex("[A-Za-z_][0-9A-Za-z_]*")));
    or_->AddChild(REGEXP("WS", boost::regex("[ \t\r]+")));
    return lexer;
}
示例#4
0
auto_ptr<Rule> exstatik::CreateLexer_C() {
    auto_ptr<Rule> lexer(STAR("C"));
    Rule* or_ = lexer->AddChild(OR("or"));
    // symbols
    or_->AddChild(KEYWORD(";"));
    or_->AddChild(KEYWORD("{"));
    or_->AddChild(KEYWORD("}"));
    or_->AddChild(KEYWORD(","));
    or_->AddChild(KEYWORD("="));
    or_->AddChild(KEYWORD(":"));
    or_->AddChild(KEYWORD("("));
    or_->AddChild(KEYWORD(")"));
    or_->AddChild(KEYWORD("["));
    or_->AddChild(KEYWORD("]"));
    or_->AddChild(KEYWORD("*"));
    or_->AddChild(KEYWORD("..."));
    // keywords
    or_->AddChild(KEYWORD("if"));
    or_->AddChild(KEYWORD("else"));
    or_->AddChild(KEYWORD("switch"));
    or_->AddChild(KEYWORD("while"));
    or_->AddChild(KEYWORD("do"));
    or_->AddChild(KEYWORD("for"));
    or_->AddChild(KEYWORD("goto"));
    or_->AddChild(KEYWORD("continue"));
    or_->AddChild(KEYWORD("break"));
    or_->AddChild(KEYWORD("return"));
    // assignment operators
    or_->AddChild(KEYWORD("*="));
    or_->AddChild(KEYWORD("/="));
    or_->AddChild(KEYWORD("%="));
    or_->AddChild(KEYWORD("+="));
    or_->AddChild(KEYWORD("-="));
    or_->AddChild(KEYWORD("<<="));
    or_->AddChild(KEYWORD(">>="));
    or_->AddChild(KEYWORD("&="));
    or_->AddChild(KEYWORD("^="));
    or_->AddChild(KEYWORD("|="));
    // expression symbols
    or_->AddChild(KEYWORD("?"));
    or_->AddChild(KEYWORD("||"));
    or_->AddChild(KEYWORD("&&"));
    // operators
    or_->AddChild(KEYWORD("|"));
    or_->AddChild(KEYWORD("^"));
    or_->AddChild(KEYWORD("&"));
    or_->AddChild(KEYWORD("=="));
    or_->AddChild(KEYWORD("!="));
    or_->AddChild(KEYWORD("<="));
    or_->AddChild(KEYWORD(">="));
    or_->AddChild(KEYWORD("<<"));
    or_->AddChild(KEYWORD(">>"));
    or_->AddChild(KEYWORD("<"));
    or_->AddChild(KEYWORD(">"));
    or_->AddChild(KEYWORD("+"));
    or_->AddChild(KEYWORD("-"));
    or_->AddChild(KEYWORD("/"));
    or_->AddChild(KEYWORD("%"));
    or_->AddChild(KEYWORD("++"));
    or_->AddChild(KEYWORD("--"));
    or_->AddChild(KEYWORD("~"));
    or_->AddChild(KEYWORD("!"));
    // accessors
    or_->AddChild(KEYWORD("."));
    or_->AddChild(KEYWORD("->"));
    // storage-class-specifier
    or_->AddChild(KEYWORD("auto"));
    or_->AddChild(KEYWORD("register"));
    or_->AddChild(KEYWORD("static"));
    or_->AddChild(KEYWORD("extern"));
    or_->AddChild(KEYWORD("typedef"));
    // type-specifier
    or_->AddChild(KEYWORD("void"));
    or_->AddChild(KEYWORD("char"));
    or_->AddChild(KEYWORD("short"));
    or_->AddChild(KEYWORD("int"));
    or_->AddChild(KEYWORD("long"));
    or_->AddChild(KEYWORD("float"));
    or_->AddChild(KEYWORD("double"));
    or_->AddChild(KEYWORD("signed"));
    or_->AddChild(KEYWORD("unsigned"));
    // type-qualifier
    or_->AddChild(KEYWORD("const"));
    or_->AddChild(KEYWORD("volatile"));
    // regexps
    or_->AddChild(REGEXP("ID", boost::regex("[A-Za-z_][0-9A-Za-z_]*")));
    or_->AddChild(REGEXP("INT", boost::regex("[0-9]+")));
    or_->AddChild(REGEXP("WS", boost::regex("[ \t\r\n]+")))
    ->SilenceOutput();
    return lexer;
}