Guest User

Untitled

a guest
May 26th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 KB | None | 0 0
  1. options {
  2. IGNORE_CASE=true;
  3. VISITOR=true;
  4. NODE_DEFAULT_VOID = true;
  5. NODE_PREFIX = "";
  6. MULTI = true;
  7. LOOKAHEAD = 4;
  8. }
  9.  
  10. PARSER_BEGIN(CriteriaParser)
  11.  
  12. package com.emasphere.operation.injection.dsl.flow.join;
  13.  
  14. import java.io.StringReader;
  15. import java.io.Reader;
  16. import java.util.List;
  17. import java.util.ArrayList;
  18. import java.math.BigDecimal;
  19. import com.emasphere.operation.injection.model.flow.definition.DataType;
  20.  
  21. public class CriteriaParser {
  22.  
  23. public static String nodesToRawString(List<ValueNode> values) {
  24. String concat = "";
  25.  
  26. for(int i = 0; i < values.size(); i++){
  27. if(i > 0) {
  28. concat += ", ";
  29. }
  30.  
  31. concat += values.get(i).toRawString();
  32. }
  33.  
  34. return concat;
  35. }
  36. }
  37.  
  38. PARSER_END(CriteriaParser)
  39.  
  40.  
  41. SKIP :
  42. {
  43. " "
  44. | "\t"
  45. | "\n"
  46. | "\r"
  47. | <"//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
  48. | <"/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/">
  49. }
  50.  
  51. TOKEN: {
  52. <KEY: "key">
  53.  
  54. | <LPAREN: "(">
  55. | <RPAREN: ")">
  56. | <LBRACKET: "[">
  57. | <RBRACKET: "]">
  58. | <COMA: ",">
  59.  
  60. | <QUOTED_STRING: "\"" (~["\""])* "\"" >
  61.  
  62. | <#DIGIT: ["0" - "9"] >
  63. | <#SIGN: ["-", "+"] >
  64. | <INTEGER: (<DIGIT>)+ >
  65. | <SIGNED_INTEGER: <SIGN> <INTEGER> >
  66. | <NUMBER: (<SIGN>)? (<INTEGER> "." <INTEGER>) >
  67.  
  68. | <BOOLEAN: ("true"|"false")>
  69.  
  70. | <MAPPING: "=>">
  71. }
  72.  
  73. public ValueNode value() :
  74. {
  75. ValueNode v;
  76. }
  77. {
  78. v = functionToUpperCase() {return v;}
  79. | v = functionToLowerCase() {return v;}
  80. | v = functionTakeFirstCharacters() {return v;}
  81. | v = functionTakeLastCharacters() {return v;}
  82. | v = functionConcat() {return v;}
  83. | v = functionTakeRegexGroup() {return v;}
  84. | v = functionSimpleMapping() {return v;}
  85.  
  86. | v = valueRef() {return v;}
  87.  
  88. | v = constant() {return v;}
  89. | v = constantString() {return v;}
  90. | v = constantBoolean() {return v;}
  91. | v = constantNumber() {return v;}
  92.  
  93. {
  94. throw new IllegalStateException("Unsupported node");
  95. }
  96. }
  97.  
  98. public ValueRefNode valueRef() #ValueRefNode :
  99. {
  100. Token reference;
  101. String referenceNoQuote;
  102. }
  103. {
  104. "val" <LPAREN> reference = <QUOTED_STRING> <RPAREN>
  105.  
  106. {
  107. referenceNoQuote = reference.image;
  108. referenceNoQuote = referenceNoQuote.substring(0, referenceNoQuote.length() - 1);
  109. referenceNoQuote = referenceNoQuote.substring(1, referenceNoQuote.length());
  110. jjtThis.setReference(referenceNoQuote);
  111. jjtThis.setRawString("val(" + reference.image + ")");
  112.  
  113. return jjtThis;
  114. }
  115. }
  116.  
  117. public ConstantNode constant() #ConstantNode :
  118. {
  119. Token tokenValue;
  120. Object value;
  121. }
  122. {
  123. "const" <LPAREN> tokenValue = <QUOTED_STRING> <RPAREN>
  124.  
  125. {
  126. value = tokenValue.image;
  127. value = ((String) value).substring(0, ((String) value).length() - 1);
  128. value = ((String) value).substring(1, ((String) value).length());
  129. jjtThis.setValue(value);
  130. jjtThis.setValueType(DataType.TEXT);
  131. jjtThis.setRawString("const(" + tokenValue.image + ")");
  132.  
  133. return jjtThis;
  134. }
  135. |
  136. "const" <LPAREN> tokenValue = <BOOLEAN> <RPAREN>
  137. {
  138. value = tokenValue.image;
  139. jjtThis.setValue(Boolean.valueOf((String) value));
  140. jjtThis.setValueType(DataType.BOOLEAN);
  141. jjtThis.setRawString("const(" + tokenValue.image + ")");
  142.  
  143. return jjtThis;
  144. }
  145. |
  146. "const" <LPAREN> ((tokenValue = <NUMBER>) | (tokenValue = <SIGNED_INTEGER>) | (tokenValue = <INTEGER>)) <RPAREN>
  147. {
  148. value = tokenValue.image;
  149. jjtThis.setValue(new BigDecimal((String) value));
  150. jjtThis.setValueType(DataType.NUMBER);
  151. jjtThis.setRawString("const(" + tokenValue.image + ")");
  152.  
  153. return jjtThis;
  154. }
  155. }
  156.  
  157. public ConstantNode constantString() #ConstantNode :
  158. {
  159. Token tokenValue;
  160. Object value;
  161. }
  162. {
  163. tokenValue = <QUOTED_STRING>
  164.  
  165. {
  166. value = tokenValue.image;
  167. value = ((String) value).substring(0, ((String) value).length() - 1);
  168. value = ((String) value).substring(1, ((String) value).length());
  169. jjtThis.setValue(value);
  170. jjtThis.setValueType(DataType.TEXT);
  171. jjtThis.setRawString(tokenValue.image);
  172.  
  173. return jjtThis;
  174. }
  175. }
  176.  
  177. public ConstantNode constantBoolean() #ConstantNode :
  178. {
  179. Token tokenValue;
  180. Object value;
  181. }
  182. {
  183. tokenValue = <BOOLEAN>
  184.  
  185. {
  186. value = tokenValue.image;
  187. jjtThis.setValue(Boolean.valueOf((String) value));
  188. jjtThis.setValueType(DataType.BOOLEAN);
  189. jjtThis.setRawString(tokenValue.image);
  190.  
  191. return jjtThis;
  192. }
  193. }
  194.  
  195. public ConstantNode constantNumber() #ConstantNode :
  196. {
  197. Token tokenValue;
  198. Object value;
  199. }
  200. {
  201. ((tokenValue = <NUMBER>) | (tokenValue = <SIGNED_INTEGER>) | (tokenValue = <INTEGER>))
  202.  
  203. {
  204. value = tokenValue.image;
  205. jjtThis.setValue(new BigDecimal((String) value));
  206. jjtThis.setValueType(DataType.NUMBER);
  207. jjtThis.setRawString(tokenValue.image);
  208.  
  209. return jjtThis;
  210. }
  211. }
  212.  
  213. public FunctionToUpperCaseNode functionToUpperCase() #FunctionToUpperCaseNode :
  214. {
  215. ValueNode value;
  216. }
  217. {
  218. "toUpperCase" <LPAREN> value=value() <RPAREN>
  219.  
  220. {
  221. jjtThis.setValue(value);
  222. jjtThis.setRawString("toUpperCase(" + value.toRawString() + ")");
  223.  
  224. return jjtThis;
  225. }
  226. }
  227.  
  228. public FunctionToLowerCaseNode functionToLowerCase() #FunctionToLowerCaseNode :
  229. {
  230. ValueNode value;
  231. }
  232. {
  233. "toLowerCase" <LPAREN> value=value() <RPAREN>
  234.  
  235. {
  236. jjtThis.setValue(value);
  237. jjtThis.setRawString("toLowerCase(" + value.toRawString() + ")");
  238.  
  239. return jjtThis;
  240. }
  241. }
  242.  
  243. public FunctionTakeFirstCharactersNode functionTakeFirstCharacters() #FunctionTakeFirstCharactersNode :
  244. {
  245. ValueNode value;
  246. Token number;
  247. }
  248. {
  249. "takeFirstCharacters" <LPAREN> value=value() <COMA> number=<INTEGER> <RPAREN>
  250.  
  251. {
  252. jjtThis.setValue(value);
  253. jjtThis.setNumber(Integer.valueOf(number.image));
  254. jjtThis.setRawString("takeFirstCharacters(" + value.toRawString() + ", " + number.image + ")");
  255.  
  256. return jjtThis;
  257. }
  258. }
  259.  
  260. public FunctionTakeLastCharactersNode functionTakeLastCharacters() #FunctionTakeLastCharactersNode :
  261. {
  262. ValueNode value;
  263. Token number;
  264. }
  265. {
  266. "takeLastCharacters" <LPAREN> value=value() <COMA> number=<INTEGER> <RPAREN>
  267.  
  268. {
  269. jjtThis.setValue(value);
  270. jjtThis.setNumber(Integer.valueOf(number.image));
  271. jjtThis.setRawString("takeLastCharacters(" + value.toRawString() + ", " + number.image + ")");
  272.  
  273. return jjtThis;
  274. }
  275. }
  276.  
  277. public FunctionConcatNode functionConcat() #FunctionConcatNode :
  278. {
  279. List<ValueNode> values = new ArrayList<ValueNode>();
  280. ValueNode value;
  281. }
  282. {
  283. "concat"
  284. <LPAREN>
  285. value = value() {values.add(value);}
  286. ("," value = value() {values.add(value);})*
  287. <RPAREN>
  288.  
  289. {
  290. jjtThis.setValues(values);
  291. jjtThis.setRawString("concat(" + nodesToRawString(values) + ")");
  292.  
  293. return jjtThis;
  294. }
  295. }
  296.  
  297. public FunctionTakeRegexGroupNode functionTakeRegexGroup() #FunctionTakeRegexGroupNode :
  298. {
  299. ValueNode value;
  300. Token regex;
  301. Token groupNumber;
  302. String regexNoQuote;
  303. }
  304. {
  305. "takeRegexGroup" <LPAREN> value = value() <COMA> regex = <QUOTED_STRING> <COMA> groupNumber = <INTEGER> <RPAREN>
  306.  
  307. {
  308. jjtThis.setValue(value);
  309.  
  310. regexNoQuote = regex.image;
  311. regexNoQuote = regexNoQuote.substring(0, regexNoQuote.length() - 1);
  312. regexNoQuote = regexNoQuote.substring(1, regexNoQuote.length());
  313.  
  314. jjtThis.setRegex(regexNoQuote);
  315. jjtThis.setGroupNumber(Integer.valueOf(groupNumber.image));
  316. jjtThis.setRawString("takeRegexGroup(" + value.toRawString() + ", " + regex + ", " + groupNumber.image + ")");
  317.  
  318. return jjtThis;
  319. }
  320. }
  321.  
  322. public FunctionSimpleMappingNode functionSimpleMapping() #FunctionSimpleMappingNode :
  323. {
  324. ValueNode value;
  325. Token regex;
  326. Token groupNumber;
  327. String regexNoQuote;
  328. }
  329. {
  330. "takeRegexGroup" <LPAREN> value = value() <COMA> regex = <QUOTED_STRING> <COMA> groupNumber = <INTEGER> <RPAREN>
  331.  
  332. {
  333. jjtThis.setValue(value);
  334.  
  335. regexNoQuote = regex.image;
  336. regexNoQuote = regexNoQuote.substring(0, regexNoQuote.length() - 1);
  337. regexNoQuote = regexNoQuote.substring(1, regexNoQuote.length());
  338.  
  339. jjtThis.setRegex(regexNoQuote);
  340. jjtThis.setGroupNumber(Integer.valueOf(groupNumber.image));
  341. jjtThis.setRawString("takeRegexGroup(" + value.toRawString() + ", " + regex + ", " + groupNumber.image + ")");
  342.  
  343. return jjtThis;
  344. }
  345. }
  346.  
  347. public KeyNode key() #KeyNode:
  348. {
  349. java.util.List<ValueNode> values = new java.util.ArrayList<ValueNode>();
  350. ValueNode value;
  351. }
  352. {
  353. (
  354. <KEY> <LPAREN>
  355. value = value() {values.add(value);}
  356. ("," value = value() {values.add(value);})*
  357. <RPAREN> <EOF>
  358. )*
  359. <EOF>
  360. {
  361. jjtThis.setValues(values);
  362. jjtThis.setRawString("key(" + nodesToRawString(values) + ")");
  363.  
  364. return jjtThis;
  365. }
  366. }
Add Comment
Please, Sign In to add comment