You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by pm...@apache.org on 2009/03/02 08:57:31 UTC
svn commit: r749218 [2/34] - in /incubator/cassandra: branches/ dist/
nightly/ site/ tags/ trunk/ trunk/lib/ trunk/src/ trunk/src/org/
trunk/src/org/apache/ trunk/src/org/apache/cassandra/
trunk/src/org/apache/cassandra/analytics/ trunk/src/org/apache/...
Added: incubator/cassandra/trunk/src/org/apache/cassandra/analytics/VMAnalyticsSource.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/analytics/VMAnalyticsSource.java?rev=749218&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/analytics/VMAnalyticsSource.java (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/analytics/VMAnalyticsSource.java Mon Mar 2 07:57:22 2009
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.analytics;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+import java.lang.management.MemoryUsage;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.utils.LogUtil;
+import org.apache.log4j.Logger;
+
+
+/**
+ * This class sets up the analytics package to report metrics into
+ * Ganglia for VM heap utilization.
+ *
+ * Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com ) & Karthik Ranganathan ( kranganathan@facebook.com )
+ */
+
+public class VMAnalyticsSource implements IAnalyticsSource
+{
+ private static final String METRIC_MEMUSAGE = "VM Heap Utilization";
+ private static final String RECORD_MEMUSAGE = "MemoryUsageRecord";
+ private static final String TAG_MEMUSAGE = "MemoryUsageTag";
+ private static final String TAG_MEMUSAGE_MEMUSED = "MemoryUsedTagValue";
+
+ /**
+ * Setup the Ganglia record to display the VM heap utilization.
+ */
+ public VMAnalyticsSource()
+ {
+ // set the units for the metric type
+ AnalyticsContext.instance().setAttribute("units." + METRIC_MEMUSAGE, "MB");
+ // create the record
+ AnalyticsContext.instance().createRecord(RECORD_MEMUSAGE);
+ }
+
+ /**
+ * Update the VM heap utilization record with the relevant data.
+ *
+ * @param context the reference to the context which has called this callback
+ */
+ public void doUpdates(AnalyticsContext context)
+ {
+ // update the memory used record
+ MetricsRecord memUsageRecord = context.getMetricsRecord(RECORD_MEMUSAGE);
+ if(memUsageRecord != null)
+ {
+ updateUsedMemory(memUsageRecord);
+ }
+ }
+
+ private void updateUsedMemory(MetricsRecord memUsageRecord)
+ {
+ memUsageRecord.setTag(TAG_MEMUSAGE, TAG_MEMUSAGE_MEMUSED);
+ memUsageRecord.setMetric(METRIC_MEMUSAGE, getMemoryUsed());
+ memUsageRecord.update();
+ }
+
+ private float getMemoryUsed()
+ {
+ MemoryMXBean memoryMxBean = ManagementFactory.getMemoryMXBean();
+ MemoryUsage memUsage = memoryMxBean.getHeapMemoryUsage();
+ return (float)memUsage.getUsed()/(1024 * 1024);
+ }
+}
Added: incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.g
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.g?rev=749218&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.g (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.g Mon Mar 2 07:57:22 2009
@@ -0,0 +1,234 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//
+// ANTLR Grammar for the Cassandra Command Line Interface (CLI).
+//
+// Note: This grammar handles all but the CQL statements. CQL
+// statements are detected separately (based on the first token)
+// and directly sent to server-side for processing.
+//
+
+grammar Cli;
+
+options {
+ output=AST;
+ ASTLabelType=CommonTree;
+ backtrack=true;
+}
+
+//
+// Nodes in the AST
+//
+tokens {
+ //
+ // Top-level nodes. These typically correspond to
+ // various top-level CLI statements.
+ //
+ NODE_CONNECT;
+ NODE_DESCRIBE_TABLE;
+ NODE_EXIT;
+ NODE_HELP;
+ NODE_NO_OP;
+ NODE_SHOW_CLUSTER_NAME;
+ NODE_SHOW_CONFIG_FILE;
+ NODE_SHOW_VERSION;
+ NODE_SHOW_TABLES;
+ NODE_THRIFT_GET;
+ NODE_THRIFT_SET;
+
+ // Internal Nodes.
+ NODE_COLUMN_ACCESS;
+ NODE_ID_LIST;
+}
+
+@parser::header {
+package com.facebook.infrastructure.cli;
+}
+
+@lexer::header {
+package com.facebook.infrastructure.cli;
+}
+
+//
+// Parser Section
+//
+
+// the root node
+root: stmt SEMICOLON? EOF -> stmt;
+
+stmt
+ : connectStmt
+ | exitStmt
+ | describeTable
+ | getStmt
+ | helpStmt
+ | setStmt
+ | showStmt
+ | -> ^(NODE_NO_OP)
+ ;
+
+connectStmt
+ : K_CONNECT host SLASH port -> ^(NODE_CONNECT host port)
+ ;
+
+helpStmt
+ : K_HELP -> ^(NODE_HELP)
+ | '?' -> ^(NODE_HELP)
+ ;
+
+exitStmt
+ : K_QUIT -> ^(NODE_EXIT)
+ | K_EXIT -> ^(NODE_EXIT)
+ ;
+
+getStmt
+ : K_THRIFT K_GET columnFamilyExpr -> ^(NODE_THRIFT_GET columnFamilyExpr)
+ ;
+
+setStmt
+ : K_THRIFT K_SET columnFamilyExpr '=' value -> ^(NODE_THRIFT_SET columnFamilyExpr value)
+ ;
+
+showStmt
+ : showClusterName
+ | showVersion
+ | showConfigFile
+ | showTables
+ ;
+
+showClusterName
+ : K_SHOW K_CLUSTER K_NAME -> ^(NODE_SHOW_CLUSTER_NAME)
+ ;
+
+showConfigFile
+ : K_SHOW K_CONFIG K_FILE -> ^(NODE_SHOW_CONFIG_FILE)
+ ;
+
+showVersion
+ : K_SHOW K_VERSION -> ^(NODE_SHOW_VERSION)
+ ;
+
+showTables
+ : K_SHOW K_TABLES -> ^(NODE_SHOW_TABLES)
+ ;
+
+describeTable
+ : K_DESCRIBE K_TABLE table -> ^(NODE_DESCRIBE_TABLE table);
+
+columnFamilyExpr
+ : table DOT columnFamily '[' rowKey ']'
+ ( '[' a+=columnOrSuperColumn ']'
+ ('[' a+=columnOrSuperColumn ']')?
+ )?
+ -> ^(NODE_COLUMN_ACCESS table columnFamily rowKey ($a+)?)
+ ;
+
+table: Identifier;
+
+columnFamily: Identifier;
+
+rowKey: StringLiteral;
+
+value: StringLiteral;
+
+columnOrSuperColumn: StringLiteral;
+
+host: id+=Identifier (id+=DOT id+=Identifier)* -> ^(NODE_ID_LIST $id+);
+
+port: IntegerLiteral;
+
+//
+// Lexer Section
+//
+
+//
+// Keywords (in alphabetical order for convenience)
+//
+// CLI is case-insensitive with respect to these keywords.
+// However, they MUST be listed in upper case here.
+//
+K_CONFIG: 'CONFIG';
+K_CONNECT: 'CONNECT';
+K_CLUSTER: 'CLUSTER';
+K_DESCRIBE: 'DESCRIBE';
+K_GET: 'GET';
+K_HELP: 'HELP';
+K_EXIT: 'EXIT';
+K_FILE: 'FILE';
+K_NAME: 'NAME';
+K_QUIT: 'QUIT';
+K_SET: 'SET';
+K_SHOW: 'SHOW';
+K_TABLE: 'TABLE';
+K_TABLES: 'TABLES';
+K_THRIFT: 'THRIFT';
+K_VERSION: 'VERSION';
+
+// private syntactic rules
+fragment
+Letter
+ : 'a'..'z'
+ | 'A'..'Z'
+ ;
+
+fragment
+Digit
+ : '0'..'9'
+ ;
+
+// syntactic Elements
+Identifier
+ : Letter ( Letter | Digit | '_')*
+ ;
+
+
+// literals
+StringLiteral
+ :
+ '\'' (~'\'')* '\'' ( '\'' (~'\'')* '\'' )*
+ ;
+
+IntegerLiteral
+ : Digit+;
+
+
+//
+// syntactic elements
+//
+
+DOT
+ : '.'
+ ;
+
+SLASH
+ : '/'
+ ;
+
+SEMICOLON
+ : ';'
+ ;
+
+WS
+ : (' '|'\r'|'\t'|'\n') {$channel=HIDDEN;} // whitepace
+ ;
+
+COMMENT
+ : '--' (~('\n'|'\r'))* { $channel=HIDDEN; }
+ | '/*' (options {greedy=false;} : .)* '*/' { $channel=HIDDEN; }
+ ;
Added: incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.tokens
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.tokens?rev=749218&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.tokens (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/cli/Cli.tokens Mon Mar 2 07:57:22 2009
@@ -0,0 +1,43 @@
+NODE_SHOW_CONFIG_FILE=10
+K_TABLES=32
+K_VERSION=31
+K_EXIT=22
+NODE_EXIT=6
+K_FILE=30
+K_GET=24
+K_CONNECT=18
+K_CONFIG=29
+SEMICOLON=17
+Digit=40
+Identifier=36
+NODE_THRIFT_GET=13
+K_SET=25
+StringLiteral=37
+NODE_HELP=7
+NODE_NO_OP=8
+NODE_THRIFT_SET=14
+K_DESCRIBE=33
+NODE_SHOW_VERSION=11
+NODE_ID_LIST=16
+WS=41
+NODE_CONNECT=4
+SLASH=19
+K_THRIFT=23
+NODE_SHOW_TABLES=12
+K_CLUSTER=27
+K_HELP=20
+K_SHOW=26
+NODE_DESCRIBE_TABLE=5
+K_TABLE=34
+IntegerLiteral=38
+NODE_SHOW_CLUSTER_NAME=9
+COMMENT=42
+DOT=35
+K_NAME=28
+Letter=39
+NODE_COLUMN_ACCESS=15
+K_QUIT=21
+'?'=43
+'='=44
+'['=45
+']'=46
Added: incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliClient.java?rev=749218&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliClient.java (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliClient.java Mon Mar 2 07:57:22 2009
@@ -0,0 +1,323 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.cli;
+
+import com.facebook.thrift.*;
+
+import org.antlr.runtime.tree.*;
+import org.apache.cassandra.cql.common.Utils;
+import org.apache.cassandra.service.Cassandra;
+import org.apache.cassandra.service.CassandraException;
+import org.apache.cassandra.service.CqlResult_t;
+import org.apache.cassandra.service.column_t;
+import org.apache.cassandra.service.Cassandra.Client;
+import org.apache.cassandra.utils.LogUtil;
+
+import java.util.*;
+
+// Cli Client Side Library
+public class CliClient
+{
+ private Cassandra.Client thriftClient_ = null;
+ private CliSessionState css_ = null;
+
+ public CliClient(CliSessionState css, Cassandra.Client thriftClient)
+ {
+ css_ = css;
+ thriftClient_ = thriftClient;
+ }
+
+ // Execute a CLI Statement
+ public void executeCLIStmt(String stmt) throws TException
+ {
+ CommonTree ast = null;
+
+ ast = CliCompiler.compileQuery(stmt);
+
+ switch (ast.getType()) {
+ case CliParser.NODE_EXIT:
+ cleanupAndExit();
+ break;
+ case CliParser.NODE_THRIFT_GET:
+ executeGet(ast);
+ break;
+ case CliParser.NODE_HELP:
+ printCmdHelp();
+ break;
+ case CliParser.NODE_THRIFT_SET:
+ executeSet(ast);
+ break;
+ case CliParser.NODE_SHOW_CLUSTER_NAME:
+ executeShowProperty(ast, "cluster name");
+ break;
+ case CliParser.NODE_SHOW_CONFIG_FILE:
+ executeShowProperty(ast, "config file");
+ break;
+ case CliParser.NODE_SHOW_VERSION:
+ executeShowProperty(ast, "version");
+ break;
+ case CliParser.NODE_SHOW_TABLES:
+ executeShowTables(ast);
+ break;
+ case CliParser.NODE_DESCRIBE_TABLE:
+ executeDescribeTable(ast);
+ break;
+ case CliParser.NODE_CONNECT:
+ executeConnect(ast);
+ break;
+ case CliParser.NODE_NO_OP:
+ // comment lines come here; they are treated as no ops.
+ break;
+ default:
+ css_.err.println("Invalid Statement (Type: " + ast.getType() + ")");
+ break;
+ }
+ }
+
+ private void printCmdHelp()
+ {
+ css_.out.println("List of all CLI commands:");
+ css_.out.println("? Same as help.");
+ css_.out.println("connect <hostname>/<port> Connect to Cassandra's thrift service.");
+ css_.out.println("describe table <tbl> Describe table.");
+ css_.out.println("exit Exit CLI.");
+ css_.out.println("explain plan [<set stmt>|<get stmt>|<select stmt>] Explains the PLAN for specified stmt.");
+ css_.out.println("help Display this help.");
+ css_.out.println("quit Exit CLI.");
+ css_.out.println("show config file Display contents of config file");
+ css_.out.println("show cluster name Display cassandra server version");
+ css_.out.println("show tables Show list of tables.");
+ css_.out.println("show version Show server version.");
+ css_.out.println("select ... CQL select statement (TBD).");
+ css_.out.println("get ... CQL data retrieval statement.");
+ css_.out.println("set ... CQL DML statement.");
+ css_.out.println("thrift get <tbl>.<cf>['<rowKey>'] (will be deprecated)");
+ css_.out.println("thrift get <tbl>.<cf>['<rowKey>']['<colKey>'] (will be deprecated)");
+ css_.out.println("thrift set <tbl>.<cf>['<rowKey>']['<colKey>'] = '<value>' (will be deprecated)");
+ }
+
+ private void cleanupAndExit()
+ {
+ CliMain.disconnect();
+ System.exit(0);
+ }
+
+ // Execute GET statement
+ private void executeGet(CommonTree ast) throws TException
+ {
+ if (!CliMain.isConnected())
+ return;
+
+ int childCount = ast.getChildCount();
+ assert(childCount == 1);
+
+ CommonTree columnFamilySpec = (CommonTree)ast.getChild(0);
+ assert(columnFamilySpec.getType() == CliParser.NODE_COLUMN_ACCESS);
+
+ String tableName = CliCompiler.getTableName(columnFamilySpec);
+ String key = CliCompiler.getKey(columnFamilySpec);
+ String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
+ int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
+
+ // assume simple columnFamily for now
+ if (columnSpecCnt == 0)
+ {
+ // table.cf['key']
+ List<column_t> columns = new ArrayList<column_t>();
+ try
+ {
+ columns = thriftClient_.get_slice(tableName, key, columnFamily, -1, 1000000);
+ }
+ catch(CassandraException cex)
+ {
+ css_.out.println(LogUtil.throwableToString(cex));
+ }
+ int size = columns.size();
+ for (Iterator<column_t> colIter = columns.iterator(); colIter.hasNext(); )
+ {
+ column_t col = colIter.next();
+ css_.out.printf(" (column=%s, value=%s; timestamp=%d)\n",
+ col.columnName, col.value, col.timestamp);
+ }
+ css_.out.println("Returned " + size + " rows.");
+ }
+ else if (columnSpecCnt == 1)
+ {
+ // table.cf['key']['column']
+ String columnName = CliCompiler.getColumn(columnFamilySpec, 0);
+ column_t col = new column_t();
+ try
+ {
+ col = thriftClient_.get_column(tableName, key, columnFamily + ":" + columnName);
+ }
+ catch(CassandraException cex)
+ {
+ css_.out.println(LogUtil.throwableToString(cex));
+ }
+
+ css_.out.printf("==> (name=%s, value=%s; timestamp=%d)\n",
+ col.columnName, col.value, col.timestamp);
+ }
+ else
+ {
+ assert(false);
+ }
+ }
+
+ // Execute SET statement
+ private void executeSet(CommonTree ast) throws TException
+ {
+ if (!CliMain.isConnected())
+ return;
+
+ int childCount = ast.getChildCount();
+ assert(childCount == 2);
+
+ CommonTree columnFamilySpec = (CommonTree)ast.getChild(0);
+ assert(columnFamilySpec.getType() == CliParser.NODE_COLUMN_ACCESS);
+
+ String tableName = CliCompiler.getTableName(columnFamilySpec);
+ String key = CliCompiler.getKey(columnFamilySpec);
+ String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
+ int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
+ String value = Utils.unescapeSQLString(ast.getChild(1).getText());
+
+ // assume simple columnFamily for now
+ if (columnSpecCnt == 1)
+ {
+ // We have the table.cf['key']['column'] = 'value' case.
+
+ // get the column name
+ String columnName = CliCompiler.getColumn(columnFamilySpec, 0);
+
+ // do the insert
+ thriftClient_.insert(tableName, key, columnFamily + ":" + columnName,
+ value, System.currentTimeMillis());
+
+ css_.out.println("Value inserted.");
+ }
+ else
+ {
+ /* for now (until we support batch sets) */
+ assert(false);
+ }
+ }
+
+ private void executeShowProperty(CommonTree ast, String propertyName) throws TException
+ {
+ if (!CliMain.isConnected())
+ return;
+
+ String propertyValue = thriftClient_.getStringProperty(propertyName);
+ css_.out.println(propertyValue);
+ return;
+ }
+
+ // process "show tables" statement
+ private void executeShowTables(CommonTree ast) throws TException
+ {
+ if (!CliMain.isConnected())
+ return;
+
+ List<String> tables = thriftClient_.getStringListProperty("tables");
+ for (String table : tables)
+ {
+ css_.out.println(table);
+ }
+ }
+
+ // process a statement of the form: describe table <tablename>
+ private void executeDescribeTable(CommonTree ast) throws TException
+ {
+ if (!CliMain.isConnected())
+ return;
+
+ // Get table name
+ int childCount = ast.getChildCount();
+ assert(childCount == 1);
+ String tableName = ast.getChild(0).getText();
+
+ // Describe and display
+ String describe = thriftClient_.describeTable(tableName);
+ css_.out.println(describe);
+ return;
+ }
+
+ // process a statement of the form: connect hostname/port
+ private void executeConnect(CommonTree ast) throws TException
+ {
+ int portNumber = Integer.parseInt(ast.getChild(1).getText());
+ Tree idList = ast.getChild(0);
+
+ StringBuffer hostName = new StringBuffer();
+ int idCount = idList.getChildCount();
+ for (int idx = 0; idx < idCount; idx++)
+ {
+ hostName.append(idList.getChild(idx).getText());
+ }
+
+ // disconnect current connection, if any.
+ // This is a no-op, if you aren't currently connected.
+ CliMain.disconnect();
+
+ // now, connect to the newly specified host name and port
+ css_.hostName = hostName.toString();
+ css_.thriftPort = portNumber;
+ CliMain.connect(css_.hostName, css_.thriftPort);
+ }
+
+ // execute CQL query on server
+ public void executeQueryOnServer(String query) throws TException
+ {
+ if (!CliMain.isConnected())
+ return;
+
+ CqlResult_t result = thriftClient_.executeQuery(query);
+
+ if (result == null)
+ {
+ css_.out.println("Unexpected error. Received null result from server.");
+ return;
+ }
+
+ if ((result.errorTxt != null) || (result.errorCode != 0))
+ {
+ css_.out.println("Error: " + result.errorTxt);
+ }
+ else
+ {
+ List<Map<String, String>> rows = result.resultSet;
+
+ if (rows != null)
+ {
+ for (Map<String, String> row : rows)
+ {
+ for (Iterator<Map.Entry<String, String>> it = row.entrySet().iterator(); it.hasNext(); )
+ {
+ Map.Entry<String, String> entry = it.next();
+ String key = entry.getKey();
+ String value = entry.getValue();
+ css_.out.print(key + " = " + value + "; ");
+ }
+ css_.out.println();
+ }
+ }
+ css_.out.println("Statement processed.");
+ }
+ }
+}
Added: incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliCompiler.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliCompiler.java?rev=749218&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliCompiler.java (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliCompiler.java Mon Mar 2 07:57:22 2009
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.cli;
+
+import org.antlr.runtime.*;
+import org.antlr.runtime.tree.*;
+import org.apache.cassandra.cql.common.Utils;
+
+
+public class CliCompiler
+{
+
+ // ANTLR does not provide case-insensitive tokenization support
+ // out of the box. So we override the LA (lookahead) function
+ // of the ANTLRStringStream class. Note: This doesn't change the
+ // token text-- but just relaxes the matching rules to match
+ // in upper case. [Logic borrowed from Hive code.]
+ //
+ // Also see discussion on this topic in:
+ // http://www.antlr.org/wiki/pages/viewpage.action?pageId=1782.
+ public static class ANTLRNoCaseStringStream extends ANTLRStringStream
+ {
+ public ANTLRNoCaseStringStream(String input)
+ {
+ super(input);
+ }
+
+ public int LA(int i)
+ {
+ int returnChar = super.LA(i);
+ if (returnChar == CharStream.EOF)
+ {
+ return returnChar;
+ }
+ else if (returnChar == 0)
+ {
+ return returnChar;
+ }
+
+ return Character.toUpperCase((char)returnChar);
+ }
+ }
+
+ public static CommonTree compileQuery(String query)
+ {
+ CommonTree queryTree = null;
+ try
+ {
+ ANTLRStringStream input = new ANTLRNoCaseStringStream(query);
+
+ CliLexer lexer = new CliLexer(input);
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+
+ CliParser parser = new CliParser(tokens);
+
+ // start parsing...
+ queryTree = (CommonTree)(parser.root().getTree());
+
+ // semantic analysis if any...
+ // [tbd]
+
+ }
+ catch(Exception e)
+ {
+ System.err.println("Exception " + e.getMessage());
+ e.printStackTrace(System.err);
+ }
+ return queryTree;
+ }
+ /*
+ * NODE_COLUMN_ACCESS related functions.
+ */
+ public static String getTableName(CommonTree astNode)
+ {
+ assert(astNode.getType() == CliParser.NODE_COLUMN_ACCESS);
+
+ return astNode.getChild(0).getText();
+ }
+
+ public static String getColumnFamily(CommonTree astNode)
+ {
+ assert(astNode.getType() == CliParser.NODE_COLUMN_ACCESS);
+
+ return astNode.getChild(1).getText();
+ }
+
+ public static String getKey(CommonTree astNode)
+ {
+ assert(astNode.getType() == CliParser.NODE_COLUMN_ACCESS);
+
+ return Utils.unescapeSQLString(astNode.getChild(2).getText());
+ }
+
+ public static int numColumnSpecifiers(CommonTree astNode)
+ {
+ // Skip over table, column family and rowKey
+ return astNode.getChildCount() - 3;
+ }
+
+ // Returns the pos'th (0-based index) column specifier in the astNode
+ public static String getColumn(CommonTree astNode, int pos)
+ {
+ // Skip over table, column family and rowKey
+ return Utils.unescapeSQLString(astNode.getChild(pos + 3).getText());
+ }
+
+}
Added: incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliLexer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliLexer.java?rev=749218&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliLexer.java (added)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/cli/CliLexer.java Mon Mar 2 07:57:22 2009
@@ -0,0 +1,1806 @@
+// $ANTLR 3.0.1 /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g 2008-10-29 16:05:52
+
+package org.apache.cassandra.cli;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+public class CliLexer extends Lexer {
+ public static final int K_TABLES=32;
+ public static final int NODE_EXIT=6;
+ public static final int K_EXIT=22;
+ public static final int K_GET=24;
+ public static final int K_CONNECT=18;
+ public static final int K_CONFIG=29;
+ public static final int EOF=-1;
+ public static final int Identifier=36;
+ public static final int K_SET=25;
+ public static final int K_DESCRIBE=33;
+ public static final int NODE_SHOW_VERSION=11;
+ public static final int NODE_CONNECT=4;
+ public static final int SLASH=19;
+ public static final int NODE_SHOW_TABLES=12;
+ public static final int K_CLUSTER=27;
+ public static final int K_SHOW=26;
+ public static final int NODE_DESCRIBE_TABLE=5;
+ public static final int K_TABLE=34;
+ public static final int COMMENT=42;
+ public static final int DOT=35;
+ public static final int K_NAME=28;
+ public static final int K_QUIT=21;
+ public static final int NODE_SHOW_CONFIG_FILE=10;
+ public static final int K_VERSION=31;
+ public static final int K_FILE=30;
+ public static final int SEMICOLON=17;
+ public static final int Digit=40;
+ public static final int T43=43;
+ public static final int Tokens=47;
+ public static final int T46=46;
+ public static final int NODE_THRIFT_GET=13;
+ public static final int T45=45;
+ public static final int T44=44;
+ public static final int StringLiteral=37;
+ public static final int NODE_HELP=7;
+ public static final int NODE_NO_OP=8;
+ public static final int NODE_THRIFT_SET=14;
+ public static final int NODE_ID_LIST=16;
+ public static final int WS=41;
+ public static final int K_THRIFT=23;
+ public static final int K_HELP=20;
+ public static final int IntegerLiteral=38;
+ public static final int NODE_SHOW_CLUSTER_NAME=9;
+ public static final int Letter=39;
+ public static final int NODE_COLUMN_ACCESS=15;
+ public CliLexer() {;}
+ public CliLexer(CharStream input) {
+ super(input);
+ }
+ public String getGrammarFileName() { return "/home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g"; }
+
+ // $ANTLR start T43
+ public final void mT43() throws RecognitionException {
+ try {
+ int _type = T43;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:6:5: ( '?' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:6:7: '?'
+ {
+ match('?');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end T43
+
+ // $ANTLR start T44
+ public final void mT44() throws RecognitionException {
+ try {
+ int _type = T44;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:7:5: ( '=' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:7:7: '='
+ {
+ match('=');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end T44
+
+ // $ANTLR start T45
+ public final void mT45() throws RecognitionException {
+ try {
+ int _type = T45;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:8:5: ( '[' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:8:7: '['
+ {
+ match('[');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end T45
+
+ // $ANTLR start T46
+ public final void mT46() throws RecognitionException {
+ try {
+ int _type = T46;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:9:5: ( ']' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:9:7: ']'
+ {
+ match(']');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end T46
+
+ // $ANTLR start K_CONFIG
+ public final void mK_CONFIG() throws RecognitionException {
+ try {
+ int _type = K_CONFIG;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:166:9: ( 'CONFIG' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:166:15: 'CONFIG'
+ {
+ match("CONFIG");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_CONFIG
+
+ // $ANTLR start K_CONNECT
+ public final void mK_CONNECT() throws RecognitionException {
+ try {
+ int _type = K_CONNECT;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:167:10: ( 'CONNECT' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:167:15: 'CONNECT'
+ {
+ match("CONNECT");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_CONNECT
+
+ // $ANTLR start K_CLUSTER
+ public final void mK_CLUSTER() throws RecognitionException {
+ try {
+ int _type = K_CLUSTER;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:168:10: ( 'CLUSTER' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:168:15: 'CLUSTER'
+ {
+ match("CLUSTER");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_CLUSTER
+
+ // $ANTLR start K_DESCRIBE
+ public final void mK_DESCRIBE() throws RecognitionException {
+ try {
+ int _type = K_DESCRIBE;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:169:11: ( 'DESCRIBE' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:169:15: 'DESCRIBE'
+ {
+ match("DESCRIBE");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_DESCRIBE
+
+ // $ANTLR start K_GET
+ public final void mK_GET() throws RecognitionException {
+ try {
+ int _type = K_GET;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:170:6: ( 'GET' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:170:15: 'GET'
+ {
+ match("GET");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_GET
+
+ // $ANTLR start K_HELP
+ public final void mK_HELP() throws RecognitionException {
+ try {
+ int _type = K_HELP;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:171:7: ( 'HELP' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:171:15: 'HELP'
+ {
+ match("HELP");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_HELP
+
+ // $ANTLR start K_EXIT
+ public final void mK_EXIT() throws RecognitionException {
+ try {
+ int _type = K_EXIT;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:172:7: ( 'EXIT' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:172:15: 'EXIT'
+ {
+ match("EXIT");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_EXIT
+
+ // $ANTLR start K_FILE
+ public final void mK_FILE() throws RecognitionException {
+ try {
+ int _type = K_FILE;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:173:7: ( 'FILE' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:173:15: 'FILE'
+ {
+ match("FILE");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_FILE
+
+ // $ANTLR start K_NAME
+ public final void mK_NAME() throws RecognitionException {
+ try {
+ int _type = K_NAME;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:174:7: ( 'NAME' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:174:15: 'NAME'
+ {
+ match("NAME");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_NAME
+
+ // $ANTLR start K_QUIT
+ public final void mK_QUIT() throws RecognitionException {
+ try {
+ int _type = K_QUIT;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:175:7: ( 'QUIT' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:175:15: 'QUIT'
+ {
+ match("QUIT");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_QUIT
+
+ // $ANTLR start K_SET
+ public final void mK_SET() throws RecognitionException {
+ try {
+ int _type = K_SET;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:176:6: ( 'SET' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:176:15: 'SET'
+ {
+ match("SET");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_SET
+
+ // $ANTLR start K_SHOW
+ public final void mK_SHOW() throws RecognitionException {
+ try {
+ int _type = K_SHOW;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:177:7: ( 'SHOW' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:177:15: 'SHOW'
+ {
+ match("SHOW");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_SHOW
+
+ // $ANTLR start K_TABLE
+ public final void mK_TABLE() throws RecognitionException {
+ try {
+ int _type = K_TABLE;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:178:8: ( 'TABLE' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:178:15: 'TABLE'
+ {
+ match("TABLE");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_TABLE
+
+ // $ANTLR start K_TABLES
+ public final void mK_TABLES() throws RecognitionException {
+ try {
+ int _type = K_TABLES;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:179:9: ( 'TABLES' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:179:15: 'TABLES'
+ {
+ match("TABLES");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_TABLES
+
+ // $ANTLR start K_THRIFT
+ public final void mK_THRIFT() throws RecognitionException {
+ try {
+ int _type = K_THRIFT;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:180:9: ( 'THRIFT' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:180:15: 'THRIFT'
+ {
+ match("THRIFT");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_THRIFT
+
+ // $ANTLR start K_VERSION
+ public final void mK_VERSION() throws RecognitionException {
+ try {
+ int _type = K_VERSION;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:181:10: ( 'VERSION' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:181:15: 'VERSION'
+ {
+ match("VERSION");
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end K_VERSION
+
+ // $ANTLR start Letter
+ public final void mLetter() throws RecognitionException {
+ try {
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:186:5: ( 'a' .. 'z' | 'A' .. 'Z' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:
+ {
+ if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+ input.consume();
+
+ }
+ else {
+ MismatchedSetException mse =
+ new MismatchedSetException(null,input);
+ recover(mse); throw mse;
+ }
+
+
+ }
+
+ }
+ finally {
+ }
+ }
+ // $ANTLR end Letter
+
+ // $ANTLR start Digit
+ public final void mDigit() throws RecognitionException {
+ try {
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:192:5: ( '0' .. '9' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:192:7: '0' .. '9'
+ {
+ matchRange('0','9');
+
+ }
+
+ }
+ finally {
+ }
+ }
+ // $ANTLR end Digit
+
+ // $ANTLR start Identifier
+ public final void mIdentifier() throws RecognitionException {
+ try {
+ int _type = Identifier;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:197:5: ( Letter ( Letter | Digit | '_' )* )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:197:7: Letter ( Letter | Digit | '_' )*
+ {
+ mLetter();
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:197:14: ( Letter | Digit | '_' )*
+ loop1:
+ do {
+ int alt1=2;
+ int LA1_0 = input.LA(1);
+
+ if ( ((LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z')) ) {
+ alt1=1;
+ }
+
+
+ switch (alt1) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:
+ {
+ if ( (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') ) {
+ input.consume();
+
+ }
+ else {
+ MismatchedSetException mse =
+ new MismatchedSetException(null,input);
+ recover(mse); throw mse;
+ }
+
+
+ }
+ break;
+
+ default :
+ break loop1;
+ }
+ } while (true);
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end Identifier
+
+ // $ANTLR start StringLiteral
+ public final void mStringLiteral() throws RecognitionException {
+ try {
+ int _type = StringLiteral;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:203:5: ( '\\'' (~ '\\'' )* '\\'' ( '\\'' (~ '\\'' )* '\\'' )* )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:5: '\\'' (~ '\\'' )* '\\'' ( '\\'' (~ '\\'' )* '\\'' )*
+ {
+ match('\'');
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:10: (~ '\\'' )*
+ loop2:
+ do {
+ int alt2=2;
+ int LA2_0 = input.LA(1);
+
+ if ( ((LA2_0>='\u0000' && LA2_0<='&')||(LA2_0>='(' && LA2_0<='\uFFFE')) ) {
+ alt2=1;
+ }
+
+
+ switch (alt2) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:11: ~ '\\''
+ {
+ if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='\uFFFE') ) {
+ input.consume();
+
+ }
+ else {
+ MismatchedSetException mse =
+ new MismatchedSetException(null,input);
+ recover(mse); throw mse;
+ }
+
+
+ }
+ break;
+
+ default :
+ break loop2;
+ }
+ } while (true);
+
+ match('\'');
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:24: ( '\\'' (~ '\\'' )* '\\'' )*
+ loop4:
+ do {
+ int alt4=2;
+ int LA4_0 = input.LA(1);
+
+ if ( (LA4_0=='\'') ) {
+ alt4=1;
+ }
+
+
+ switch (alt4) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:26: '\\'' (~ '\\'' )* '\\''
+ {
+ match('\'');
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:31: (~ '\\'' )*
+ loop3:
+ do {
+ int alt3=2;
+ int LA3_0 = input.LA(1);
+
+ if ( ((LA3_0>='\u0000' && LA3_0<='&')||(LA3_0>='(' && LA3_0<='\uFFFE')) ) {
+ alt3=1;
+ }
+
+
+ switch (alt3) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:204:32: ~ '\\''
+ {
+ if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='\uFFFE') ) {
+ input.consume();
+
+ }
+ else {
+ MismatchedSetException mse =
+ new MismatchedSetException(null,input);
+ recover(mse); throw mse;
+ }
+
+
+ }
+ break;
+
+ default :
+ break loop3;
+ }
+ } while (true);
+
+ match('\'');
+
+ }
+ break;
+
+ default :
+ break loop4;
+ }
+ } while (true);
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end StringLiteral
+
+ // $ANTLR start IntegerLiteral
+ public final void mIntegerLiteral() throws RecognitionException {
+ try {
+ int _type = IntegerLiteral;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:208:4: ( ( Digit )+ )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:208:6: ( Digit )+
+ {
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:208:6: ( Digit )+
+ int cnt5=0;
+ loop5:
+ do {
+ int alt5=2;
+ int LA5_0 = input.LA(1);
+
+ if ( ((LA5_0>='0' && LA5_0<='9')) ) {
+ alt5=1;
+ }
+
+
+ switch (alt5) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:208:6: Digit
+ {
+ mDigit();
+
+ }
+ break;
+
+ default :
+ if ( cnt5 >= 1 ) break loop5;
+ EarlyExitException eee =
+ new EarlyExitException(5, input);
+ throw eee;
+ }
+ cnt5++;
+ } while (true);
+
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end IntegerLiteral
+
+ // $ANTLR start DOT
+ public final void mDOT() throws RecognitionException {
+ try {
+ int _type = DOT;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:216:5: ( '.' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:216:7: '.'
+ {
+ match('.');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end DOT
+
+ // $ANTLR start SLASH
+ public final void mSLASH() throws RecognitionException {
+ try {
+ int _type = SLASH;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:220:5: ( '/' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:220:7: '/'
+ {
+ match('/');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end SLASH
+
+ // $ANTLR start SEMICOLON
+ public final void mSEMICOLON() throws RecognitionException {
+ try {
+ int _type = SEMICOLON;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:224:5: ( ';' )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:224:7: ';'
+ {
+ match(';');
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end SEMICOLON
+
+ // $ANTLR start WS
+ public final void mWS() throws RecognitionException {
+ try {
+ int _type = WS;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:228:5: ( ( ' ' | '\\r' | '\\t' | '\\n' ) )
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:228:8: ( ' ' | '\\r' | '\\t' | '\\n' )
+ {
+ if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+ input.consume();
+
+ }
+ else {
+ MismatchedSetException mse =
+ new MismatchedSetException(null,input);
+ recover(mse); throw mse;
+ }
+
+ channel=HIDDEN;
+
+ }
+
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end WS
+
+ // $ANTLR start COMMENT
+ public final void mCOMMENT() throws RecognitionException {
+ try {
+ int _type = COMMENT;
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:232:5: ( '--' (~ ( '\\n' | '\\r' ) )* | '/*' ( options {greedy=false; } : . )* '*/' )
+ int alt8=2;
+ int LA8_0 = input.LA(1);
+
+ if ( (LA8_0=='-') ) {
+ alt8=1;
+ }
+ else if ( (LA8_0=='/') ) {
+ alt8=2;
+ }
+ else {
+ NoViableAltException nvae =
+ new NoViableAltException("231:1: COMMENT : ( '--' (~ ( '\\n' | '\\r' ) )* | '/*' ( options {greedy=false; } : . )* '*/' );", 8, 0, input);
+
+ throw nvae;
+ }
+ switch (alt8) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:232:7: '--' (~ ( '\\n' | '\\r' ) )*
+ {
+ match("--");
+
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:232:12: (~ ( '\\n' | '\\r' ) )*
+ loop6:
+ do {
+ int alt6=2;
+ int LA6_0 = input.LA(1);
+
+ if ( ((LA6_0>='\u0000' && LA6_0<='\t')||(LA6_0>='\u000B' && LA6_0<='\f')||(LA6_0>='\u000E' && LA6_0<='\uFFFE')) ) {
+ alt6=1;
+ }
+
+
+ switch (alt6) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:232:13: ~ ( '\\n' | '\\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)<='\uFFFE') ) {
+ input.consume();
+
+ }
+ else {
+ MismatchedSetException mse =
+ new MismatchedSetException(null,input);
+ recover(mse); throw mse;
+ }
+
+
+ }
+ break;
+
+ default :
+ break loop6;
+ }
+ } while (true);
+
+ channel=HIDDEN;
+
+ }
+ break;
+ case 2 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:233:7: '/*' ( options {greedy=false; } : . )* '*/'
+ {
+ match("/*");
+
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:233:12: ( options {greedy=false; } : . )*
+ loop7:
+ do {
+ int alt7=2;
+ int LA7_0 = input.LA(1);
+
+ if ( (LA7_0=='*') ) {
+ int LA7_1 = input.LA(2);
+
+ if ( (LA7_1=='/') ) {
+ alt7=2;
+ }
+ else if ( ((LA7_1>='\u0000' && LA7_1<='.')||(LA7_1>='0' && LA7_1<='\uFFFE')) ) {
+ alt7=1;
+ }
+
+
+ }
+ else if ( ((LA7_0>='\u0000' && LA7_0<=')')||(LA7_0>='+' && LA7_0<='\uFFFE')) ) {
+ alt7=1;
+ }
+
+
+ switch (alt7) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:233:39: .
+ {
+ matchAny();
+
+ }
+ break;
+
+ default :
+ break loop7;
+ }
+ } while (true);
+
+ match("*/");
+
+ channel=HIDDEN;
+
+ }
+ break;
+
+ }
+ this.type = _type;
+ }
+ finally {
+ }
+ }
+ // $ANTLR end COMMENT
+
+ public void mTokens() throws RecognitionException {
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:8: ( T43 | T44 | T45 | T46 | K_CONFIG | K_CONNECT | K_CLUSTER | K_DESCRIBE | K_GET | K_HELP | K_EXIT | K_FILE | K_NAME | K_QUIT | K_SET | K_SHOW | K_TABLE | K_TABLES | K_THRIFT | K_VERSION | Identifier | StringLiteral | IntegerLiteral | DOT | SLASH | SEMICOLON | WS | COMMENT )
+ int alt9=28;
+ switch ( input.LA(1) ) {
+ case '?':
+ {
+ alt9=1;
+ }
+ break;
+ case '=':
+ {
+ alt9=2;
+ }
+ break;
+ case '[':
+ {
+ alt9=3;
+ }
+ break;
+ case ']':
+ {
+ alt9=4;
+ }
+ break;
+ case 'C':
+ {
+ switch ( input.LA(2) ) {
+ case 'O':
+ {
+ int LA9_24 = input.LA(3);
+
+ if ( (LA9_24=='N') ) {
+ switch ( input.LA(4) ) {
+ case 'N':
+ {
+ int LA9_53 = input.LA(5);
+
+ if ( (LA9_53=='E') ) {
+ int LA9_68 = input.LA(6);
+
+ if ( (LA9_68=='C') ) {
+ int LA9_81 = input.LA(7);
+
+ if ( (LA9_81=='T') ) {
+ int LA9_89 = input.LA(8);
+
+ if ( ((LA9_89>='0' && LA9_89<='9')||(LA9_89>='A' && LA9_89<='Z')||LA9_89=='_'||(LA9_89>='a' && LA9_89<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=6;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'F':
+ {
+ int LA9_54 = input.LA(5);
+
+ if ( (LA9_54=='I') ) {
+ int LA9_69 = input.LA(6);
+
+ if ( (LA9_69=='G') ) {
+ int LA9_82 = input.LA(7);
+
+ if ( ((LA9_82>='0' && LA9_82<='9')||(LA9_82>='A' && LA9_82<='Z')||LA9_82=='_'||(LA9_82>='a' && LA9_82<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=5;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ default:
+ alt9=21;}
+
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'L':
+ {
+ int LA9_25 = input.LA(3);
+
+ if ( (LA9_25=='U') ) {
+ int LA9_40 = input.LA(4);
+
+ if ( (LA9_40=='S') ) {
+ int LA9_55 = input.LA(5);
+
+ if ( (LA9_55=='T') ) {
+ int LA9_70 = input.LA(6);
+
+ if ( (LA9_70=='E') ) {
+ int LA9_83 = input.LA(7);
+
+ if ( (LA9_83=='R') ) {
+ int LA9_91 = input.LA(8);
+
+ if ( ((LA9_91>='0' && LA9_91<='9')||(LA9_91>='A' && LA9_91<='Z')||LA9_91=='_'||(LA9_91>='a' && LA9_91<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=7;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ default:
+ alt9=21;}
+
+ }
+ break;
+ case 'D':
+ {
+ int LA9_6 = input.LA(2);
+
+ if ( (LA9_6=='E') ) {
+ int LA9_26 = input.LA(3);
+
+ if ( (LA9_26=='S') ) {
+ int LA9_41 = input.LA(4);
+
+ if ( (LA9_41=='C') ) {
+ int LA9_56 = input.LA(5);
+
+ if ( (LA9_56=='R') ) {
+ int LA9_71 = input.LA(6);
+
+ if ( (LA9_71=='I') ) {
+ int LA9_84 = input.LA(7);
+
+ if ( (LA9_84=='B') ) {
+ int LA9_92 = input.LA(8);
+
+ if ( (LA9_92=='E') ) {
+ int LA9_98 = input.LA(9);
+
+ if ( ((LA9_98>='0' && LA9_98<='9')||(LA9_98>='A' && LA9_98<='Z')||LA9_98=='_'||(LA9_98>='a' && LA9_98<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=8;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'G':
+ {
+ int LA9_7 = input.LA(2);
+
+ if ( (LA9_7=='E') ) {
+ int LA9_27 = input.LA(3);
+
+ if ( (LA9_27=='T') ) {
+ int LA9_42 = input.LA(4);
+
+ if ( ((LA9_42>='0' && LA9_42<='9')||(LA9_42>='A' && LA9_42<='Z')||LA9_42=='_'||(LA9_42>='a' && LA9_42<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=9;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'H':
+ {
+ int LA9_8 = input.LA(2);
+
+ if ( (LA9_8=='E') ) {
+ int LA9_28 = input.LA(3);
+
+ if ( (LA9_28=='L') ) {
+ int LA9_43 = input.LA(4);
+
+ if ( (LA9_43=='P') ) {
+ int LA9_58 = input.LA(5);
+
+ if ( ((LA9_58>='0' && LA9_58<='9')||(LA9_58>='A' && LA9_58<='Z')||LA9_58=='_'||(LA9_58>='a' && LA9_58<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=10;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'E':
+ {
+ int LA9_9 = input.LA(2);
+
+ if ( (LA9_9=='X') ) {
+ int LA9_29 = input.LA(3);
+
+ if ( (LA9_29=='I') ) {
+ int LA9_44 = input.LA(4);
+
+ if ( (LA9_44=='T') ) {
+ int LA9_59 = input.LA(5);
+
+ if ( ((LA9_59>='0' && LA9_59<='9')||(LA9_59>='A' && LA9_59<='Z')||LA9_59=='_'||(LA9_59>='a' && LA9_59<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=11;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'F':
+ {
+ int LA9_10 = input.LA(2);
+
+ if ( (LA9_10=='I') ) {
+ int LA9_30 = input.LA(3);
+
+ if ( (LA9_30=='L') ) {
+ int LA9_45 = input.LA(4);
+
+ if ( (LA9_45=='E') ) {
+ int LA9_60 = input.LA(5);
+
+ if ( ((LA9_60>='0' && LA9_60<='9')||(LA9_60>='A' && LA9_60<='Z')||LA9_60=='_'||(LA9_60>='a' && LA9_60<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=12;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'N':
+ {
+ int LA9_11 = input.LA(2);
+
+ if ( (LA9_11=='A') ) {
+ int LA9_31 = input.LA(3);
+
+ if ( (LA9_31=='M') ) {
+ int LA9_46 = input.LA(4);
+
+ if ( (LA9_46=='E') ) {
+ int LA9_61 = input.LA(5);
+
+ if ( ((LA9_61>='0' && LA9_61<='9')||(LA9_61>='A' && LA9_61<='Z')||LA9_61=='_'||(LA9_61>='a' && LA9_61<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=13;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'Q':
+ {
+ int LA9_12 = input.LA(2);
+
+ if ( (LA9_12=='U') ) {
+ int LA9_32 = input.LA(3);
+
+ if ( (LA9_32=='I') ) {
+ int LA9_47 = input.LA(4);
+
+ if ( (LA9_47=='T') ) {
+ int LA9_62 = input.LA(5);
+
+ if ( ((LA9_62>='0' && LA9_62<='9')||(LA9_62>='A' && LA9_62<='Z')||LA9_62=='_'||(LA9_62>='a' && LA9_62<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=14;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'S':
+ {
+ switch ( input.LA(2) ) {
+ case 'H':
+ {
+ int LA9_33 = input.LA(3);
+
+ if ( (LA9_33=='O') ) {
+ int LA9_48 = input.LA(4);
+
+ if ( (LA9_48=='W') ) {
+ int LA9_63 = input.LA(5);
+
+ if ( ((LA9_63>='0' && LA9_63<='9')||(LA9_63>='A' && LA9_63<='Z')||LA9_63=='_'||(LA9_63>='a' && LA9_63<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=16;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'E':
+ {
+ int LA9_34 = input.LA(3);
+
+ if ( (LA9_34=='T') ) {
+ int LA9_49 = input.LA(4);
+
+ if ( ((LA9_49>='0' && LA9_49<='9')||(LA9_49>='A' && LA9_49<='Z')||LA9_49=='_'||(LA9_49>='a' && LA9_49<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=15;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ default:
+ alt9=21;}
+
+ }
+ break;
+ case 'T':
+ {
+ switch ( input.LA(2) ) {
+ case 'A':
+ {
+ int LA9_35 = input.LA(3);
+
+ if ( (LA9_35=='B') ) {
+ int LA9_50 = input.LA(4);
+
+ if ( (LA9_50=='L') ) {
+ int LA9_65 = input.LA(5);
+
+ if ( (LA9_65=='E') ) {
+ switch ( input.LA(6) ) {
+ case 'S':
+ {
+ int LA9_85 = input.LA(7);
+
+ if ( ((LA9_85>='0' && LA9_85<='9')||(LA9_85>='A' && LA9_85<='Z')||LA9_85=='_'||(LA9_85>='a' && LA9_85<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=18;}
+ }
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ {
+ alt9=21;
+ }
+ break;
+ default:
+ alt9=17;}
+
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'H':
+ {
+ int LA9_36 = input.LA(3);
+
+ if ( (LA9_36=='R') ) {
+ int LA9_51 = input.LA(4);
+
+ if ( (LA9_51=='I') ) {
+ int LA9_66 = input.LA(5);
+
+ if ( (LA9_66=='F') ) {
+ int LA9_79 = input.LA(6);
+
+ if ( (LA9_79=='T') ) {
+ int LA9_87 = input.LA(7);
+
+ if ( ((LA9_87>='0' && LA9_87<='9')||(LA9_87>='A' && LA9_87<='Z')||LA9_87=='_'||(LA9_87>='a' && LA9_87<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=19;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ default:
+ alt9=21;}
+
+ }
+ break;
+ case 'V':
+ {
+ int LA9_15 = input.LA(2);
+
+ if ( (LA9_15=='E') ) {
+ int LA9_37 = input.LA(3);
+
+ if ( (LA9_37=='R') ) {
+ int LA9_52 = input.LA(4);
+
+ if ( (LA9_52=='S') ) {
+ int LA9_67 = input.LA(5);
+
+ if ( (LA9_67=='I') ) {
+ int LA9_80 = input.LA(6);
+
+ if ( (LA9_80=='O') ) {
+ int LA9_88 = input.LA(7);
+
+ if ( (LA9_88=='N') ) {
+ int LA9_95 = input.LA(8);
+
+ if ( ((LA9_95>='0' && LA9_95<='9')||(LA9_95>='A' && LA9_95<='Z')||LA9_95=='_'||(LA9_95>='a' && LA9_95<='z')) ) {
+ alt9=21;
+ }
+ else {
+ alt9=20;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ else {
+ alt9=21;}
+ }
+ break;
+ case 'A':
+ case 'B':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'O':
+ case 'P':
+ case 'R':
+ case 'U':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ {
+ alt9=21;
+ }
+ break;
+ case '\'':
+ {
+ alt9=22;
+ }
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ {
+ alt9=23;
+ }
+ break;
+ case '.':
+ {
+ alt9=24;
+ }
+ break;
+ case '/':
+ {
+ int LA9_20 = input.LA(2);
+
+ if ( (LA9_20=='*') ) {
+ alt9=28;
+ }
+ else {
+ alt9=25;}
+ }
+ break;
+ case ';':
+ {
+ alt9=26;
+ }
+ break;
+ case '\t':
+ case '\n':
+ case '\r':
+ case ' ':
+ {
+ alt9=27;
+ }
+ break;
+ case '-':
+ {
+ alt9=28;
+ }
+ break;
+ default:
+ NoViableAltException nvae =
+ new NoViableAltException("1:1: Tokens : ( T43 | T44 | T45 | T46 | K_CONFIG | K_CONNECT | K_CLUSTER | K_DESCRIBE | K_GET | K_HELP | K_EXIT | K_FILE | K_NAME | K_QUIT | K_SET | K_SHOW | K_TABLE | K_TABLES | K_THRIFT | K_VERSION | Identifier | StringLiteral | IntegerLiteral | DOT | SLASH | SEMICOLON | WS | COMMENT );", 9, 0, input);
+
+ throw nvae;
+ }
+
+ switch (alt9) {
+ case 1 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:10: T43
+ {
+ mT43();
+
+ }
+ break;
+ case 2 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:14: T44
+ {
+ mT44();
+
+ }
+ break;
+ case 3 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:18: T45
+ {
+ mT45();
+
+ }
+ break;
+ case 4 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:22: T46
+ {
+ mT46();
+
+ }
+ break;
+ case 5 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:26: K_CONFIG
+ {
+ mK_CONFIG();
+
+ }
+ break;
+ case 6 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:35: K_CONNECT
+ {
+ mK_CONNECT();
+
+ }
+ break;
+ case 7 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:45: K_CLUSTER
+ {
+ mK_CLUSTER();
+
+ }
+ break;
+ case 8 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:55: K_DESCRIBE
+ {
+ mK_DESCRIBE();
+
+ }
+ break;
+ case 9 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:66: K_GET
+ {
+ mK_GET();
+
+ }
+ break;
+ case 10 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:72: K_HELP
+ {
+ mK_HELP();
+
+ }
+ break;
+ case 11 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:79: K_EXIT
+ {
+ mK_EXIT();
+
+ }
+ break;
+ case 12 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:86: K_FILE
+ {
+ mK_FILE();
+
+ }
+ break;
+ case 13 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:93: K_NAME
+ {
+ mK_NAME();
+
+ }
+ break;
+ case 14 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:100: K_QUIT
+ {
+ mK_QUIT();
+
+ }
+ break;
+ case 15 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:107: K_SET
+ {
+ mK_SET();
+
+ }
+ break;
+ case 16 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:113: K_SHOW
+ {
+ mK_SHOW();
+
+ }
+ break;
+ case 17 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:120: K_TABLE
+ {
+ mK_TABLE();
+
+ }
+ break;
+ case 18 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:128: K_TABLES
+ {
+ mK_TABLES();
+
+ }
+ break;
+ case 19 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:137: K_THRIFT
+ {
+ mK_THRIFT();
+
+ }
+ break;
+ case 20 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:146: K_VERSION
+ {
+ mK_VERSION();
+
+ }
+ break;
+ case 21 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:156: Identifier
+ {
+ mIdentifier();
+
+ }
+ break;
+ case 22 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:167: StringLiteral
+ {
+ mStringLiteral();
+
+ }
+ break;
+ case 23 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:181: IntegerLiteral
+ {
+ mIntegerLiteral();
+
+ }
+ break;
+ case 24 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:196: DOT
+ {
+ mDOT();
+
+ }
+ break;
+ case 25 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:200: SLASH
+ {
+ mSLASH();
+
+ }
+ break;
+ case 26 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:206: SEMICOLON
+ {
+ mSEMICOLON();
+
+ }
+ break;
+ case 27 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:216: WS
+ {
+ mWS();
+
+ }
+ break;
+ case 28 :
+ // /home/kannan/fbomb/trunk/fbcode/cassandra/src/com/facebook/infrastructure/cli/Cli.g:1:219: COMMENT
+ {
+ mCOMMENT();
+
+ }
+ break;
+
+ }
+
+ }
+
+
+
+
+}
\ No newline at end of file