跳至正文
Wener Notes

JavaCC

约 2 分钟阅读
  • - The Java Parser Generator
    • 默认 LL(1) 可 LL(k)
    • LL(*)
    • 生成的代码没有运行时依赖
  • grammar repository

配置

xml
<plugin>
    <groupId>com.helger.maven</groupId>
    <artifactId>ph-javacc-maven-plugin</artifactId>
    <version>4.0.3</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>jjtree-javacc</goal>
            </goals>
        </execution>
    </executions>
</plugin>

选项

text
"LOOKAHEAD" "=" java_integer_literal ";"
|	"CHOICE_AMBIGUITY_CHECK" "=" java_integer_literal ";"
|	"OTHER_AMBIGUITY_CHECK" "=" java_integer_literal ";"
|	"STATIC" "=" java_boolean_literal ";"
|	"SUPPORT_CLASS_VISIBILITY_PUBLIC" "=" java_boolean_literal ";"
|	"DEBUG_PARSER" "=" java_boolean_literal ";"
|	"DEBUG_LOOKAHEAD" "=" java_boolean_literal ";"
|	"DEBUG_TOKEN_MANAGER" "=" java_boolean_literal ";"
|	"ERROR_REPORTING" "=" java_boolean_literal ";"
|	"JAVA_UNICODE_ESCAPE" "=" java_boolean_literal ";"
|	"UNICODE_INPUT" "=" java_boolean_literal ";"
|	"IGNORE_CASE" "=" java_boolean_literal ";"
|	"USER_TOKEN_MANAGER" "=" java_boolean_literal ";"
|	"USER_CHAR_STREAM" "=" java_boolean_literal ";"
|	"BUILD_PARSER" "=" java_boolean_literal ";"
|	"BUILD_TOKEN_MANAGER" "=" java_boolean_literal ";"
|	"TOKEN_EXTENDS" "=" java_string_literal ";"
|	"TOKEN_FACTORY" "=" java_string_literal ";"
|	"TOKEN_MANAGER_USES_PARSER" "=" java_boolean_literal ";"
|	"SANITY_CHECK" "=" java_boolean_literal ";"
|	"FORCE_LA_CHECK" "=" java_boolean_literal ";"
|	"COMMON_TOKEN_ACTION" "=" java_boolean_literal ";"
|	"CACHE_TOKENS" "=" java_boolean_literal ";"
|	"OUTPUT_DIRECTORY" "=" java_string_literal ";"

语法结构

text
/* 选项 */
options{
    UNICODE_INPUT=true;
}

/* 解析器定义 */
PARSER_BEGIN(MyParser)
package me.wener.myparser;
import java.util.*;
import java.math.*;
import static me.wener.myparser.ParserHelper.*;
public class MyParser {

}
PARSER_END(MyParser)

/* 忽略的内容 */
SKIP:
{
    " "
|   "\t"
|   "\r"
|   "\f"
}

/* 词法定义 */
TOKEN: {
    <LOGIC_OPERATOR: "&&" | "||" | "^" >
    | <PREFXI_OPERATOR : "!">
}

TOKEN: {
    < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)*>
    | < INTEGER: (<DIGIT>)+ >
    | < #LETTER: ["a"-"z"] >
    | < #DIGIT: ["0"-"9"] >
    | < STRING:
    "'"
    (
        (~["\'","\\","\n","\r"])
        |("\\"
            ( ["n","t","b","r","f","\\","'","\""]
            | ["0"-"7"] ( ["0"-"7"] )?
            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
            )
        )
    )*
    "'"
    >
}

/* 语法定义 */
Term Term():{
}{
    "$" <IDENTIFIER> {return new VariableTerm().setName(token.image);}
    | <INTEGER> {return new IntegerTerm().setValue(Long.parseLong(token.image));}
    | <STRING> {return new StringTerm().setValue(token.image.substring(1,token.image.length()-1));}
}

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • Java Awesome
    笔记 · javacc

    反编译/解密 · mstrobel/procyon · CFR another java decompiler · Fernflower https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine

  • Parser Awesome
    笔记 · JavaCC

    Antlr · Adaptive LL(\) · JavaCC · LL(k) · Grammer · yacc - Yet Another Compiler-Compiler · bison - YACC-compatible Parser Generator

参考资料

GitHub1 条
其他外链2 条
最近更新commit 861e955编辑