public abstract class NodeBase<NodeType> implements TupleElement<NodeType> {\r
protected NodeBase() {}\r
\r
- public boolean isNode() {\r
+ public boolean isAtom() {\r
return true;\r
}\r
\r
}\r
\r
@SuppressWarnings("unchecked")\r
- public NodeType castToNode() {\r
+ public NodeType castToElement() {\r
return (NodeType) this;\r
}\r
\r
return nodeList.addAll(relationFragment);\r
}\r
\r
- public Element castToNode() {\r
+ public Element castToElement() {\r
return null;\r
}\r
\r
return this;\r
}\r
\r
- public boolean isNode() {\r
+ public boolean isAtom() {\r
return true;\r
}\r
\r
@SuppressWarnings("unchecked")\r
public Element getNode(int index) {\r
TupleElement<Element> node = get(index);\r
- if (node.isNode())\r
+ if (node.isAtom())\r
return (Element) node;\r
else\r
throw new XerialError(XerialErrorCode.MISSING_ELEMENT, "node is not found: " + index);\r
if (node == null)\r
return null;\r
\r
- if (node.isNode())\r
+ if (node.isAtom())\r
return (Element) node;\r
else\r
throw new XerialError(XerialErrorCode.MISSING_ELEMENT, "node is not found: " + index);\r
}\r
\r
private void flatten(List<TupleElement<Element>> result, TupleElement<Element> cell) {\r
- if (cell.isNode())\r
+ if (cell.isAtom())\r
result.add(cell);\r
else {\r
for (TupleElement<Element> each : cell.castToTuple()) {\r
*/\r
public interface TupleElement<Element> {\r
/**\r
- * Returns true if this cell is a singleton\r
+ * Returns true if this element is a singleton, i.e. no more nested nodes\r
* \r
* @return\r
*/\r
- public boolean isNode();\r
+ public boolean isAtom();\r
\r
/**\r
* Returns true if this cell is a tuple\r
public boolean isTuple();\r
\r
/**\r
- * Get the number of elements contained in this cell. When this cell is an\r
- * atom, the size will be 1. When a tuple, the returned size is the tuple\r
- * size.\r
+ * Get the number of elements contained in this element. When this element\r
+ * is an atom, the size will be 1. When a tuple, the returned size is the\r
+ * tuple size.\r
* \r
* @return\r
*/\r
* \r
* @return\r
*/\r
- Element castToNode();\r
+ Element castToElement();\r
\r
/**\r
* If this cell is tuple, then return tuple. otherwise return null\r
NODEVALUE;\r
NAME;\r
VALUE;\r
- INDEX;\r
}\r
\r
\r
//--------------------------------------\r
package org.xerial.lens.relation.query.impl;\r
\r
-import org.xerial.lens.relation.TupleIndex;\r
}\r
\r
@lexer::members {\r
}\r
\r
@members {\r
- private TupleIndex currentIndex = null;\r
} \r
\r
// lexer rules\r
; \r
\r
relation \r
-scope \r
-{\r
- int nodeItemIndex;\r
- TupleIndex relationIndex; \r
-}\r
-@init \r
-{\r
- $relation::nodeItemIndex = 1;\r
- if(currentIndex == null)\r
- currentIndex = new TupleIndex(1);\r
- else\r
- currentIndex = new TupleIndex(currentIndex, 1); \r
-}\r
-@after\r
-{\r
- currentIndex = currentIndex.parent();\r
-}\r
- : relation_i -> ^(RELATION relation_i INDEX[currentIndex.toString()])\r
+ : relation_i -> ^(RELATION relation_i)\r
;\r
\r
relation_i: nodeName alias? LParen! nodeItem (Comma! nodeItem)* RParen!;\r
\r
fragment\r
nodeItem\r
-@init {\r
- int index = $relation::nodeItemIndex++;\r
-}\r
: nodeName alias? nodeValue? \r
- -> ^(NODE nodeName alias? nodeValue? INDEX[new TupleIndex(currentIndex, index).toString()])\r
+ -> ^(NODE nodeName alias? nodeValue?)\r
| relation \r
;\r
\r
-INDEX=15\r
PATTERNMATCH=9\r
-Match=40\r
-Regex=41\r
-Digit=19\r
-Frac=28\r
-HexDigit=21\r
+Match=39\r
+Regex=40\r
+Digit=18\r
+Frac=27\r
+HexDigit=20\r
QUERY=4\r
ALIAS=11\r
VALUE=14\r
-Letter=20\r
-Comma=43\r
-Dot=42\r
-EscapeSequence=23\r
-Integer=27\r
-WhiteSpace=52\r
+Letter=19\r
+Comma=42\r
+Dot=41\r
+EscapeSequence=22\r
+Integer=26\r
+WhiteSpace=51\r
OPERATOR=7\r
-False=32\r
-Colon=44\r
-LineComment=17\r
+False=31\r
+LineComment=16\r
+Colon=43\r
NODEVALUE=12\r
-As=45\r
-SafeFirstLetter=50\r
-Null=33\r
-Star=48\r
-Eq=38\r
-Exp=29\r
-QNameChar=53\r
+As=44\r
+SafeFirstLetter=49\r
+Null=32\r
+Star=47\r
+Eq=37\r
+Exp=28\r
+QNameChar=52\r
RELATION=5\r
-Gt=35\r
-RParen=47\r
-UnicodeChar=22\r
-StringChar=24\r
-True=31\r
+Gt=34\r
+RParen=46\r
+UnicodeChar=21\r
+StringChar=23\r
+True=30\r
OPERAND=8\r
-LineBreak=18\r
-LParen=46\r
-String=26\r
-SafeLetter=51\r
-LineBreakChar=16\r
+LineBreak=17\r
+LParen=45\r
+String=25\r
+SafeLetter=50\r
+LineBreakChar=15\r
COMPARE=6\r
-QName=54\r
-Geq=37\r
+QName=53\r
+Geq=36\r
NODE=10\r
-StringChar_s=25\r
-Neq=39\r
-UnsafeUnicodeChar=49\r
-Double=30\r
-Lt=34\r
+StringChar_s=24\r
+Neq=38\r
+UnsafeUnicodeChar=48\r
+Double=29\r
+Lt=33\r
NAME=13\r
-Leq=36\r
-WhiteSpaces=55\r
+Leq=35\r
+WhiteSpaces=54\r
-// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 LensQuery.g 2009-09-30 22:59:27\r
+// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 LensQuery.g 2009-10-13 14:02:52\r
\r
/*--------------------------------------------------------------------------\r
* Copyright 2009 Taro L. Saito\r
import java.util.ArrayList;\r
\r
public class LensQueryLexer extends Lexer {\r
- public static final int INDEX=15;\r
public static final int PATTERNMATCH=9;\r
- public static final int Match=40;\r
- public static final int Regex=41;\r
- public static final int Digit=19;\r
- public static final int Frac=28;\r
- public static final int HexDigit=21;\r
+ public static final int Match=39;\r
+ public static final int Regex=40;\r
+ public static final int Digit=18;\r
+ public static final int Frac=27;\r
+ public static final int HexDigit=20;\r
public static final int QUERY=4;\r
public static final int ALIAS=11;\r
public static final int VALUE=14;\r
- public static final int Letter=20;\r
- public static final int Comma=43;\r
- public static final int Dot=42;\r
- public static final int EscapeSequence=23;\r
- public static final int Integer=27;\r
- public static final int WhiteSpace=52;\r
+ public static final int Letter=19;\r
+ public static final int Comma=42;\r
+ public static final int Dot=41;\r
+ public static final int EscapeSequence=22;\r
+ public static final int Integer=26;\r
+ public static final int WhiteSpace=51;\r
public static final int OPERATOR=7;\r
- public static final int False=32;\r
- public static final int Colon=44;\r
- public static final int LineComment=17;\r
+ public static final int False=31;\r
+ public static final int LineComment=16;\r
+ public static final int Colon=43;\r
public static final int NODEVALUE=12;\r
- public static final int As=45;\r
- public static final int SafeFirstLetter=50;\r
- public static final int Null=33;\r
- public static final int Star=48;\r
- public static final int Eq=38;\r
- public static final int Exp=29;\r
- public static final int QNameChar=53;\r
+ public static final int As=44;\r
+ public static final int SafeFirstLetter=49;\r
+ public static final int Null=32;\r
+ public static final int Star=47;\r
+ public static final int Eq=37;\r
+ public static final int Exp=28;\r
+ public static final int QNameChar=52;\r
public static final int RELATION=5;\r
- public static final int Gt=35;\r
- public static final int RParen=47;\r
- public static final int UnicodeChar=22;\r
- public static final int StringChar=24;\r
- public static final int True=31;\r
+ public static final int Gt=34;\r
+ public static final int RParen=46;\r
+ public static final int UnicodeChar=21;\r
+ public static final int StringChar=23;\r
+ public static final int True=30;\r
public static final int OPERAND=8;\r
- public static final int LineBreak=18;\r
- public static final int LParen=46;\r
- public static final int String=26;\r
- public static final int SafeLetter=51;\r
- public static final int LineBreakChar=16;\r
+ public static final int LineBreak=17;\r
+ public static final int LParen=45;\r
+ public static final int String=25;\r
+ public static final int SafeLetter=50;\r
+ public static final int LineBreakChar=15;\r
public static final int COMPARE=6;\r
- public static final int QName=54;\r
- public static final int Geq=37;\r
+ public static final int QName=53;\r
+ public static final int Geq=36;\r
public static final int EOF=-1;\r
public static final int NODE=10;\r
- public static final int Neq=39;\r
- public static final int StringChar_s=25;\r
- public static final int UnsafeUnicodeChar=49;\r
- public static final int Double=30;\r
- public static final int Lt=34;\r
+ public static final int Neq=38;\r
+ public static final int StringChar_s=24;\r
+ public static final int UnsafeUnicodeChar=48;\r
+ public static final int Double=29;\r
+ public static final int Lt=33;\r
public static final int NAME=13;\r
- public static final int Leq=36;\r
- public static final int WhiteSpaces=55;\r
+ public static final int Leq=35;\r
+ public static final int WhiteSpaces=54;\r
\r
\r
\r
// $ANTLR start "LineBreakChar"\r
public final void mLineBreakChar() throws RecognitionException {\r
try {\r
- // LensQuery.g:116:23: ( '\\n' | '\\r' )\r
+ // LensQuery.g:113:23: ( '\\n' | '\\r' )\r
// LensQuery.g:\r
{\r
if ( input.LA(1)=='\n'||input.LA(1)=='\r' ) {\r
try {\r
int _type = LineComment;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:117:12: ( '#' (~ ( LineBreakChar ) )* )\r
- // LensQuery.g:117:14: '#' (~ ( LineBreakChar ) )*\r
+ // LensQuery.g:114:12: ( '#' (~ ( LineBreakChar ) )* )\r
+ // LensQuery.g:114:14: '#' (~ ( LineBreakChar ) )*\r
{\r
match('#'); \r
- // LensQuery.g:117:18: (~ ( LineBreakChar ) )*\r
+ // LensQuery.g:114:18: (~ ( LineBreakChar ) )*\r
loop1:\r
do {\r
int alt1=2;\r
\r
switch (alt1) {\r
case 1 :\r
- // LensQuery.g:117:18: ~ ( LineBreakChar )\r
+ // LensQuery.g:114:18: ~ ( LineBreakChar )\r
{\r
if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {\r
input.consume();\r
try {\r
int _type = LineBreak;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:120:10: ( ( '\\r' '\\n' | '\\r' | '\\n' ) )\r
- // LensQuery.g:120:12: ( '\\r' '\\n' | '\\r' | '\\n' )\r
+ // LensQuery.g:117:10: ( ( '\\r' '\\n' | '\\r' | '\\n' ) )\r
+ // LensQuery.g:117:12: ( '\\r' '\\n' | '\\r' | '\\n' )\r
{\r
- // LensQuery.g:120:12: ( '\\r' '\\n' | '\\r' | '\\n' )\r
+ // LensQuery.g:117:12: ( '\\r' '\\n' | '\\r' | '\\n' )\r
int alt2=3;\r
int LA2_0 = input.LA(1);\r
\r
}\r
switch (alt2) {\r
case 1 :\r
- // LensQuery.g:120:13: '\\r' '\\n'\r
+ // LensQuery.g:117:13: '\\r' '\\n'\r
{\r
match('\r'); \r
match('\n'); \r
}\r
break;\r
case 2 :\r
- // LensQuery.g:120:25: '\\r'\r
+ // LensQuery.g:117:25: '\\r'\r
{\r
match('\r'); \r
\r
}\r
break;\r
case 3 :\r
- // LensQuery.g:120:32: '\\n'\r
+ // LensQuery.g:117:32: '\\n'\r
{\r
match('\n'); \r
\r
// $ANTLR start "Digit"\r
public final void mDigit() throws RecognitionException {\r
try {\r
- // LensQuery.g:123:15: ( '0' .. '9' )\r
- // LensQuery.g:123:17: '0' .. '9'\r
+ // LensQuery.g:120:15: ( '0' .. '9' )\r
+ // LensQuery.g:120:17: '0' .. '9'\r
{\r
matchRange('0','9'); \r
\r
// $ANTLR start "Letter"\r
public final void mLetter() throws RecognitionException {\r
try {\r
- // LensQuery.g:124:16: ( 'A' .. 'F' | 'a' .. 'f' )\r
+ // LensQuery.g:121:16: ( 'A' .. 'F' | 'a' .. 'f' )\r
// LensQuery.g:\r
{\r
if ( (input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {\r
// $ANTLR start "HexDigit"\r
public final void mHexDigit() throws RecognitionException {\r
try {\r
- // LensQuery.g:125:18: ( Digit | Letter )\r
+ // LensQuery.g:122:18: ( Digit | Letter )\r
// LensQuery.g:\r
{\r
if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {\r
// $ANTLR start "UnicodeChar"\r
public final void mUnicodeChar() throws RecognitionException {\r
try {\r
- // LensQuery.g:126:21: (~ ( '\"' | '\\\\' ) )\r
- // LensQuery.g:126:23: ~ ( '\"' | '\\\\' )\r
+ // LensQuery.g:123:21: (~ ( '\"' | '\\\\' ) )\r
+ // LensQuery.g:123:23: ~ ( '\"' | '\\\\' )\r
{\r
if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {\r
input.consume();\r
// $ANTLR start "EscapeSequence"\r
public final void mEscapeSequence() throws RecognitionException {\r
try {\r
- // LensQuery.g:128:3: ( '\\\\' ( '\\\"' | '\\\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit ) )\r
- // LensQuery.g:128:5: '\\\\' ( '\\\"' | '\\\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit )\r
+ // LensQuery.g:125:3: ( '\\\\' ( '\\\"' | '\\\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit ) )\r
+ // LensQuery.g:125:5: '\\\\' ( '\\\"' | '\\\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit )\r
{\r
match('\\'); \r
- // LensQuery.g:128:10: ( '\\\"' | '\\\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit )\r
+ // LensQuery.g:125:10: ( '\\\"' | '\\\\' | '/' | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HexDigit HexDigit HexDigit HexDigit )\r
int alt3=9;\r
switch ( input.LA(1) ) {\r
case '\"':\r
\r
switch (alt3) {\r
case 1 :\r
- // LensQuery.g:128:11: '\\\"'\r
+ // LensQuery.g:125:11: '\\\"'\r
{\r
match('\"'); \r
\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:128:18: '\\\\'\r
+ // LensQuery.g:125:18: '\\\\'\r
{\r
match('\\'); \r
\r
}\r
break;\r
case 3 :\r
- // LensQuery.g:128:25: '/'\r
+ // LensQuery.g:125:25: '/'\r
{\r
match('/'); \r
\r
}\r
break;\r
case 4 :\r
- // LensQuery.g:128:31: 'b'\r
+ // LensQuery.g:125:31: 'b'\r
{\r
match('b'); \r
\r
}\r
break;\r
case 5 :\r
- // LensQuery.g:128:37: 'f'\r
+ // LensQuery.g:125:37: 'f'\r
{\r
match('f'); \r
\r
}\r
break;\r
case 6 :\r
- // LensQuery.g:128:43: 'n'\r
+ // LensQuery.g:125:43: 'n'\r
{\r
match('n'); \r
\r
}\r
break;\r
case 7 :\r
- // LensQuery.g:128:49: 'r'\r
+ // LensQuery.g:125:49: 'r'\r
{\r
match('r'); \r
\r
}\r
break;\r
case 8 :\r
- // LensQuery.g:128:55: 't'\r
+ // LensQuery.g:125:55: 't'\r
{\r
match('t'); \r
\r
}\r
break;\r
case 9 :\r
- // LensQuery.g:128:61: 'u' HexDigit HexDigit HexDigit HexDigit\r
+ // LensQuery.g:125:61: 'u' HexDigit HexDigit HexDigit HexDigit\r
{\r
match('u'); \r
mHexDigit(); \r
// $ANTLR start "StringChar"\r
public final void mStringChar() throws RecognitionException {\r
try {\r
- // LensQuery.g:131:21: ( UnicodeChar | EscapeSequence )\r
+ // LensQuery.g:128:21: ( UnicodeChar | EscapeSequence )\r
int alt4=2;\r
int LA4_0 = input.LA(1);\r
\r
}\r
switch (alt4) {\r
case 1 :\r
- // LensQuery.g:131:24: UnicodeChar\r
+ // LensQuery.g:128:24: UnicodeChar\r
{\r
mUnicodeChar(); \r
\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:131:38: EscapeSequence\r
+ // LensQuery.g:128:38: EscapeSequence\r
{\r
mEscapeSequence(); \r
\r
// $ANTLR start "StringChar_s"\r
public final void mStringChar_s() throws RecognitionException {\r
try {\r
- // LensQuery.g:132:22: ( ( StringChar )* )\r
- // LensQuery.g:132:24: ( StringChar )*\r
+ // LensQuery.g:129:22: ( ( StringChar )* )\r
+ // LensQuery.g:129:24: ( StringChar )*\r
{\r
- // LensQuery.g:132:24: ( StringChar )*\r
+ // LensQuery.g:129:24: ( StringChar )*\r
loop5:\r
do {\r
int alt5=2;\r
\r
switch (alt5) {\r
case 1 :\r
- // LensQuery.g:132:24: StringChar\r
+ // LensQuery.g:129:24: StringChar\r
{\r
mStringChar(); \r
\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
Token s=null;\r
\r
- // LensQuery.g:134:7: ( '\"' s= StringChar_s '\"' )\r
- // LensQuery.g:134:9: '\"' s= StringChar_s '\"'\r
+ // LensQuery.g:131:7: ( '\"' s= StringChar_s '\"' )\r
+ // LensQuery.g:131:9: '\"' s= StringChar_s '\"'\r
{\r
match('\"'); \r
int sStart244 = getCharIndex();\r
try {\r
int _type = Integer;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:137:8: ( ( '-' )? ( '0' | '1' .. '9' ( Digit )* ) )\r
- // LensQuery.g:137:10: ( '-' )? ( '0' | '1' .. '9' ( Digit )* )\r
+ // LensQuery.g:134:8: ( ( '-' )? ( '0' | '1' .. '9' ( Digit )* ) )\r
+ // LensQuery.g:134:10: ( '-' )? ( '0' | '1' .. '9' ( Digit )* )\r
{\r
- // LensQuery.g:137:10: ( '-' )?\r
+ // LensQuery.g:134:10: ( '-' )?\r
int alt6=2;\r
int LA6_0 = input.LA(1);\r
\r
}\r
switch (alt6) {\r
case 1 :\r
- // LensQuery.g:137:10: '-'\r
+ // LensQuery.g:134:10: '-'\r
{\r
match('-'); \r
\r
\r
}\r
\r
- // LensQuery.g:137:15: ( '0' | '1' .. '9' ( Digit )* )\r
+ // LensQuery.g:134:15: ( '0' | '1' .. '9' ( Digit )* )\r
int alt8=2;\r
int LA8_0 = input.LA(1);\r
\r
}\r
switch (alt8) {\r
case 1 :\r
- // LensQuery.g:137:16: '0'\r
+ // LensQuery.g:134:16: '0'\r
{\r
match('0'); \r
\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:137:22: '1' .. '9' ( Digit )*\r
+ // LensQuery.g:134:22: '1' .. '9' ( Digit )*\r
{\r
matchRange('1','9'); \r
- // LensQuery.g:137:31: ( Digit )*\r
+ // LensQuery.g:134:31: ( Digit )*\r
loop7:\r
do {\r
int alt7=2;\r
\r
switch (alt7) {\r
case 1 :\r
- // LensQuery.g:137:31: Digit\r
+ // LensQuery.g:134:31: Digit\r
{\r
mDigit(); \r
\r
// $ANTLR start "Frac"\r
public final void mFrac() throws RecognitionException {\r
try {\r
- // LensQuery.g:138:14: ( '.' ( Digit )+ )\r
- // LensQuery.g:138:16: '.' ( Digit )+\r
+ // LensQuery.g:135:14: ( '.' ( Digit )+ )\r
+ // LensQuery.g:135:16: '.' ( Digit )+\r
{\r
match('.'); \r
- // LensQuery.g:138:20: ( Digit )+\r
+ // LensQuery.g:135:20: ( Digit )+\r
int cnt9=0;\r
loop9:\r
do {\r
\r
switch (alt9) {\r
case 1 :\r
- // LensQuery.g:138:20: Digit\r
+ // LensQuery.g:135:20: Digit\r
{\r
mDigit(); \r
\r
// $ANTLR start "Exp"\r
public final void mExp() throws RecognitionException {\r
try {\r
- // LensQuery.g:139:13: ( ( 'e' | 'E' ) ( '+' | '-' )? ( Digit )+ )\r
- // LensQuery.g:139:15: ( 'e' | 'E' ) ( '+' | '-' )? ( Digit )+\r
+ // LensQuery.g:136:13: ( ( 'e' | 'E' ) ( '+' | '-' )? ( Digit )+ )\r
+ // LensQuery.g:136:15: ( 'e' | 'E' ) ( '+' | '-' )? ( Digit )+\r
{\r
if ( input.LA(1)=='E'||input.LA(1)=='e' ) {\r
input.consume();\r
recover(mse);\r
throw mse;}\r
\r
- // LensQuery.g:139:27: ( '+' | '-' )?\r
+ // LensQuery.g:136:27: ( '+' | '-' )?\r
int alt10=2;\r
int LA10_0 = input.LA(1);\r
\r
\r
}\r
\r
- // LensQuery.g:139:40: ( Digit )+\r
+ // LensQuery.g:136:40: ( Digit )+\r
int cnt11=0;\r
loop11:\r
do {\r
\r
switch (alt11) {\r
case 1 :\r
- // LensQuery.g:139:40: Digit\r
+ // LensQuery.g:136:40: Digit\r
{\r
mDigit(); \r
\r
try {\r
int _type = Double;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:140:7: ( Integer ( Frac ( Exp )? | Exp ) )\r
- // LensQuery.g:140:9: Integer ( Frac ( Exp )? | Exp )\r
+ // LensQuery.g:137:7: ( Integer ( Frac ( Exp )? | Exp ) )\r
+ // LensQuery.g:137:9: Integer ( Frac ( Exp )? | Exp )\r
{\r
mInteger(); \r
- // LensQuery.g:140:17: ( Frac ( Exp )? | Exp )\r
+ // LensQuery.g:137:17: ( Frac ( Exp )? | Exp )\r
int alt13=2;\r
int LA13_0 = input.LA(1);\r
\r
}\r
switch (alt13) {\r
case 1 :\r
- // LensQuery.g:140:18: Frac ( Exp )?\r
+ // LensQuery.g:137:18: Frac ( Exp )?\r
{\r
mFrac(); \r
- // LensQuery.g:140:23: ( Exp )?\r
+ // LensQuery.g:137:23: ( Exp )?\r
int alt12=2;\r
int LA12_0 = input.LA(1);\r
\r
}\r
switch (alt12) {\r
case 1 :\r
- // LensQuery.g:140:23: Exp\r
+ // LensQuery.g:137:23: Exp\r
{\r
mExp(); \r
\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:140:30: Exp\r
+ // LensQuery.g:137:30: Exp\r
{\r
mExp(); \r
\r
try {\r
int _type = True;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:142:5: ( 'true' )\r
- // LensQuery.g:142:7: 'true'\r
+ // LensQuery.g:139:5: ( 'true' )\r
+ // LensQuery.g:139:7: 'true'\r
{\r
match("true"); \r
\r
try {\r
int _type = False;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:143:6: ( 'false' )\r
- // LensQuery.g:143:8: 'false'\r
+ // LensQuery.g:140:6: ( 'false' )\r
+ // LensQuery.g:140:8: 'false'\r
{\r
match("false"); \r
\r
try {\r
int _type = Null;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:144:5: ( 'null' )\r
- // LensQuery.g:144:7: 'null'\r
+ // LensQuery.g:141:5: ( 'null' )\r
+ // LensQuery.g:141:7: 'null'\r
{\r
match("null"); \r
\r
try {\r
int _type = Lt;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:148:3: ( '<' )\r
- // LensQuery.g:148:5: '<'\r
+ // LensQuery.g:145:3: ( '<' )\r
+ // LensQuery.g:145:5: '<'\r
{\r
match('<'); \r
\r
try {\r
int _type = Gt;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:149:3: ( '>' )\r
- // LensQuery.g:149:5: '>'\r
+ // LensQuery.g:146:3: ( '>' )\r
+ // LensQuery.g:146:5: '>'\r
{\r
match('>'); \r
\r
try {\r
int _type = Leq;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:150:4: ( '<=' )\r
- // LensQuery.g:150:6: '<='\r
+ // LensQuery.g:147:4: ( '<=' )\r
+ // LensQuery.g:147:6: '<='\r
{\r
match("<="); \r
\r
try {\r
int _type = Geq;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:151:4: ( '>=' )\r
- // LensQuery.g:151:6: '>='\r
+ // LensQuery.g:148:4: ( '>=' )\r
+ // LensQuery.g:148:6: '>='\r
{\r
match(">="); \r
\r
try {\r
int _type = Eq;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:152:3: ( '=' )\r
- // LensQuery.g:152:5: '='\r
+ // LensQuery.g:149:3: ( '=' )\r
+ // LensQuery.g:149:5: '='\r
{\r
match('='); \r
\r
try {\r
int _type = Neq;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:153:4: ( '!=' )\r
- // LensQuery.g:153:6: '!='\r
+ // LensQuery.g:150:4: ( '!=' )\r
+ // LensQuery.g:150:6: '!='\r
{\r
match("!="); \r
\r
try {\r
int _type = Match;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:154:6: ( '~=' )\r
- // LensQuery.g:154:8: '~='\r
+ // LensQuery.g:151:6: ( '~=' )\r
+ // LensQuery.g:151:8: '~='\r
{\r
match("~="); \r
\r
try {\r
int _type = Regex;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:155:6: ( '/' ( options {greedy=false; } : . )* '/' ( 'a' .. 'z' | 'A' .. 'Z' )* )\r
- // LensQuery.g:155:8: '/' ( options {greedy=false; } : . )* '/' ( 'a' .. 'z' | 'A' .. 'Z' )*\r
+ // LensQuery.g:152:6: ( '/' ( options {greedy=false; } : . )* '/' ( 'a' .. 'z' | 'A' .. 'Z' )* )\r
+ // LensQuery.g:152:8: '/' ( options {greedy=false; } : . )* '/' ( 'a' .. 'z' | 'A' .. 'Z' )*\r
{\r
match('/'); \r
- // LensQuery.g:155:13: ( options {greedy=false; } : . )*\r
+ // LensQuery.g:152:13: ( options {greedy=false; } : . )*\r
loop14:\r
do {\r
int alt14=2;\r
\r
switch (alt14) {\r
case 1 :\r
- // LensQuery.g:155:38: .\r
+ // LensQuery.g:152:38: .\r
{\r
matchAny(); \r
\r
} while (true);\r
\r
match('/'); \r
- // LensQuery.g:155:46: ( 'a' .. 'z' | 'A' .. 'Z' )*\r
+ // LensQuery.g:152:46: ( 'a' .. 'z' | 'A' .. 'Z' )*\r
loop15:\r
do {\r
int alt15=2;\r
try {\r
int _type = Dot;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:158:4: ( '.' )\r
- // LensQuery.g:158:6: '.'\r
+ // LensQuery.g:155:4: ( '.' )\r
+ // LensQuery.g:155:6: '.'\r
{\r
match('.'); \r
\r
try {\r
int _type = Comma;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:159:6: ( ',' )\r
- // LensQuery.g:159:8: ','\r
+ // LensQuery.g:156:6: ( ',' )\r
+ // LensQuery.g:156:8: ','\r
{\r
match(','); \r
\r
try {\r
int _type = Colon;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:160:6: ( ':' )\r
- // LensQuery.g:160:8: ':'\r
+ // LensQuery.g:157:6: ( ':' )\r
+ // LensQuery.g:157:8: ':'\r
{\r
match(':'); \r
\r
try {\r
int _type = As;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:162:3: ( 'as' )\r
- // LensQuery.g:162:5: 'as'\r
+ // LensQuery.g:159:3: ( 'as' )\r
+ // LensQuery.g:159:5: 'as'\r
{\r
match("as"); \r
\r
try {\r
int _type = LParen;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:164:7: ( '(' )\r
- // LensQuery.g:164:9: '('\r
+ // LensQuery.g:161:7: ( '(' )\r
+ // LensQuery.g:161:9: '('\r
{\r
match('('); \r
\r
try {\r
int _type = RParen;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:165:7: ( ')' )\r
- // LensQuery.g:165:9: ')'\r
+ // LensQuery.g:162:7: ( ')' )\r
+ // LensQuery.g:162:9: ')'\r
{\r
match(')'); \r
\r
try {\r
int _type = Star;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:167:5: ( '*' )\r
- // LensQuery.g:167:7: '*'\r
+ // LensQuery.g:164:5: ( '*' )\r
+ // LensQuery.g:164:7: '*'\r
{\r
match('*'); \r
\r
// $ANTLR start "UnsafeUnicodeChar"\r
public final void mUnsafeUnicodeChar() throws RecognitionException {\r
try {\r
- // LensQuery.g:170:18: ( '(' | ')' | '[' | ']' | '{' | '}' | ',' | ':' | '#' | '<' | '>' | '|' | '*' | '\\'' | '\"' | '@' | '%' | '\\\\' | '.' | '-' )\r
+ // LensQuery.g:167:18: ( '(' | ')' | '[' | ']' | '{' | '}' | ',' | ':' | '#' | '<' | '>' | '|' | '*' | '\\'' | '\"' | '@' | '%' | '\\\\' | '.' | '-' )\r
// LensQuery.g:\r
{\r
if ( (input.LA(1)>='\"' && input.LA(1)<='#')||input.LA(1)=='%'||(input.LA(1)>='\'' && input.LA(1)<='*')||(input.LA(1)>=',' && input.LA(1)<='.')||input.LA(1)==':'||input.LA(1)=='<'||input.LA(1)=='>'||input.LA(1)=='@'||(input.LA(1)>='[' && input.LA(1)<=']')||(input.LA(1)>='{' && input.LA(1)<='}') ) {\r
// $ANTLR start "SafeFirstLetter"\r
public final void mSafeFirstLetter() throws RecognitionException {\r
try {\r
- // LensQuery.g:172:25: ( 'A' .. 'Z' | 'a' .. 'z' )\r
+ // LensQuery.g:169:25: ( 'A' .. 'Z' | 'a' .. 'z' )\r
// LensQuery.g:\r
{\r
if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) {\r
// $ANTLR start "SafeLetter"\r
public final void mSafeLetter() throws RecognitionException {\r
try {\r
- // LensQuery.g:173:20: ( SafeFirstLetter | '0' .. '9' | '-' | '_' )\r
+ // LensQuery.g:170:20: ( SafeFirstLetter | '0' .. '9' | '-' | '_' )\r
// LensQuery.g:\r
{\r
if ( input.LA(1)=='-'||(input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {\r
// $ANTLR start "QNameChar"\r
public final void mQNameChar() throws RecognitionException {\r
try {\r
- // LensQuery.g:176:19: (~ ( LineBreakChar | UnsafeUnicodeChar | WhiteSpace ) )\r
- // LensQuery.g:176:21: ~ ( LineBreakChar | UnsafeUnicodeChar | WhiteSpace )\r
+ // LensQuery.g:173:19: (~ ( LineBreakChar | UnsafeUnicodeChar | WhiteSpace ) )\r
+ // LensQuery.g:173:21: ~ ( LineBreakChar | UnsafeUnicodeChar | WhiteSpace )\r
{\r
if ( (input.LA(1)>='\u0000' && input.LA(1)<='\b')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\u001F')||input.LA(1)=='!'||input.LA(1)=='$'||input.LA(1)=='&'||input.LA(1)=='+'||(input.LA(1)>='/' && input.LA(1)<='9')||input.LA(1)==';'||input.LA(1)=='='||input.LA(1)=='?'||(input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='^' && input.LA(1)<='z')||(input.LA(1)>='~' && input.LA(1)<='\uFFFF') ) {\r
input.consume();\r
try {\r
int _type = QName;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:177:6: ( ( QNameChar )+ ( Dot ( QNameChar )+ )* )\r
- // LensQuery.g:177:8: ( QNameChar )+ ( Dot ( QNameChar )+ )*\r
+ // LensQuery.g:174:6: ( ( QNameChar )+ ( Dot ( QNameChar )+ )* )\r
+ // LensQuery.g:174:8: ( QNameChar )+ ( Dot ( QNameChar )+ )*\r
{\r
- // LensQuery.g:177:8: ( QNameChar )+\r
+ // LensQuery.g:174:8: ( QNameChar )+\r
int cnt16=0;\r
loop16:\r
do {\r
\r
switch (alt16) {\r
case 1 :\r
- // LensQuery.g:177:8: QNameChar\r
+ // LensQuery.g:174:8: QNameChar\r
{\r
mQNameChar(); \r
\r
cnt16++;\r
} while (true);\r
\r
- // LensQuery.g:177:19: ( Dot ( QNameChar )+ )*\r
+ // LensQuery.g:174:19: ( Dot ( QNameChar )+ )*\r
loop18:\r
do {\r
int alt18=2;\r
\r
switch (alt18) {\r
case 1 :\r
- // LensQuery.g:177:20: Dot ( QNameChar )+\r
+ // LensQuery.g:174:20: Dot ( QNameChar )+\r
{\r
mDot(); \r
- // LensQuery.g:177:24: ( QNameChar )+\r
+ // LensQuery.g:174:24: ( QNameChar )+\r
int cnt17=0;\r
loop17:\r
do {\r
\r
switch (alt17) {\r
case 1 :\r
- // LensQuery.g:177:24: QNameChar\r
+ // LensQuery.g:174:24: QNameChar\r
{\r
mQNameChar(); \r
\r
// $ANTLR start "WhiteSpace"\r
public final void mWhiteSpace() throws RecognitionException {\r
try {\r
- // LensQuery.g:181:11: ( ' ' | '\\t' )\r
+ // LensQuery.g:178:11: ( ' ' | '\\t' )\r
// LensQuery.g:\r
{\r
if ( input.LA(1)=='\t'||input.LA(1)==' ' ) {\r
try {\r
int _type = WhiteSpaces;\r
int _channel = DEFAULT_TOKEN_CHANNEL;\r
- // LensQuery.g:183:12: ( ( WhiteSpace )+ )\r
- // LensQuery.g:183:14: ( WhiteSpace )+\r
+ // LensQuery.g:180:12: ( ( WhiteSpace )+ )\r
+ // LensQuery.g:180:14: ( WhiteSpace )+\r
{\r
- // LensQuery.g:183:14: ( WhiteSpace )+\r
+ // LensQuery.g:180:14: ( WhiteSpace )+\r
int cnt19=0;\r
loop19:\r
do {\r
\r
switch (alt19) {\r
case 1 :\r
- // LensQuery.g:183:14: WhiteSpace\r
+ // LensQuery.g:180:14: WhiteSpace\r
{\r
mWhiteSpace(); \r
\r
-// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 LensQuery.g 2009-09-30 22:59:27\r
+// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 LensQuery.g 2009-10-13 14:02:52\r
\r
/*--------------------------------------------------------------------------\r
* Copyright 2009 Taro L. Saito\r
//--------------------------------------\r
package org.xerial.lens.relation.query.impl;\r
\r
-import org.xerial.lens.relation.TupleIndex;\r
\r
\r
import org.antlr.runtime.*;\r
\r
public class LensQueryParser extends Parser {\r
public static final String[] tokenNames = new String[] {\r
- "<invalid>", "<EOR>", "<DOWN>", "<UP>", "QUERY", "RELATION", "COMPARE", "OPERATOR", "OPERAND", "PATTERNMATCH", "NODE", "ALIAS", "NODEVALUE", "NAME", "VALUE", "INDEX", "LineBreakChar", "LineComment", "LineBreak", "Digit", "Letter", "HexDigit", "UnicodeChar", "EscapeSequence", "StringChar", "StringChar_s", "String", "Integer", "Frac", "Exp", "Double", "True", "False", "Null", "Lt", "Gt", "Leq", "Geq", "Eq", "Neq", "Match", "Regex", "Dot", "Comma", "Colon", "As", "LParen", "RParen", "Star", "UnsafeUnicodeChar", "SafeFirstLetter", "SafeLetter", "WhiteSpace", "QNameChar", "QName", "WhiteSpaces"\r
+ "<invalid>", "<EOR>", "<DOWN>", "<UP>", "QUERY", "RELATION", "COMPARE", "OPERATOR", "OPERAND", "PATTERNMATCH", "NODE", "ALIAS", "NODEVALUE", "NAME", "VALUE", "LineBreakChar", "LineComment", "LineBreak", "Digit", "Letter", "HexDigit", "UnicodeChar", "EscapeSequence", "StringChar", "StringChar_s", "String", "Integer", "Frac", "Exp", "Double", "True", "False", "Null", "Lt", "Gt", "Leq", "Geq", "Eq", "Neq", "Match", "Regex", "Dot", "Comma", "Colon", "As", "LParen", "RParen", "Star", "UnsafeUnicodeChar", "SafeFirstLetter", "SafeLetter", "WhiteSpace", "QNameChar", "QName", "WhiteSpaces"\r
};\r
- public static final int INDEX=15;\r
public static final int PATTERNMATCH=9;\r
- public static final int Match=40;\r
- public static final int Regex=41;\r
- public static final int Digit=19;\r
- public static final int Frac=28;\r
- public static final int HexDigit=21;\r
+ public static final int Match=39;\r
+ public static final int Regex=40;\r
+ public static final int Digit=18;\r
+ public static final int Frac=27;\r
+ public static final int HexDigit=20;\r
public static final int QUERY=4;\r
public static final int ALIAS=11;\r
public static final int VALUE=14;\r
- public static final int Letter=20;\r
- public static final int Comma=43;\r
- public static final int Dot=42;\r
- public static final int EscapeSequence=23;\r
- public static final int Integer=27;\r
- public static final int WhiteSpace=52;\r
+ public static final int Letter=19;\r
+ public static final int Comma=42;\r
+ public static final int Dot=41;\r
+ public static final int EscapeSequence=22;\r
+ public static final int Integer=26;\r
+ public static final int WhiteSpace=51;\r
public static final int OPERATOR=7;\r
- public static final int False=32;\r
- public static final int Colon=44;\r
- public static final int LineComment=17;\r
+ public static final int False=31;\r
+ public static final int LineComment=16;\r
+ public static final int Colon=43;\r
public static final int NODEVALUE=12;\r
- public static final int As=45;\r
- public static final int SafeFirstLetter=50;\r
- public static final int Null=33;\r
- public static final int Star=48;\r
- public static final int Eq=38;\r
- public static final int Exp=29;\r
- public static final int QNameChar=53;\r
+ public static final int As=44;\r
+ public static final int SafeFirstLetter=49;\r
+ public static final int Null=32;\r
+ public static final int Star=47;\r
+ public static final int Eq=37;\r
+ public static final int Exp=28;\r
+ public static final int QNameChar=52;\r
public static final int RELATION=5;\r
- public static final int Gt=35;\r
- public static final int RParen=47;\r
- public static final int UnicodeChar=22;\r
- public static final int StringChar=24;\r
- public static final int True=31;\r
+ public static final int Gt=34;\r
+ public static final int RParen=46;\r
+ public static final int UnicodeChar=21;\r
+ public static final int StringChar=23;\r
+ public static final int True=30;\r
public static final int OPERAND=8;\r
- public static final int LineBreak=18;\r
- public static final int LParen=46;\r
- public static final int String=26;\r
- public static final int SafeLetter=51;\r
- public static final int LineBreakChar=16;\r
+ public static final int LineBreak=17;\r
+ public static final int LParen=45;\r
+ public static final int String=25;\r
+ public static final int SafeLetter=50;\r
+ public static final int LineBreakChar=15;\r
public static final int COMPARE=6;\r
- public static final int QName=54;\r
+ public static final int QName=53;\r
public static final int EOF=-1;\r
- public static final int Geq=37;\r
+ public static final int Geq=36;\r
public static final int NODE=10;\r
- public static final int StringChar_s=25;\r
- public static final int Neq=39;\r
- public static final int UnsafeUnicodeChar=49;\r
- public static final int Double=30;\r
- public static final int Lt=34;\r
+ public static final int StringChar_s=24;\r
+ public static final int Neq=38;\r
+ public static final int UnsafeUnicodeChar=48;\r
+ public static final int Double=29;\r
+ public static final int Lt=33;\r
public static final int NAME=13;\r
- public static final int Leq=36;\r
- public static final int WhiteSpaces=55;\r
+ public static final int Leq=35;\r
+ public static final int WhiteSpaces=54;\r
\r
// delegates\r
// delegators\r
public String getGrammarFileName() { return "LensQuery.g"; }\r
\r
\r
- private TupleIndex currentIndex = null;\r
\r
\r
public static class expr_return extends ParserRuleReturnScope {\r
};\r
\r
// $ANTLR start "expr"\r
- // LensQuery.g:188:1: expr : relation ;\r
+ // LensQuery.g:185:1: expr : relation ;\r
public final LensQueryParser.expr_return expr() throws RecognitionException {\r
LensQueryParser.expr_return retval = new LensQueryParser.expr_return();\r
retval.start = input.LT(1);\r
\r
\r
try {\r
- // LensQuery.g:188:5: ( relation )\r
- // LensQuery.g:189:3: relation\r
+ // LensQuery.g:185:5: ( relation )\r
+ // LensQuery.g:186:3: relation\r
{\r
root_0 = (Object)adaptor.nil();\r
\r
- pushFollow(FOLLOW_relation_in_expr779);\r
+ pushFollow(FOLLOW_relation_in_expr774);\r
relation1=relation();\r
\r
state._fsp--;\r
}\r
// $ANTLR end "expr"\r
\r
- protected static class relation_scope {\r
- int nodeItemIndex;\r
- TupleIndex relationIndex;\r
- }\r
- protected Stack relation_stack = new Stack();\r
-\r
public static class relation_return extends ParserRuleReturnScope {\r
Object tree;\r
public Object getTree() { return tree; }\r
};\r
\r
// $ANTLR start "relation"\r
- // LensQuery.g:192:1: relation : relation_i -> ^( RELATION relation_i INDEX[currentIndex.toString()] ) ;\r
+ // LensQuery.g:189:1: relation : relation_i -> ^( RELATION relation_i ) ;\r
public final LensQueryParser.relation_return relation() throws RecognitionException {\r
- relation_stack.push(new relation_scope());\r
LensQueryParser.relation_return retval = new LensQueryParser.relation_return();\r
retval.start = input.LT(1);\r
\r
\r
\r
RewriteRuleSubtreeStream stream_relation_i=new RewriteRuleSubtreeStream(adaptor,"rule relation_i");\r
-\r
- ((relation_scope)relation_stack.peek()).nodeItemIndex = 1;\r
- if(currentIndex == null)\r
- currentIndex = new TupleIndex(1);\r
- else\r
- currentIndex = new TupleIndex(currentIndex, 1); \r
-\r
try {\r
- // LensQuery.g:210:4: ( relation_i -> ^( RELATION relation_i INDEX[currentIndex.toString()] ) )\r
- // LensQuery.g:210:6: relation_i\r
+ // LensQuery.g:190:4: ( relation_i -> ^( RELATION relation_i ) )\r
+ // LensQuery.g:190:6: relation_i\r
{\r
- pushFollow(FOLLOW_relation_i_in_relation813);\r
+ pushFollow(FOLLOW_relation_i_in_relation792);\r
relation_i2=relation_i();\r
\r
state._fsp--;\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 210:17: -> ^( RELATION relation_i INDEX[currentIndex.toString()] )\r
+ // 190:17: -> ^( RELATION relation_i )\r
{\r
- // LensQuery.g:210:20: ^( RELATION relation_i INDEX[currentIndex.toString()] )\r
+ // LensQuery.g:190:20: ^( RELATION relation_i )\r
{\r
Object root_1 = (Object)adaptor.nil();\r
root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(RELATION, "RELATION"), root_1);\r
\r
adaptor.addChild(root_1, stream_relation_i.nextTree());\r
- adaptor.addChild(root_1, (Object)adaptor.create(INDEX, currentIndex.toString()));\r
\r
adaptor.addChild(root_0, root_1);\r
}\r
retval.tree = (Object)adaptor.rulePostProcessing(root_0);\r
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);\r
\r
-\r
- currentIndex = currentIndex.parent();\r
-\r
}\r
catch (RecognitionException re) {\r
reportError(re);\r
\r
}\r
finally {\r
- relation_stack.pop();\r
}\r
return retval;\r
}\r
};\r
\r
// $ANTLR start "relation_i"\r
- // LensQuery.g:213:1: relation_i : nodeName ( alias )? LParen nodeItem ( Comma nodeItem )* RParen ;\r
+ // LensQuery.g:193:1: relation_i : nodeName ( alias )? LParen nodeItem ( Comma nodeItem )* RParen ;\r
public final LensQueryParser.relation_i_return relation_i() throws RecognitionException {\r
LensQueryParser.relation_i_return retval = new LensQueryParser.relation_i_return();\r
retval.start = input.LT(1);\r
Object RParen9_tree=null;\r
\r
try {\r
- // LensQuery.g:213:11: ( nodeName ( alias )? LParen nodeItem ( Comma nodeItem )* RParen )\r
- // LensQuery.g:213:13: nodeName ( alias )? LParen nodeItem ( Comma nodeItem )* RParen\r
+ // LensQuery.g:193:11: ( nodeName ( alias )? LParen nodeItem ( Comma nodeItem )* RParen )\r
+ // LensQuery.g:193:13: nodeName ( alias )? LParen nodeItem ( Comma nodeItem )* RParen\r
{\r
root_0 = (Object)adaptor.nil();\r
\r
- pushFollow(FOLLOW_nodeName_in_relation_i832);\r
+ pushFollow(FOLLOW_nodeName_in_relation_i808);\r
nodeName3=nodeName();\r
\r
state._fsp--;\r
\r
adaptor.addChild(root_0, nodeName3.getTree());\r
- // LensQuery.g:213:22: ( alias )?\r
+ // LensQuery.g:193:22: ( alias )?\r
int alt1=2;\r
int LA1_0 = input.LA(1);\r
\r
}\r
switch (alt1) {\r
case 1 :\r
- // LensQuery.g:213:22: alias\r
+ // LensQuery.g:193:22: alias\r
{\r
- pushFollow(FOLLOW_alias_in_relation_i834);\r
+ pushFollow(FOLLOW_alias_in_relation_i810);\r
alias4=alias();\r
\r
state._fsp--;\r
\r
}\r
\r
- LParen5=(Token)match(input,LParen,FOLLOW_LParen_in_relation_i837); \r
- pushFollow(FOLLOW_nodeItem_in_relation_i840);\r
+ LParen5=(Token)match(input,LParen,FOLLOW_LParen_in_relation_i813); \r
+ pushFollow(FOLLOW_nodeItem_in_relation_i816);\r
nodeItem6=nodeItem();\r
\r
state._fsp--;\r
\r
adaptor.addChild(root_0, nodeItem6.getTree());\r
- // LensQuery.g:213:46: ( Comma nodeItem )*\r
+ // LensQuery.g:193:46: ( Comma nodeItem )*\r
loop2:\r
do {\r
int alt2=2;\r
\r
switch (alt2) {\r
case 1 :\r
- // LensQuery.g:213:47: Comma nodeItem\r
+ // LensQuery.g:193:47: Comma nodeItem\r
{\r
- Comma7=(Token)match(input,Comma,FOLLOW_Comma_in_relation_i843); \r
- pushFollow(FOLLOW_nodeItem_in_relation_i846);\r
+ Comma7=(Token)match(input,Comma,FOLLOW_Comma_in_relation_i819); \r
+ pushFollow(FOLLOW_nodeItem_in_relation_i822);\r
nodeItem8=nodeItem();\r
\r
state._fsp--;\r
}\r
} while (true);\r
\r
- RParen9=(Token)match(input,RParen,FOLLOW_RParen_in_relation_i850); \r
+ RParen9=(Token)match(input,RParen,FOLLOW_RParen_in_relation_i826); \r
\r
}\r
\r
};\r
\r
// $ANTLR start "nodeName"\r
- // LensQuery.g:216:1: fragment nodeName : ( QName -> NAME[$QName.text] | String -> NAME[$String.text] );\r
+ // LensQuery.g:196:1: fragment nodeName : ( QName -> NAME[$QName.text] | String -> NAME[$String.text] );\r
public final LensQueryParser.nodeName_return nodeName() throws RecognitionException {\r
LensQueryParser.nodeName_return retval = new LensQueryParser.nodeName_return();\r
retval.start = input.LT(1);\r
RewriteRuleTokenStream stream_QName=new RewriteRuleTokenStream(adaptor,"token QName");\r
\r
try {\r
- // LensQuery.g:218:3: ( QName -> NAME[$QName.text] | String -> NAME[$String.text] )\r
+ // LensQuery.g:198:3: ( QName -> NAME[$QName.text] | String -> NAME[$String.text] )\r
int alt3=2;\r
int LA3_0 = input.LA(1);\r
\r
}\r
switch (alt3) {\r
case 1 :\r
- // LensQuery.g:218:5: QName\r
+ // LensQuery.g:198:5: QName\r
{\r
- QName10=(Token)match(input,QName,FOLLOW_QName_in_nodeName864); \r
+ QName10=(Token)match(input,QName,FOLLOW_QName_in_nodeName840); \r
stream_QName.add(QName10);\r
\r
\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 218:11: -> NAME[$QName.text]\r
+ // 198:11: -> NAME[$QName.text]\r
{\r
adaptor.addChild(root_0, (Object)adaptor.create(NAME, (QName10!=null?QName10.getText():null)));\r
\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:219:5: String\r
+ // LensQuery.g:199:5: String\r
{\r
- String11=(Token)match(input,String,FOLLOW_String_in_nodeName875); \r
+ String11=(Token)match(input,String,FOLLOW_String_in_nodeName851); \r
stream_String.add(String11);\r
\r
\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 219:12: -> NAME[$String.text]\r
+ // 199:12: -> NAME[$String.text]\r
{\r
adaptor.addChild(root_0, (Object)adaptor.create(NAME, (String11!=null?String11.getText():null)));\r
\r
};\r
\r
// $ANTLR start "alias"\r
- // LensQuery.g:222:1: fragment alias : As QName -> ALIAS[$QName.text] ;\r
+ // LensQuery.g:202:1: fragment alias : As QName -> ALIAS[$QName.text] ;\r
public final LensQueryParser.alias_return alias() throws RecognitionException {\r
LensQueryParser.alias_return retval = new LensQueryParser.alias_return();\r
retval.start = input.LT(1);\r
RewriteRuleTokenStream stream_QName=new RewriteRuleTokenStream(adaptor,"token QName");\r
\r
try {\r
- // LensQuery.g:223:6: ( As QName -> ALIAS[$QName.text] )\r
- // LensQuery.g:223:8: As QName\r
+ // LensQuery.g:203:6: ( As QName -> ALIAS[$QName.text] )\r
+ // LensQuery.g:203:8: As QName\r
{\r
- As12=(Token)match(input,As,FOLLOW_As_in_alias892); \r
+ As12=(Token)match(input,As,FOLLOW_As_in_alias868); \r
stream_As.add(As12);\r
\r
- QName13=(Token)match(input,QName,FOLLOW_QName_in_alias894); \r
+ QName13=(Token)match(input,QName,FOLLOW_QName_in_alias870); \r
stream_QName.add(QName13);\r
\r
\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 223:17: -> ALIAS[$QName.text]\r
+ // 203:17: -> ALIAS[$QName.text]\r
{\r
adaptor.addChild(root_0, (Object)adaptor.create(ALIAS, (QName13!=null?QName13.getText():null)));\r
\r
};\r
\r
// $ANTLR start "nodeItem"\r
- // LensQuery.g:226:1: fragment nodeItem : ( nodeName ( alias )? ( nodeValue )? -> ^( NODE nodeName ( alias )? ( nodeValue )? INDEX[new TupleIndex(currentIndex, index).toString()] ) | relation );\r
+ // LensQuery.g:206:1: fragment nodeItem : ( nodeName ( alias )? ( nodeValue )? -> ^( NODE nodeName ( alias )? ( nodeValue )? ) | relation );\r
public final LensQueryParser.nodeItem_return nodeItem() throws RecognitionException {\r
LensQueryParser.nodeItem_return retval = new LensQueryParser.nodeItem_return();\r
retval.start = input.LT(1);\r
RewriteRuleSubtreeStream stream_nodeName=new RewriteRuleSubtreeStream(adaptor,"rule nodeName");\r
RewriteRuleSubtreeStream stream_nodeValue=new RewriteRuleSubtreeStream(adaptor,"rule nodeValue");\r
RewriteRuleSubtreeStream stream_alias=new RewriteRuleSubtreeStream(adaptor,"rule alias");\r
-\r
- int index = ((relation_scope)relation_stack.peek()).nodeItemIndex++;\r
-\r
try {\r
- // LensQuery.g:231:3: ( nodeName ( alias )? ( nodeValue )? -> ^( NODE nodeName ( alias )? ( nodeValue )? INDEX[new TupleIndex(currentIndex, index).toString()] ) | relation )\r
+ // LensQuery.g:208:3: ( nodeName ( alias )? ( nodeValue )? -> ^( NODE nodeName ( alias )? ( nodeValue )? ) | relation )\r
int alt6=2;\r
int LA6_0 = input.LA(1);\r
\r
}\r
switch (alt6) {\r
case 1 :\r
- // LensQuery.g:231:5: nodeName ( alias )? ( nodeValue )?\r
+ // LensQuery.g:208:5: nodeName ( alias )? ( nodeValue )?\r
{\r
- pushFollow(FOLLOW_nodeName_in_nodeItem919);\r
+ pushFollow(FOLLOW_nodeName_in_nodeItem890);\r
nodeName14=nodeName();\r
\r
state._fsp--;\r
\r
stream_nodeName.add(nodeName14.getTree());\r
- // LensQuery.g:231:14: ( alias )?\r
+ // LensQuery.g:208:14: ( alias )?\r
int alt4=2;\r
int LA4_0 = input.LA(1);\r
\r
}\r
switch (alt4) {\r
case 1 :\r
- // LensQuery.g:231:14: alias\r
+ // LensQuery.g:208:14: alias\r
{\r
- pushFollow(FOLLOW_alias_in_nodeItem921);\r
+ pushFollow(FOLLOW_alias_in_nodeItem892);\r
alias15=alias();\r
\r
state._fsp--;\r
\r
}\r
\r
- // LensQuery.g:231:21: ( nodeValue )?\r
+ // LensQuery.g:208:21: ( nodeValue )?\r
int alt5=2;\r
int LA5_0 = input.LA(1);\r
\r
}\r
switch (alt5) {\r
case 1 :\r
- // LensQuery.g:231:21: nodeValue\r
+ // LensQuery.g:208:21: nodeValue\r
{\r
- pushFollow(FOLLOW_nodeValue_in_nodeItem924);\r
+ pushFollow(FOLLOW_nodeValue_in_nodeItem895);\r
nodeValue16=nodeValue();\r
\r
state._fsp--;\r
\r
\r
// AST REWRITE\r
- // elements: alias, nodeName, nodeValue\r
+ // elements: nodeName, alias, nodeValue\r
// token labels: \r
// rule labels: retval\r
// token list labels: \r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 232:5: -> ^( NODE nodeName ( alias )? ( nodeValue )? INDEX[new TupleIndex(currentIndex, index).toString()] )\r
+ // 209:5: -> ^( NODE nodeName ( alias )? ( nodeValue )? )\r
{\r
- // LensQuery.g:232:8: ^( NODE nodeName ( alias )? ( nodeValue )? INDEX[new TupleIndex(currentIndex, index).toString()] )\r
+ // LensQuery.g:209:8: ^( NODE nodeName ( alias )? ( nodeValue )? )\r
{\r
Object root_1 = (Object)adaptor.nil();\r
root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NODE, "NODE"), root_1);\r
\r
adaptor.addChild(root_1, stream_nodeName.nextTree());\r
- // LensQuery.g:232:24: ( alias )?\r
+ // LensQuery.g:209:24: ( alias )?\r
if ( stream_alias.hasNext() ) {\r
adaptor.addChild(root_1, stream_alias.nextTree());\r
\r
}\r
stream_alias.reset();\r
- // LensQuery.g:232:31: ( nodeValue )?\r
+ // LensQuery.g:209:31: ( nodeValue )?\r
if ( stream_nodeValue.hasNext() ) {\r
adaptor.addChild(root_1, stream_nodeValue.nextTree());\r
\r
}\r
stream_nodeValue.reset();\r
- adaptor.addChild(root_1, (Object)adaptor.create(INDEX, new TupleIndex(currentIndex, index).toString()));\r
\r
adaptor.addChild(root_0, root_1);\r
}\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:233:5: relation\r
+ // LensQuery.g:210:5: relation\r
{\r
root_0 = (Object)adaptor.nil();\r
\r
- pushFollow(FOLLOW_relation_in_nodeItem953);\r
+ pushFollow(FOLLOW_relation_in_nodeItem921);\r
relation17=relation();\r
\r
state._fsp--;\r
};\r
\r
// $ANTLR start "value"\r
- // LensQuery.g:236:1: fragment value : ( String | Integer | Double | QName );\r
+ // LensQuery.g:213:1: fragment value : ( String | Integer | Double | QName );\r
public final LensQueryParser.value_return value() throws RecognitionException {\r
LensQueryParser.value_return retval = new LensQueryParser.value_return();\r
retval.start = input.LT(1);\r
Object set18_tree=null;\r
\r
try {\r
- // LensQuery.g:238:3: ( String | Integer | Double | QName )\r
+ // LensQuery.g:215:3: ( String | Integer | Double | QName )\r
// LensQuery.g:\r
{\r
root_0 = (Object)adaptor.nil();\r
};\r
\r
// $ANTLR start "nodeValue"\r
- // LensQuery.g:241:1: fragment nodeValue : ( Colon value -> NODEVALUE[$value.text] | nodeCmp );\r
+ // LensQuery.g:218:1: fragment nodeValue : ( Colon value -> NODEVALUE[$value.text] | nodeCmp );\r
public final LensQueryParser.nodeValue_return nodeValue() throws RecognitionException {\r
LensQueryParser.nodeValue_return retval = new LensQueryParser.nodeValue_return();\r
retval.start = input.LT(1);\r
RewriteRuleTokenStream stream_Colon=new RewriteRuleTokenStream(adaptor,"token Colon");\r
RewriteRuleSubtreeStream stream_value=new RewriteRuleSubtreeStream(adaptor,"rule value");\r
try {\r
- // LensQuery.g:243:3: ( Colon value -> NODEVALUE[$value.text] | nodeCmp )\r
+ // LensQuery.g:220:3: ( Colon value -> NODEVALUE[$value.text] | nodeCmp )\r
int alt7=2;\r
int LA7_0 = input.LA(1);\r
\r
}\r
switch (alt7) {\r
case 1 :\r
- // LensQuery.g:243:5: Colon value\r
+ // LensQuery.g:220:5: Colon value\r
{\r
- Colon19=(Token)match(input,Colon,FOLLOW_Colon_in_nodeValue1002); \r
+ Colon19=(Token)match(input,Colon,FOLLOW_Colon_in_nodeValue970); \r
stream_Colon.add(Colon19);\r
\r
- pushFollow(FOLLOW_value_in_nodeValue1004);\r
+ pushFollow(FOLLOW_value_in_nodeValue972);\r
value20=value();\r
\r
state._fsp--;\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 243:17: -> NODEVALUE[$value.text]\r
+ // 220:17: -> NODEVALUE[$value.text]\r
{\r
adaptor.addChild(root_0, (Object)adaptor.create(NODEVALUE, (value20!=null?input.toString(value20.start,value20.stop):null)));\r
\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:244:5: nodeCmp\r
+ // LensQuery.g:221:5: nodeCmp\r
{\r
root_0 = (Object)adaptor.nil();\r
\r
- pushFollow(FOLLOW_nodeCmp_in_nodeValue1015);\r
+ pushFollow(FOLLOW_nodeCmp_in_nodeValue983);\r
nodeCmp21=nodeCmp();\r
\r
state._fsp--;\r
};\r
\r
// $ANTLR start "nodeCmp"\r
- // LensQuery.g:247:1: fragment nodeCmp : ( cmpOp value -> ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] ) | Match Regex -> ^( PATTERNMATCH OPERAND[$Regex.text] ) );\r
+ // LensQuery.g:224:1: fragment nodeCmp : ( cmpOp value -> ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] ) | Match Regex -> ^( PATTERNMATCH OPERAND[$Regex.text] ) );\r
public final LensQueryParser.nodeCmp_return nodeCmp() throws RecognitionException {\r
LensQueryParser.nodeCmp_return retval = new LensQueryParser.nodeCmp_return();\r
retval.start = input.LT(1);\r
RewriteRuleSubtreeStream stream_value=new RewriteRuleSubtreeStream(adaptor,"rule value");\r
RewriteRuleSubtreeStream stream_cmpOp=new RewriteRuleSubtreeStream(adaptor,"rule cmpOp");\r
try {\r
- // LensQuery.g:249:3: ( cmpOp value -> ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] ) | Match Regex -> ^( PATTERNMATCH OPERAND[$Regex.text] ) )\r
+ // LensQuery.g:226:3: ( cmpOp value -> ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] ) | Match Regex -> ^( PATTERNMATCH OPERAND[$Regex.text] ) )\r
int alt8=2;\r
int LA8_0 = input.LA(1);\r
\r
}\r
switch (alt8) {\r
case 1 :\r
- // LensQuery.g:249:5: cmpOp value\r
+ // LensQuery.g:226:5: cmpOp value\r
{\r
- pushFollow(FOLLOW_cmpOp_in_nodeCmp1035);\r
+ pushFollow(FOLLOW_cmpOp_in_nodeCmp1003);\r
cmpOp22=cmpOp();\r
\r
state._fsp--;\r
\r
stream_cmpOp.add(cmpOp22.getTree());\r
- pushFollow(FOLLOW_value_in_nodeCmp1037);\r
+ pushFollow(FOLLOW_value_in_nodeCmp1005);\r
value23=value();\r
\r
state._fsp--;\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 249:17: -> ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] )\r
+ // 226:17: -> ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] )\r
{\r
- // LensQuery.g:249:20: ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] )\r
+ // LensQuery.g:226:20: ^( COMPARE OPERATOR[$cmpOp.text] OPERAND[$value.text] )\r
{\r
Object root_1 = (Object)adaptor.nil();\r
root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COMPARE, "COMPARE"), root_1);\r
}\r
break;\r
case 2 :\r
- // LensQuery.g:250:5: Match Regex\r
+ // LensQuery.g:227:5: Match Regex\r
{\r
- Match24=(Token)match(input,Match,FOLLOW_Match_in_nodeCmp1055); \r
+ Match24=(Token)match(input,Match,FOLLOW_Match_in_nodeCmp1023); \r
stream_Match.add(Match24);\r
\r
- Regex25=(Token)match(input,Regex,FOLLOW_Regex_in_nodeCmp1057); \r
+ Regex25=(Token)match(input,Regex,FOLLOW_Regex_in_nodeCmp1025); \r
stream_Regex.add(Regex25);\r
\r
\r
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);\r
\r
root_0 = (Object)adaptor.nil();\r
- // 250:17: -> ^( PATTERNMATCH OPERAND[$Regex.text] )\r
+ // 227:17: -> ^( PATTERNMATCH OPERAND[$Regex.text] )\r
{\r
- // LensQuery.g:250:20: ^( PATTERNMATCH OPERAND[$Regex.text] )\r
+ // LensQuery.g:227:20: ^( PATTERNMATCH OPERAND[$Regex.text] )\r
{\r
Object root_1 = (Object)adaptor.nil();\r
root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PATTERNMATCH, "PATTERNMATCH"), root_1);\r
};\r
\r
// $ANTLR start "cmpOp"\r
- // LensQuery.g:253:1: fragment cmpOp : ( Lt | Gt | Eq | Leq | Geq | Neq ) ;\r
+ // LensQuery.g:230:1: fragment cmpOp : ( Lt | Gt | Eq | Leq | Geq | Neq ) ;\r
public final LensQueryParser.cmpOp_return cmpOp() throws RecognitionException {\r
LensQueryParser.cmpOp_return retval = new LensQueryParser.cmpOp_return();\r
retval.start = input.LT(1);\r
Object set26_tree=null;\r
\r
try {\r
- // LensQuery.g:254:6: ( ( Lt | Gt | Eq | Leq | Geq | Neq ) )\r
- // LensQuery.g:254:8: ( Lt | Gt | Eq | Leq | Geq | Neq )\r
+ // LensQuery.g:231:6: ( ( Lt | Gt | Eq | Leq | Geq | Neq ) )\r
+ // LensQuery.g:231:8: ( Lt | Gt | Eq | Leq | Geq | Neq )\r
{\r
root_0 = (Object)adaptor.nil();\r
\r
\r
\r
\r
- public static final BitSet FOLLOW_relation_in_expr779 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_relation_i_in_relation813 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_nodeName_in_relation_i832 = new BitSet(new long[]{0x0000600000000000L});\r
- public static final BitSet FOLLOW_alias_in_relation_i834 = new BitSet(new long[]{0x0000400000000000L});\r
- public static final BitSet FOLLOW_LParen_in_relation_i837 = new BitSet(new long[]{0x0040000004000000L});\r
- public static final BitSet FOLLOW_nodeItem_in_relation_i840 = new BitSet(new long[]{0x0000880000000000L});\r
- public static final BitSet FOLLOW_Comma_in_relation_i843 = new BitSet(new long[]{0x0040000004000000L});\r
- public static final BitSet FOLLOW_nodeItem_in_relation_i846 = new BitSet(new long[]{0x0000880000000000L});\r
- public static final BitSet FOLLOW_RParen_in_relation_i850 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_QName_in_nodeName864 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_String_in_nodeName875 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_As_in_alias892 = new BitSet(new long[]{0x0040000000000000L});\r
- public static final BitSet FOLLOW_QName_in_alias894 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_nodeName_in_nodeItem919 = new BitSet(new long[]{0x000031FC00000002L});\r
- public static final BitSet FOLLOW_alias_in_nodeItem921 = new BitSet(new long[]{0x000011FC00000002L});\r
- public static final BitSet FOLLOW_nodeValue_in_nodeItem924 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_relation_in_nodeItem953 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_relation_in_expr774 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_relation_i_in_relation792 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_nodeName_in_relation_i808 = new BitSet(new long[]{0x0000300000000000L});\r
+ public static final BitSet FOLLOW_alias_in_relation_i810 = new BitSet(new long[]{0x0000200000000000L});\r
+ public static final BitSet FOLLOW_LParen_in_relation_i813 = new BitSet(new long[]{0x0020000002000000L});\r
+ public static final BitSet FOLLOW_nodeItem_in_relation_i816 = new BitSet(new long[]{0x0000440000000000L});\r
+ public static final BitSet FOLLOW_Comma_in_relation_i819 = new BitSet(new long[]{0x0020000002000000L});\r
+ public static final BitSet FOLLOW_nodeItem_in_relation_i822 = new BitSet(new long[]{0x0000440000000000L});\r
+ public static final BitSet FOLLOW_RParen_in_relation_i826 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_QName_in_nodeName840 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_String_in_nodeName851 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_As_in_alias868 = new BitSet(new long[]{0x0020000000000000L});\r
+ public static final BitSet FOLLOW_QName_in_alias870 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_nodeName_in_nodeItem890 = new BitSet(new long[]{0x000018FE00000002L});\r
+ public static final BitSet FOLLOW_alias_in_nodeItem892 = new BitSet(new long[]{0x000008FE00000002L});\r
+ public static final BitSet FOLLOW_nodeValue_in_nodeItem895 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_relation_in_nodeItem921 = new BitSet(new long[]{0x0000000000000002L});\r
public static final BitSet FOLLOW_set_in_value0 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_Colon_in_nodeValue1002 = new BitSet(new long[]{0x004000004C000000L});\r
- public static final BitSet FOLLOW_value_in_nodeValue1004 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_nodeCmp_in_nodeValue1015 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_cmpOp_in_nodeCmp1035 = new BitSet(new long[]{0x004000004C000000L});\r
- public static final BitSet FOLLOW_value_in_nodeCmp1037 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_Match_in_nodeCmp1055 = new BitSet(new long[]{0x0000020000000000L});\r
- public static final BitSet FOLLOW_Regex_in_nodeCmp1057 = new BitSet(new long[]{0x0000000000000002L});\r
- public static final BitSet FOLLOW_set_in_cmpOp1082 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_Colon_in_nodeValue970 = new BitSet(new long[]{0x0020000026000000L});\r
+ public static final BitSet FOLLOW_value_in_nodeValue972 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_nodeCmp_in_nodeValue983 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_cmpOp_in_nodeCmp1003 = new BitSet(new long[]{0x0020000026000000L});\r
+ public static final BitSet FOLLOW_value_in_nodeCmp1005 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_Match_in_nodeCmp1023 = new BitSet(new long[]{0x0000010000000000L});\r
+ public static final BitSet FOLLOW_Regex_in_nodeCmp1025 = new BitSet(new long[]{0x0000000000000002L});\r
+ public static final BitSet FOLLOW_set_in_cmpOp1050 = new BitSet(new long[]{0x0000000000000002L});\r
\r
}
\ No newline at end of file
import org.xerial.core.XerialErrorCode;\r
import org.xerial.core.XerialException;\r
import org.xerial.lens.Lens;\r
-import org.xerial.lens.relation.TupleElement;\r
import org.xerial.lens.relation.Tuple;\r
+import org.xerial.lens.relation.TupleElement;\r
import org.xerial.lens.relation.query.QuerySet;\r
import org.xerial.lens.relation.query.QuerySet.QuerySetBuilder;\r
import org.xerial.lens.relation.query.impl.LensQueryLexer;\r
try {\r
LensQueryParser.relation_return ret = p.relation();\r
if (_logger.isDebugEnabled())\r
- _logger.debug("\n"\r
- + ANTLRUtil.parseTree((Tree) ret.getTree(), LensQueryParser.tokenNames));\r
+ _logger\r
+ .debug(ANTLRUtil\r
+ .parseTree((Tree) ret.getTree(), LensQueryParser.tokenNames));\r
\r
RelationQuery r = Lens.loadANTLRParseTree(RelationQuery.class, (Tree) ret.getTree(),\r
LensQueryParser.tokenNames);\r
return this;
}
- private String escapeDataLine(String dataLine) {
+ public SilkWriter text(String text) {
+ usabilityCheck();
+
+ attributeParenCloseCheck(true);
+
+ if (formatConfig.indentBeforeDataLine)
+ printIndent();
+
+ String line[] = text.split("\r?\n");
+ if (line == null)
+ return this;
+
+ for (String each : line) {
+ out.print(escapeDataLine(each));
+ }
+
+ return this;
+ }
+
+ public static String escapeText(String text) {
+ String[] line = text.split("\r?\n");
+ if (line == null)
+ return escapeDataLine(text);
+
+ List<String> buf = new ArrayList<String>();
+ for (String each : line) {
+ buf.add(escapeDataLine(each));
+ }
+ return StringUtil.join(buf, StringUtil.NEW_LINE);
+ }
+
+ private static Pattern leadingHyphen = Pattern.compile("\\s*-");
+
+ private static String escapeDataLine(String dataLine) {
+
+ if (dataLine == null)
+ return dataLine;
- if (dataLine.startsWith("-")) {
+ Matcher m = leadingHyphen.matcher(dataLine);
+ if (m.lookingAt()) {
+ int hyphenPos = m.end();
StringBuilder buf = new StringBuilder();
+ buf.append(dataLine.substring(0, hyphenPos - 1));
buf.append("\\");
- buf.append(dataLine);
+ buf.append(dataLine.substring(hyphenPos - 1));
return buf.toString();
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import org.xerial.util.FileResource;
import org.xerial.util.log.LogLevel;
import org.xerial.util.log.Logger;
+import org.xerial.util.log.SimpleLogWriter;
import org.xerial.util.opt.Argument;
import org.xerial.util.opt.Option;
import org.xerial.util.opt.OptionParser;
* @author leo
*
*/
-public class SilkMain
-{
+public class SilkMain {
private static Logger _logger = Logger.getLogger(SilkMain.class);
- public static class SilkGlobalOption
- {
+ public static class SilkGlobalOption {
@Option(symbol = "h", longName = "help", description = "display help message")
boolean displayHelp = false;
static Set<Class<SilkCommand>> availableCommands = new HashSet<Class<SilkCommand>>();
- static
- {
- availableCommands.addAll(FileResource.findClasses(SilkMain.class.getPackage(), SilkCommand.class,
- SilkMain.class.getClassLoader()));
+ static {
+ availableCommands.addAll(FileResource.findClasses(SilkMain.class.getPackage(),
+ SilkCommand.class, SilkMain.class.getClassLoader()));
}
- public static void main(String[] args)
- {
- Logger.getRootLogger().setOutputWriter(new OutputStreamWriter(System.err));
+ public static void main(String[] args) {
+ Logger.getRootLogger().setLogWriter(new SimpleLogWriter(System.err));
SilkGlobalOption globalOption = new SilkGlobalOption();
OptionParser parser = new OptionParser(globalOption);
Logger.getRootLogger().setLogLevel(globalOption.logLevel);
- try
- {
+ try {
parser.parse(args, true);
if (globalOption.subCommand == null)
throw new XerialException(XerialErrorCode.INVALID_INPUT, "no command");
SilkCommand command = null;
- for (Class<SilkCommand> each : availableCommands)
- {
- try
- {
+ for (Class<SilkCommand> each : availableCommands) {
+ try {
command = each.newInstance();
- if (command.getName() != null && command.getName().equals(globalOption.subCommand))
+ if (command.getName() != null
+ && command.getName().equals(globalOption.subCommand))
break;
}
- catch (InstantiationException e)
- {
+ catch (InstantiationException e) {
_logger.warn(e);
}
- catch (IllegalAccessException e)
- {
+ catch (IllegalAccessException e) {
_logger.warn(e);
}
}
- if (command == null)
- {
+ if (command == null) {
_logger.error("command is not specified");
return;
}
//
OptionParser subCommandOptionParser = new OptionParser(command);
// run the sub command
- if (globalOption.displayHelp)
- {
+ if (globalOption.displayHelp) {
// display help messsage of the command
String helpFileName = String.format("help-%s.txt", command.getName());
URL helpFileAddr = FileResource.find(SilkMain.class, helpFileName);
if (helpFileAddr == null)
- throw new XerialError(XerialErrorCode.RESOURCE_NOT_FOUND, "help file not found: " + helpFileName);
+ throw new XerialError(XerialErrorCode.RESOURCE_NOT_FOUND,
+ "help file not found: " + helpFileName);
- BufferedReader helpReader = new BufferedReader(new InputStreamReader(helpFileAddr.openStream()));
+ BufferedReader helpReader = new BufferedReader(new InputStreamReader(helpFileAddr
+ .openStream()));
String line;
- while ((line = helpReader.readLine()) != null)
- {
+ while ((line = helpReader.readLine()) != null) {
System.out.println(line);
}
subCommandOptionParser.printUsage();
command.execute();
}
- catch (Exception e)
- {
+ catch (Exception e) {
_logger.error(e);
}
- catch (Error e)
- {
+ catch (Error e) {
e.printStackTrace();
}
--- /dev/null
+/*--------------------------------------------------------------------------\r
+ * Copyright 2009 Taro L. Saito\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *--------------------------------------------------------------------------*/\r
+//--------------------------------------\r
+// XerialJ\r
+//\r
+// LogWriter.java\r
+// Since: Oct 13, 2009 3:24:15 PM\r
+//\r
+// $URL$\r
+// $Author$\r
+//--------------------------------------\r
+package org.xerial.util.log;\r
+\r
+import java.io.IOException;\r
+\r
+/**\r
+ * LogWriter interface\r
+ * \r
+ * @author leo\r
+ * \r
+ */\r
+public interface LogWriter {\r
+\r
+ public void log(Logger logger, LogLevel logLevel, Object message) throws IOException;\r
+\r
+}\r
import java.io.ByteArrayInputStream;
import java.io.FileReader;
import java.io.IOException;
-import java.io.OutputStreamWriter;
import java.io.Reader;
-import java.io.Writer;
import java.util.Properties;
import java.util.TreeMap;
-import org.xerial.util.StringUtil;
-
/**
* Logger
*
* @author leo
*
*/
-public class Logger
-{
- private static String[] logPrefix = { "", // ALL
- "\033[0;32m", // TRACE
- "", // DEBUG
- "\033[1;36m", // INFO
- "\033[1;33m", // WARN
- "\033[1;35m", // ERROR
- "\033[1;31m", // FATAL
- "", // OFF
- "", };
-
- private Writer _out = null;
+public class Logger {
+
+ private LogWriter writer = null;
private LogLevel _threshold = LogLevel.UNSPECIFIED;
private String _loggerFullName = "";
private String _loggerShortName = "";
private static TreeMap<String, Logger> _loggerHolder = new TreeMap<String, Logger>();
private static Logger _rootLogger = new Logger();
- static
- {
+ static {
_rootLogger.setLogLevel(LogLevel.INFO);
- _rootLogger.setOutputWriter(new OutputStreamWriter(System.err));
+ _rootLogger.setLogWriter(new SimpleLogWriter());
+
_rootLogger._loggerFullName = "root";
_rootLogger._loggerShortName = "root";
String logLevel = System.getProperty("xerial.loglevel");
- if (logLevel != null)
- {
+ if (logLevel != null) {
_rootLogger.setLogLevel(logLevel);
}
- else
- {
+ else {
logLevel = System.getProperty("loglevel");
- if (logLevel != null)
- {
+ if (logLevel != null) {
_rootLogger.setLogLevel(logLevel);
}
}
_rootLogger._emitEscapeSequence = Boolean.parseBoolean(useColor);
String loggerConfigFile = System.getProperty("log.config");
- if (loggerConfigFile != null)
- {
- try
- {
+ if (loggerConfigFile != null) {
+ try {
Logger.configure(loggerConfigFile);
}
- catch (IOException e)
- {
+ catch (IOException e) {
e.printStackTrace();
}
}
/**
* hide constructor
*/
- private Logger()
- {
+ private Logger() {
}
- private Logger(String fullTypeName)
- {
+ private Logger(String fullTypeName) {
_loggerFullName = fullTypeName;
String[] packageList = _loggerFullName.split("\\.");
_loggerShortName = packageList[packageList.length - 1];
if (packageList.length == 1)
_parentLogger = _rootLogger;
- else
- {
+ else {
String parentPackageName = concatinate(packageList, packageList.length - 1);
_parentLogger = getLogger(parentPackageName);
}
}
- private String concatinate(String[] packageList, int upTo)
- {
+ private String concatinate(String[] packageList, int upTo) {
StringBuilder builder = new StringBuilder();
- for (int i = 0; i < upTo - 1; i++)
- {
+ for (int i = 0; i < upTo - 1; i++) {
builder.append(packageList[i]);
builder.append(".");
}
return builder.toString();
}
- public static Logger getLogger(Class< ? > c)
- {
+ public static Logger getLogger(Class< ? > c) {
return getLogger(c.getName());
}
- public static Logger getLogger(Class< ? > c, String suffix)
- {
+ public static Logger getLogger(Class< ? > c, String suffix) {
if (suffix == null || suffix.length() <= 0)
return getLogger(c);
else
return getLogger(String.format("%s-%s", c.getName(), suffix));
}
- public static Logger getLogger(Package p)
- {
+ public static Logger getLogger(Package p) {
return getLogger(p.getName());
}
- public static synchronized Logger getLogger(String fullTypeName)
- {
+ public static synchronized Logger getLogger(String fullTypeName) {
if (fullTypeName == null)
return _rootLogger;
if (_loggerHolder.containsKey(fullTypeName))
return _loggerHolder.get(fullTypeName);
- else
- {
+ else {
Logger newLogger = new Logger(fullTypeName);
_loggerHolder.put(fullTypeName, newLogger);
newLogger._emitEscapeSequence = _rootLogger._emitEscapeSequence;
}
}
- public static Logger getRootLogger()
- {
+ public static Logger getRootLogger() {
return _rootLogger;
}
- public static void configure(String configFile) throws IOException
- {
+ public static void configure(String configFile) throws IOException {
configure(new BufferedReader(new FileReader(configFile)));
}
- public static void configure(Reader configurationFileReader) throws IOException
- {
+ public static void configure(Reader configurationFileReader) throws IOException {
Properties configProperties = new Properties();
StringBuilder sb = new StringBuilder();
int ch;
- while ((ch = configurationFileReader.read()) > 0)
- {
+ while ((ch = configurationFileReader.read()) > 0) {
sb.append((char) ch);
}
ByteArrayInputStream bs = new ByteArrayInputStream(sb.toString().getBytes());
configProperties.load(bs);
- for (Object key : configProperties.keySet())
- {
+ for (Object key : configProperties.keySet()) {
String[] lhs = ((String) key).split("#");
String loggerName = lhs[0];
String value = configProperties.getProperty(key.toString());
Logger logger = getLogger(loggerName);
- if (lhs.length <= 1)
- {
+ if (lhs.length <= 1) {
logger.setLogLevel(value);
}
- else if (lhs.length > 1)
- {
+ else if (lhs.length > 1) {
// packageName:parameter = value configuration
String parameter = lhs[1];
- if (parameter.equals("color"))
- {
- logger.setColor(Boolean.parseBoolean(value));
+ if (parameter.equals("color")) {
+ logger.enableColor(Boolean.parseBoolean(value));
}
- else
- {
+ else {
System.err.println("unknown configuration parameter: " + parameter);
}
}
- else
- {
+ else {
System.err.println("Error in the logger configuration file: " + key);
}
}
}
- public String getLoggerName()
- {
+ public String getLoggerName() {
return _loggerFullName;
}
- public void setLogLevel(LogLevel logLevel)
- {
+ public String getLoggerShortName() {
+ return _loggerShortName;
+ }
+
+ public void setLogLevel(LogLevel logLevel) {
this._threshold = logLevel;
}
- public void setLogLevel(String logLevel)
- {
- for (LogLevel l : LogLevel.values())
- {
- if (l.name().equalsIgnoreCase(logLevel))
- {
+ public void setLogLevel(String logLevel) {
+ for (LogLevel l : LogLevel.values()) {
+ if (l.name().equalsIgnoreCase(logLevel)) {
setLogLevel(l);
return;
}
warn("unknown log level: " + logLevel);
}
- public LogLevel getLogLevel()
- {
+ public LogLevel getLogLevel() {
return _threshold;
}
- public void setOutputWriter(Writer writer)
- {
- this._out = writer;
+ public void setLogWriter(LogWriter writer) {
+ if (writer == null)
+ throw new NullPointerException();
+
+ this.writer = writer;
}
- public boolean trace(Object message)
- {
+ public boolean trace(Object message) {
log(LogLevel.TRACE, message);
return true;
}
- public boolean debug(Object message)
- {
+ public boolean debug(Object message) {
log(LogLevel.DEBUG, message);
return true;
}
- public boolean info(Object message)
- {
+ public boolean info(Object message) {
log(LogLevel.INFO, message);
return true;
}
- public boolean warn(Object message)
- {
+ public boolean warn(Object message) {
log(LogLevel.WARN, message);
return true;
}
- public boolean error(Object message)
- {
+ public boolean error(Object message) {
log(LogLevel.ERROR, message);
return true;
}
- public boolean fatal(Object message)
- {
+ public boolean fatal(Object message) {
log(LogLevel.FATAL, message);
return true;
}
* @param enable
* @return
*/
- public void setColor(boolean enable)
- {
+ public void enableColor(boolean enable) {
_emitEscapeSequence = enable;
}
/**
* @return true when escape sequence is used to output the log
*/
- public boolean isColorEnabled()
- {
+ public boolean isColorEnabled() {
return _emitEscapeSequence;
}
- public boolean isDebugEnabled()
- {
+ public boolean isDebugEnabled() {
return isEnabled(LogLevel.DEBUG);
}
- public boolean isTraceEnabled()
- {
+ public boolean isTraceEnabled() {
return isEnabled(LogLevel.TRACE);
}
- public boolean isInfoEnabled()
- {
+ public boolean isInfoEnabled() {
return isEnabled(LogLevel.INFO);
}
- public boolean isWarnEnabled()
- {
+ public boolean isWarnEnabled() {
return isEnabled(LogLevel.WARN);
}
- public boolean isErrorEnabled()
- {
+ public boolean isErrorEnabled() {
return isEnabled(LogLevel.ERROR);
}
- public boolean isFatalEnalbed()
- {
+ public boolean isFatalEnalbed() {
return isEnabled(LogLevel.FATAL);
}
- public boolean isEnabled(LogLevel logLevel)
- {
- if (_threshold == LogLevel.UNSPECIFIED)
- {
+ public boolean isEnabled(LogLevel logLevel) {
+ if (_threshold == LogLevel.UNSPECIFIED) {
Logger parent = this;
- while ((parent = parent._parentLogger) != null)
- {
+ while ((parent = parent._parentLogger) != null) {
if (parent.getLogLevel() == LogLevel.UNSPECIFIED)
continue;
return _threshold.ordinal() <= logLevel.ordinal();
}
- private Writer getWriter()
- {
- if (_out != null)
- return _out;
- else
- {
+ private LogWriter getLogWriter() {
+ if (writer != null)
+ return writer;
+ else {
if (_parentLogger != null)
- return _parentLogger.getWriter();
+ return _parentLogger.getLogWriter();
else
return null;
}
}
- private void log(LogLevel logLevel, Object message)
- {
+ private void log(LogLevel logLevel, Object message) {
if (!isEnabled(logLevel))
return;
- Writer logOut = getWriter();
+ LogWriter logOut = getLogWriter();
if (logOut == null)
return; // no output is specified
- try
- {
- if (_emitEscapeSequence)
- logOut.write(logPrefix[logLevel.ordinal()]);
- logOut.write("[" + _loggerShortName + "]\t");
- if (message != null)
- logOut.write(message.toString());
- if (_emitEscapeSequence)
- logOut.write("\033[0m");
- logOut.write(StringUtil.newline());
- logOut.flush();
+ try {
+ logOut.log(this, logLevel, message);
}
- catch (IOException e)
- {
+ catch (IOException e) {
e.printStackTrace();
}
}
--- /dev/null
+/*--------------------------------------------------------------------------\r
+ * Copyright 2009 Taro L. Saito\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *--------------------------------------------------------------------------*/\r
+//--------------------------------------\r
+// XerialJ\r
+//\r
+// SilkLogWriter.java\r
+// Since: Oct 13, 2009 3:35:01 PM\r
+//\r
+// $URL$\r
+// $Author$\r
+//--------------------------------------\r
+package org.xerial.util.log;\r
+\r
+import java.io.IOException;\r
+import java.io.OutputStreamWriter;\r
+import java.io.Writer;\r
+\r
+import org.xerial.silk.SilkWriter;\r
+import org.xerial.util.StringUtil;\r
+\r
+/**\r
+ * Generating log in Silk format\r
+ * \r
+ * @author leo\r
+ * \r
+ */\r
+public class SilkLogWriter implements LogWriter {\r
+\r
+ private Writer logOut = new OutputStreamWriter(System.err);\r
+\r
+ public SilkLogWriter() {\r
+\r
+ }\r
+\r
+ public SilkLogWriter(Writer out) {\r
+ this.logOut = out;\r
+ }\r
+\r
+ public void log(Logger logger, LogLevel logLevel, Object message) throws IOException {\r
+\r
+ if (logOut == null)\r
+ return; // no output is specified\r
+\r
+ synchronized (this) {\r
+ logOut.write(String.format("-%s(name:%s)", logLevel, logger.getLoggerShortName()));\r
+\r
+ if (message != null) {\r
+ logOut.write(StringUtil.NEW_LINE);\r
+ String m = SilkWriter.escapeText(message.toString());\r
+ logOut.write(m);\r
+ }\r
+\r
+ logOut.write(StringUtil.newline());\r
+ logOut.flush();\r
+ }\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+/*--------------------------------------------------------------------------\r
+ * Copyright 2009 Taro L. Saito\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *--------------------------------------------------------------------------*/\r
+//--------------------------------------\r
+// XerialJ\r
+//\r
+// ConsoleLogWriter.java\r
+// Since: Oct 13, 2009 3:25:28 PM\r
+//\r
+// $URL$\r
+// $Author$\r
+//--------------------------------------\r
+package org.xerial.util.log;\r
+\r
+import java.io.IOException;\r
+import java.io.OutputStream;\r
+import java.io.OutputStreamWriter;\r
+import java.io.Writer;\r
+\r
+import org.xerial.util.StringUtil;\r
+\r
+/**\r
+ * Generating log for console output\r
+ * \r
+ * @author leo\r
+ * \r
+ */\r
+public class SimpleLogWriter implements LogWriter {\r
+\r
+ private Writer logOut;\r
+\r
+ public SimpleLogWriter() {\r
+ logOut = new OutputStreamWriter(System.err);\r
+ }\r
+\r
+ public SimpleLogWriter(OutputStream out) {\r
+ logOut = new OutputStreamWriter(out);\r
+ }\r
+\r
+ public SimpleLogWriter(Writer out) {\r
+ logOut = out;\r
+ }\r
+\r
+ private static String[] logPrefix = { "", // ALL\r
+ "\033[0;32m", // TRACE\r
+ "", // DEBUG\r
+ "\033[1;36m", // INFO\r
+ "\033[1;33m", // WARN\r
+ "\033[1;35m", // ERROR\r
+ "\033[1;31m", // FATAL\r
+ "", // OFF\r
+ "", };\r
+\r
+ public void log(Logger logger, LogLevel logLevel, Object message) {\r
+\r
+ if (logOut == null)\r
+ return; // no output is specified\r
+\r
+ try {\r
+ synchronized (this) {\r
+ if (logger.isColorEnabled())\r
+ logOut.write(logPrefix[logLevel.ordinal()]);\r
+\r
+ logOut.write(String.format("[%s] %s", logger.getLoggerShortName(),\r
+ message != null ? message.toString() : ""));\r
+ if (logger.isColorEnabled())\r
+ logOut.write("\033[0m");\r
+\r
+ logOut.write(StringUtil.newline());\r
+\r
+ logOut.flush();\r
+ }\r
+ }\r
+ catch (IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+\r
+}\r
}
public static class TupleNode extends NodeBase<TupleNode> {
+ public final int id;
public final String name;
- public TupleNode(String name) {
+ public TupleNode(int id, String name) {
+ this.id = id;
this.name = name;
}
-
- @Override
- public String toString() {
- return name;
- }
}
@Test
public void testToSilkTuple() throws Exception {
Tuple<TupleNode> t = new Tuple<TupleNode>();
- t.add(new TupleNode("A"));
- t.add(new TupleNode("B"));
+ t.add(new TupleNode(1, "A"));
+ t.add(new TupleNode(2, "B"));
String s = Lens.toSilk(t);
- _logger.info(s);
+ _logger.debug(s);
}
}
\r
}\r
\r
+ @Test\r
+ public void escapeText() throws Exception {\r
+ String s = SilkWriter.escapeText("-A(id:1)\n -B");\r
+\r
+ String[] l = s.split("\r?\n");\r
+\r
+ assertEquals("\\-A(id:1)", l[0]);\r
+ assertEquals(" \\-B", l[1]);\r
+\r
+ }\r
+\r
+ @Test\r
+ public void escapeBackSlash() throws Exception {\r
+ String e = SilkWriter.escapeText("\\-already escaped");\r
+ assertEquals("\\-already escaped", e);\r
+\r
+ }\r
+\r
}\r