Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cup和Jflex中的JSON验证语法_Json_Grammar_Jflex_Cup - Fatal编程技术网

Cup和Jflex中的JSON验证语法

Cup和Jflex中的JSON验证语法,json,grammar,jflex,cup,Json,Grammar,Jflex,Cup,我为阵列编写了以下cup文件: terminal COMMA, LSQBRACKET, RSQBRACKET; terminal Integer NUMBER; non terminal array, value_list, value; non terminal Integer expr; array ::= LSQBRACKET value_list RSQBRACKET; value_list ::= value_list COMMA val

我为阵列编写了以下cup文件:

    terminal COMMA, LSQBRACKET, RSQBRACKET;
    terminal Integer NUMBER;
    non terminal array, value_list, value;
    non terminal Integer expr;
    array ::= LSQBRACKET value_list RSQBRACKET;
    value_list ::= value_list COMMA value | value;
    value::= expr:e {: System.out.println(" value: "+e+""); :} ;
    expr ::= NUMBER:n
    {: RESULT=n; :}
如何为Jflex和Cup编写Json验证的完整语法?

From

package org.json.simple.parser;
%%
%{
私有StringBuffer sb=新StringBuffer();
int getPosition(){
返回yychar;
}
%}
%桌子
%统一码
%状态字符串\u开始
%yylexthrow语法异常
%煤焦
十六进制D=[a-fA-F0-9]
INT=[-]?[0-9]+
DOUBLE={INT}((\[0-9]+)?([eE][-+]?[0-9]+)?)
WS=[\t\r\n]
未被替换的\u CH=[^\“\\]
回退_CH=。
%%
\{yybegin(YYINITIAL);返回新的Yytoken(Yytoken.TYPE_值,sb.toString());}
{UNESCAPED_CH}+{sb.append(yytext());}
\\\“{sb.append('”);}
\\\\{sb.append('\\');}
\\\/{sb.append('/');}
\\b{sb.append('\b');}
\\f{sb.append('\f');}
\\n{sb.append('\n');}
\\r{sb.append('\r');}
\\t{sb.append('\t');}
\\u{HEX_D}{HEX_D}{HEX_D}{HEX_D}{try{
int ch=Integer.parseInt(yytext().substring(2),16);
某人附加((字符)ch);
}
捕获(例外e){
抛出新的ParseException(yychar,ParseException.ERROR\u意外的\u异常,e);
}
}
\\{sb.append('\\');}
\{sb=null;sb=new-StringBuffer();yybeng(STRING_-BEGIN);}
{INT}{Long val=Long.valueOf(yytext());返回新的Yytoken(Yytoken.TYPE_VALUE,val);}
{DOUBLE}{DOUBLE val=DOUBLE.valueOf(yytext());返回新的Yytoken(Yytoken.TYPE_VALUE,val);}
“true”|“false”{Boolean val=Boolean.valueOf(yytext());返回新的Yytoken(Yytoken.TYPE_VALUE,val);}
“null”{返回新的Yytoken(Yytoken.TYPE_值,null);}
{{返回新的Yytoken(Yytoken.TYPE_LEFT_BRACE,null);}
“}”{返回新的Yytoken(Yytoken.TYPE_RIGHT_BRACE,null);}
“[{返回新的Yytoken(Yytoken.TYPE_LEFT_SQUARE,null);}
“]”{返回新的Yytoken(Yytoken.TYPE_RIGHT_SQUARE,null);}
“,”{返回新的Yytoken(Yytoken.TYPE_逗号,null);}
“:”{返回新的Yytoken(Yytoken.TYPE_冒号,null);}
{WS}+{}
{FALLBACK_CH}{抛出新的ParseException(yychar,ParseException.ERROR_UNEXPECTED_CHAR,新字符(yycharat(0));}
package org.json.simple.parser;

%%

%{
private StringBuffer sb=new StringBuffer();

int getPosition(){
    return yychar;
}

%}

%table
%unicode
%state STRING_BEGIN

%yylexthrow ParseException
%char

HEX_D = [a-fA-F0-9]
INT = [-]?[0-9]+
DOUBLE = {INT}((\.[0-9]+)?([eE][-+]?[0-9]+)?)
WS = [ \t\r\n]
UNESCAPED_CH = [^\"\\]
FALLBACK_CH = .
%%

<STRING_BEGIN> \"               { yybegin(YYINITIAL);return new Yytoken(Yytoken.TYPE_VALUE, sb.toString());}
<STRING_BEGIN> {UNESCAPED_CH}+  { sb.append(yytext());}
<STRING_BEGIN> \\\"             {sb.append('"');}
<STRING_BEGIN> \\\\             {sb.append('\\');}
<STRING_BEGIN> \\\/             {sb.append('/');}
<STRING_BEGIN> \\b              {sb.append('\b');}
<STRING_BEGIN> \\f              {sb.append('\f');}
<STRING_BEGIN> \\n              {sb.append('\n');}
<STRING_BEGIN> \\r              {sb.append('\r');}
<STRING_BEGIN> \\t              {sb.append('\t');}
<STRING_BEGIN> \\u{HEX_D}{HEX_D}{HEX_D}{HEX_D}  {   try{
                                                        int ch=Integer.parseInt(yytext().substring(2),16);
                                                        sb.append((char)ch);
                                                    }
                                                    catch(Exception e){
                                                        throw new ParseException(yychar, ParseException.ERROR_UNEXPECTED_EXCEPTION, e);
                                                    }
                                                }
<STRING_BEGIN> \\               {sb.append('\\');}

<YYINITIAL> \"                  { sb = null; sb = new StringBuffer(); yybegin(STRING_BEGIN);}
<YYINITIAL> {INT}               { Long val=Long.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);}
<YYINITIAL> {DOUBLE}            { Double val=Double.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);}
<YYINITIAL> "true"|"false"      { Boolean val=Boolean.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);}
<YYINITIAL> "null"              { return new Yytoken(Yytoken.TYPE_VALUE, null);}
<YYINITIAL> "{"                 { return new Yytoken(Yytoken.TYPE_LEFT_BRACE,null);}
<YYINITIAL> "}"                 { return new Yytoken(Yytoken.TYPE_RIGHT_BRACE,null);}
<YYINITIAL> "["                 { return new Yytoken(Yytoken.TYPE_LEFT_SQUARE,null);}
<YYINITIAL> "]"                 { return new Yytoken(Yytoken.TYPE_RIGHT_SQUARE,null);}
<YYINITIAL> ","                 { return new Yytoken(Yytoken.TYPE_COMMA,null);}
<YYINITIAL> ":"                 { return new Yytoken(Yytoken.TYPE_COLON,null);}
<YYINITIAL> {WS}+               {}
<YYINITIAL> {FALLBACK_CH}       { throw new ParseException(yychar, ParseException.ERROR_UNEXPECTED_CHAR, new Character(yycharat(0)));}