📄 commandparser.jj
字号:
options{ LOOKAHEAD=2;}PARSER_BEGIN(CommandParser)package Watermill.rmill;import java.io.*;import Watermill.relational.*;import Watermill.kernel.*;public class CommandParser { static CommandParser parser; public static String skipQuote(String i){ return i.replaceAll("\"",""); } }PARSER_END(CommandParser)SKIP :{ " "|"\r"|"\t"|"\n"}SPECIAL_TOKEN :{ <SINGLE_LINE_COMMENT: "#" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>}TOKEN:{ < NUMBER: (<DIGIT>)+ >| < DIGIT: ["0"-"9"] >| < READ: "read"|"READ" >| < REAL: <NUMBER>("."(<NUMBER>)+)?>| < PERCENTAGE: <REAL>"%" >| < FRACTION: <NUMBER>"/"<NUMBER> >| < STRING: ("\"") (~["\""])*("\"")>| < LPAR: "(" >| < RPAR: ")" >| < ECHO: "ECHO"|"echo" >| < COMMA: "," >| < SEMICOLON: ";" >| < LSET: "{">| < CREATE: ("C"|"c")("R"|"r")("E"|"e")("A"|"a")("T"|"t")("E"|"e") >| < POOL: ("P"|"p")("O"|"o")("O"|"o")("L"|"l") >| < POOLTYPE: "greedy" | "wi" >| < GLOBAL: ("G"|"g")("L"|"l")("O"|"o")("B"|"b")("A"|"a")("L"|"l")>| < LOCAL: ("L"|"l")("O"|"o")("C"|"c")("A"|"a")("L"|"l")>| < ON: ("O"|"o")("N"|"n")>| < QUERY: ("Q"|"q")("U"|"u")("E"|"e")("R"|"r")("Y"|"y")>| < RESET: ("R"|"r")("E"|"e")("S"|"s")("E"|"e")("T"|"t")>| < AS: ("A"|"a")("S"|"s") >| < GET: ("G"|"g")("E"|"e")("T"|"t") >| < INSTANCE: ("I"|"i")("N"|"n")("S"|"s")("T"|"t")("A"|"a")("N"|"n")("C"|"c")("E"|"e")>| < FOR: ("F"|"f")("O"|"o")("R"|"r") >| < CLIENT: ("C"|"c")("L"|"l")("I"|"i")("E"|"e")("N"|"n")("T"|"t")> | < FROM: ("F"|"f")("R"|"r")("O"|"o")("M"|"m") >| < BENCH: ("B"|"b")("E"|"e")("N"|"n")("C"|"c")("H"|"h") >| < IDENTIFY: ("I"|"i")("D"|"d")("E"|"e")("N"|"n")("T"|"t")("I"|"i")("F"|"f")("Y"|"y")>| < TABLE: ("T"|"t")("A"|"a")("B"|"b")("L"|"l")("E"|"e")>| < PRECISION: ("P"|"p")("R"|"r")("E"|"e")("C"|"c")("I"|"i")("S"|"s")("I"|"i")("O"|"o")("N"|"n")>| < FORALL: "forall"|"FORALL" >| < IID: "$ID">| < IN: "IN" | "in" >| < MODIFY: ("M"|"m")("O"|"o")("D"|"d")("I"|"i")("F"|"f")("Y"|"y")>| < TABLESUFIX: ("T"|"t")("A"|"a")("B"|"b")("L"|"l")("E"|"e")("S"|"s")("U"|"u")("F"|"f")("I"|"i")("X"|"x") >| < DATAALTERATION: ("D"|"d")("A"|"a")("T"|"t")("A"|"a")("A"|"a")("L"|"l")("T"|"t")("E"|"e")("R"|"r")("A"|"a")("T"|"t")("I"|"i")("O"|"o")("N"|"n")>| < ALTER: "ALTER"|"alter" >| < SURGERY: "SURGERY"|"surgery" >| < DATALOSS: ("D"|"d")("A"|"a")("T"|"t")("A"|"a")("L"|"l")("O"|"o")("S"|"s")("S"|"s")>| < OVERMARK: ("O"|"o")("V"|"v")("E"|"e")("R"|"r")("M"|"m")("A"|"a")("R"|"r")("K"|"k")>| < PROBABILITY: ("P"|"p")("R"|"r")("O"|"o")("B"|"b")("A"|"a")("B"|"b")("I"|"i")("L"|"l")("I"|"i")("T"|"t")("Y"|"y")>| < VALUE: ("V"|"v")("A"|"a")("L"|"l")("U"|"u")("E"|"e")>| < COUNT: ("C"|"c")("O"|"o")("U"|"u")("N"|"n")("T"|"t")>| < GRAPHIC: ("G"|"g")("R"|"r")("A"|"a")("P"|"p")("H"|"h")("I"|"i")("C"|"c")>| < IDCLIENT: ("I"|"i")("D"|"d")("C"|"c")("L"|"l")("I"|"i")("E"|"e")("N"|"n")("T"|"t")>| < EXECUTE: ("E"|"e")("X"|"x")("E"|"e")("C"|"c")("U"|"u")("T"|"t")("E"|"e")>| < COMMAND: ("C"|"c")("O"|"o")("M"|"m")("M"|"m")("A"|"a")("N"|"n")("D"|"d")>| < PARAMETERS: ("P"|"p")("A"|"a")("R"|"r")("A"|"a")("M"|"m")("E"|"e")("T"|"t")("E"|"e")("R"|"r")("S"|"s")>| < SELECT: ("S"|"s")("E"|"e")("L"|"l")("E"|"e")("C"|"c")("T"|"t")>| < WHERE: ("W"|"w")("H"|"h")("E"|"e")("R"|"r")("E"|"e")>| < WITH: ("W"|"w")("I"|"i")("T"|"t")("H"|"h")>| < TOTAL: ("T"|"t")("O"|"o")("T"|"t")("A"|"a")("L"|"l")>| < ID: ["a"-"z","A"-"Z","_"] ( ["a"-"z","A"-"Z","_","0"-"9"] )* >}Command parse()throws Exception:{ Command ret;}{ ret = expr() ";" { return ret;}}Command expr()throws Exception:{ Token read, read1, read2,read3,prob; Token client, prec, value,value1,value2,value3; Token id; Token description; Token publicKey; boolean ret; LocalConstraint localConstraint=null; LocalConstraints localConstraints=new LocalConstraints(),lc=new LocalConstraints(); GlobalConstraints globalConstraints=new GlobalConstraints(),gc=new GlobalConstraints(); GroupGlobalConstraints groupGlobalConstraints=new GroupGlobalConstraints(),ggc=new GroupGlobalConstraints(); Token dbname;}{ <CREATE> read3=<POOLTYPE> <POOL>read=<STRING> <ON> read2=<STRING> <WITH> lc=getLocalConstraints() {localConstraints.addAll(lc);} ("," gc=getGlobalConstraints())? { globalConstraints.addAll(gc);} ("," ggc=getGroupGlobalConstraints())? { groupGlobalConstraints.addAll(ggc); Msg.debug("Adding a group global"+ggc.toString()); return new CreatePoolCommand( skipQuote(read.toString()), skipQuote(read2.toString()), localConstraints,globalConstraints, groupGlobalConstraints, skipQuote(read3.toString())); } | <CREATE> <CLIENT> id=<STRING> description=<STRING> publicKey=<STRING> { return new CreateClientCommand( new UserData(skipQuote(id.toString()), skipQuote(description.toString()), skipQuote(publicKey.toString())) ); } | <GET><INSTANCE> dbname=<STRING> <FOR> client=<STRING> <FROM> read=<STRING> { return new GetInstanceCommand( skipQuote(dbname.toString()), skipQuote(client.toString()), skipQuote(read.toString())); } | <IDENTIFY> read=<STRING> { return new IdentifyCommand(skipQuote(read.toString()));} | <ECHO> read=<STRING> { return new EchoCommand(skipQuote(read.toString()));} | <SURGERY> read1=<STRING> read2=<STRING> read3=<NUMBER> { return new SurgeryCommand( skipQuote(read1.toString()), skipQuote(read2.toString()), Integer.parseInt(read3.toString())); } | <ALTER> read1=<STRING> read2=<NUMBER> read3=<NUMBER> { return new EpsilonAttackCommand( skipQuote(read1.toString()), Integer.parseInt(read2.toString()), Integer.parseInt(read3.toString())); } | <RESET> {return new ResetCommand();} | <READ> read=<STRING> { return (new ExecuteCommand(skipQuote(read.toString())));} | <BENCH> read=<STRING> value1=<NUMBER> value2=<NUMBER> value3=<NUMBER> { return (new BenchCommand( skipQuote(read.toString()), Integer.parseInt(value1.toString()), Integer.parseInt(value2.toString()), Integer.parseInt(value3.toString()))); }}GlobalConstraints getGlobalConstraints() throws Exception:{ GlobalConstraints res=new GlobalConstraints(); GlobalConstraint r,r2;}{ r=getGlobalConstraint() {res.add(r);} ( "," r2=getGlobalConstraint() {res.add(r2);} )* {return res;}}GroupGlobalConstraints getGroupGlobalConstraints() throws Exception:{ GroupGlobalConstraints res=new GroupGlobalConstraints(); GroupGlobalConstraint r,r2;}{ r=getGroupGlobalConstraint() {res.add(r);} ( "," r2=getGroupGlobalConstraint() { res.add(r2);} )* {return res;}}GroupGlobalConstraint getGroupGlobalConstraint() throws Exception:{ GlobalConstraint gc; Token read;}{ <FORALL> <IID> <IN> read=<STRING> gc=getGlobalConstraint() {return new GroupGlobalConstraint( gc, skipQuote(read.toString())); }}GlobalConstraint getGlobalConstraint() throws Exception:{ Token read1,read2,read3,read4,read5;}{ <GLOBAL> read2 = <NUMBER> <ON> <QUERY> "{" <SELECT> read3 = <ID> "," read4 = <ID> <FROM> read5= <ID> <WHERE> read1 = <STRING> "}" {return new GlobalConstraint( Integer.parseInt(read2.toString()), skipQuote(read3.toString()), skipQuote(read4.toString()), skipQuote(read5.toString()), skipQuote(read1.toString())); }}LocalConstraints getLocalConstraints() throws Exception:{ LocalConstraints res=new LocalConstraints(); LocalConstraint r,r2;}{ r=getLocalConstraint() {res.add(r);} ( "," r2=getLocalConstraint() {res.add(r2);} )* {return res;}}LocalConstraint getLocalConstraint() throws Exception:{ Token distortion, tableName, attributeName, keyName;}{ <LOCAL> distortion = <NUMBER> <ON> "("tableName = <STRING> "," keyName=<STRING> "," attributeName = <STRING>")" { return new LocalConstraint( Integer.parseInt(distortion.toString()), skipQuote(tableName.toString()), skipQuote(keyName.toString()), skipQuote(attributeName.toString())); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -