开源软件 ZGLanguage 通过语法配置,便可以对JAVA代码进行解析,如下所示。
此语法配置实例囊括了常见的Java语法结构,用户可以在此基础上根据具体情况进行修改使用。
__DEF_CASE_SENSITIVE__ Y
__DEF_FUZZY__ N
__DEF_DEBUG__ Y
__DEF_LINE_COMMENT__ //
__DEF_LINES_COMMENT__ /* */
__DEF_STR__ __NAME__
<1,200>
[1,1]ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$??
[0,199]ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_??
[NO] import if else for while break continue class return try except finally final static public private
__DEF_STR__ __ONE_CHAR__
<1,1>
[1,1]ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_-+=[]{}:";',.<>?/\
__DEF_STR__ __NUMBER__
<1,200>
[1,100]0123456789
[1,1].
[1,100]0123456789
__DEF_STR__ __INT__
<1,200>
[1,200]0123456789
__DEF_STR__ __0XO_INT__
<1,200>
[1,1]0
[1,1]ox
[1,200]0123456789ABCDEFabcdef
__DEF_EXPR__ __EXPR__
__ELE__ class
__ELE__ __VAR__
__ELE__ __NAME__
__ELE__ __INT__
__ELE__ __NUMBER__
__ELE__ __STRING__
__ELE__ __FUNCTION__
__ELE__ __ARR_VAL__
__ELE__ __CHAR__
__OPR__ = 0
__OPR__ += 0
__OPR__ -= 0
__OPR__ == 30
__OPR__ <> 30
__OPR__ != 30
__OPR__ > 30
__OPR__ >= 30
__OPR__ < 30
__OPR__ <= 30
__OPR__ != 30
__OPR__ + 40
__OPR__ - 40
__OPR__ * 50
__OPR__ / 50
__OPR__ % 50
__OPR__ . 80
__BEF__ -
__BEF__ (int)
__//__ __SPL__ \
__DEF_SUB_PATH__ __CHAR__
1 : x1 @ | '
: x2 @ + '\
: x3 @ \ __ONE_CHAR__
: x4 @ + __\b__
: x5 @ + __\t__
: x6 @ \ '
__DEF_SUB_PATH__ __STRING__
1 : x1 @ | "
: x2 @ | __ANY__
: x3 @ + \"
: x4 @ | "
__DEF_PATH__ __IMPORT_PACKAGE__
1 : x1 @ | import
: xa @ + package
: xb @ CAN_SKIP | static
N : x2 @ | __NAME__
: x3 @ | .
1 : x4 @ | __NAME__
: x5 @ + *
1 : x6 @ | ;
__DEF_SUB_PATH__ __GENERICS__
1 : x1 @ | <
N : x2 @ | __NAME__
e : x3 @ | ,
1 : x4 @ | >
__DEF_SUB_PATH__ __PARMS__
11 : x1 @ | (
0N : x2 @ | __EXPR__
: x3 @ + __LAMBDA__
0e : x4 @ | ,
11 : x5 @ | )
__DEF_SUB_PATH__ __ARR_VAL__
11 : x1 @ | {
0N : xA @ CAN_SKIP | (short) __//__ tmp
: x2 @ | __STRING__
: x3 @ + __NUMBER__
: x4 @ + __INT__
: x5 @ + __CHAR__
0e : x6 @ | ,
11 : x7 @ | }
__DEF_SUB_PATH__ __DEF_VAR__
0011 : x1 @ | public
: x2 @ + private
0101 : x3 @ | final
1 1 : x4 @ | __NAME__
: x5 @ CAN_SKIP | __GENERICS__
: x6 @ + []
: x7 @ | __NAME__
__DEF_SUB_PATH__ __COM_EXPR__
011 : x1 @ | __DEF_VAR__
00 : x2 @ | =
101 : x3 @ | __EXPR__
+0+ : x4 @ | new
0 : x5 @ | __FUNCTION__
+0+ : x6 @ | __LAMBDA__
111 : x7 @ | ;
__DEF_SUB_PATH__ __ONE_ROW__
1 : x1 @ | __COM_EXPR__
+ : x2 @ | break
: x3 @ + continue
: x4 @ + return
: x5 @ + raise
: x6 @ | ;
+ : x7 @ | __IF__
: x8 @ + __WHILE__
: x9 @ + __FOR__
: xa @ + __TRY__
__DEF_SUB_PATH__ __ROWS__
1 : x1 @ | {
N : x2 @ CAN_SKIP | __ONE_ROW__
1 : x3 @ | }
__DEF_SUB_PATH__ __IF__
1 : x1 @ | if
: x2 @ | (
: x3 @ | __EXPR__
: x4 @ | )
: x5 @ | __ONE_ROW__
: x6 @ + __ROWS__
__DEF_SUB_PATH__ __WHILE__
1 : x1 @ | while
: x2 @ | (
: x3 @ | __COM_EXPR__
: x4 @ | )
: x5 @ | __ONE_ROW__
: x6 @ + __ROWS__
__DEF_SUB_PATH__ __FOR__
1 : x1 @ | for
: x2 @ | (
: x3 @ CAN_SKIP | __COM_EXPR__
: x4 @ | ;
: x5 @ CAN_SKIP | __EXPR__
: x6 @ | ;
: x7 @ CAN_SKIP | __EXPR__
: x8 @ | )
: x9 @ | __ONE_ROW__
: xa @ + __ROWS__
__DEF_SUB_PATH__ __COMMENT__
11 : x1 @ | @
: x2 @ / __NAME__
0 : x3 @ / (
0 : x4 @ | __EXPR__
0 : x5 @ | )
__DEF_SUB_PATH__ __LAMBDA__
11 : x1 @ | (
0N : x2 @ | __NAME__
0 : x3 @ CAN_SKIP | __NAME__
0e : x4 @ | ,
11 : x5 @ | )
: x6 @ | ->
: x7 @ | __EXPR__ __//__ __COM_EXPR__
: x8 @ + __ROWS__
__DEF_SUB_PATH__ __FUNCTION__
1 : x1 @ | __NAME__
: x2 @ | __PARMS__
__DEF_SUB_PATH__ __FUNCTION_DEF__
0011 : x1 @ | __COMMENT__
010 : x2 @ | public
: x3 @ + private
1 1 : x4 @ | __NAME__
: x5 @ | __NAME__
: x6 @ | (
NNNN : x7 @ CAN_SKIP | __NAME__
: x8 @ CAN_SKIP | __NAME__
eeee : x9 @ CAN_SKIP | ,
1111 : xa @ | )
: xb @ | __ROWS__
__DEF_PATH__ __CLASS__
0011 : x1 @ | __COMMENT__
010 : x2 @ | public
: x3 @ + private
111 : x4 @ | class
: x5 @ | __NAME__
: x6 @ CAN_SKIP | extends
: x7 @ CAN_SKIP | __NAME__
: x8 @ | {
NNNN : x9 @ | __COM_EXPR__
: xa @ + __CLASS__
: xb @ + __FUNCTION_DEF__
1111 : xz @ | }