Example #1
0
 //http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf section 9.4.4
 public static NumberLiteral CreateCSharpNumber(String name)
 {
     NumberLiteral term = new NumberLiteral(name);
       term.DefaultIntTypes = new TypeCode[] { TypeCode.Int32, TypeCode.UInt32, TypeCode.Int64, TypeCode.UInt64 };
       term.DefaultFloatType = TypeCode.Double;
       term.AddPrefix("0x", NumberFlags.Hex);
       term.AddSuffixCodes("u", TypeCode.UInt32, TypeCode.UInt64);
       term.AddSuffixCodes("l", TypeCode.Int64, TypeCode.UInt64);
       term.AddSuffixCodes("ul", TypeCode.UInt64);
       term.AddSuffixCodes("f", TypeCode.Single);
     term.AddSuffixCodes("d", TypeCode.Double);
       term.AddSuffixCodes("m", TypeCode.Decimal);
       return term;
 }
Example #2
0
        public GraphQueryLanguage()
            : base(false)
        {
            #region SetLanguageFlags

            this.SetLanguageFlags(LanguageFlags.CreateAst);
            this.SetLanguageFlags(LanguageFlags.AutoDetectTransient, false);

            //Todo: think about this:
            //this.SetLanguageFlags(LanguageFlags.TailRecursive);

            #endregion

            #region Terminals

            #region Comments

            //Terminals
            var comment             = new CommentTerminal("comment", "/*", "*/");
            var lineComment = new CommentTerminal("line_comment", "--", "\n", "\r\n");
            //TODO: remove block comment, added for testing LUA-style comments
            var blockComment        = new CommentTerminal("block_comment", "--[[", "]]");
            NonGrammarTerminals.Add(comment);
            NonGrammarTerminals.Add(lineComment);
            NonGrammarTerminals.Add(blockComment);

            #endregion

            #region Available value defs: Number, String, Name

            var number              = new NumberLiteral("number", NumberFlags.AllowSign | NumberFlags.DisableQuickParse);
            number.DefaultIntTypes  = new TypeCode[] { TypeCode.UInt64, TypeCode.Int64, NumberLiteral.TypeCodeBigInt };
            var string_literal      = new StringLiteral("string", "'", StringFlags.AllowsDoubledQuote | StringFlags.AllowsLineBreak);
            var location_literal    = new StringLiteral("file", "'", StringFlags.AllowsDoubledQuote | StringFlags.AllowsLineBreak | StringFlags.NoEscapes);

            var name                = new IdentifierTerminal("name", "ÄÖÜäöüß0123456789_", "ÄÖÜäöü0123456789$_");

            #endregion

            //var name_ext            = TerminalFactory.CreateSqlExtIdentifier("name_ext"); //removed, because we do not want to hav types or sth else with whitespaces, otherwise it conflicts with tupleSet

            #region Symbols

            S_CREATE                          = Symbol("CREATE");
            S_comma                           = Symbol(",");
            S_dot                             = Symbol(".");
            S_ASTERISK                        = Symbol("*");
            S_MINUS                           = Symbol("-");
            S_RHOMB                           = Symbol("#");
            S_AD                              = Symbol("@");
            S_EQUALS                          = Symbol("=");
            S_QUESTIONMARK_EQUALS             = Symbol("?=");

            S_colon                           = Symbol(":");
            S_BRACKET_LEFT                    = Symbol(TERMINAL_BRACKET_LEFT);
            S_BRACKET_RIGHT                   = Symbol(TERMINAL_BRACKET_RIGHT);
            S_TUPLE_BRACKET_LEFT              = Symbol("[");
            S_TUPLE_BRACKET_RIGHT             = Symbol("]");
            S_edgeInformationDelimiterSymbol  = Symbol(DBConstants.EdgeInformationDelimiterSymbol);
            S_edgeTraversalDelimiter          = Symbol(DBConstants.EdgeTraversalDelimiterSymbol);
            S_NULL                            = Symbol("NULL");
            S_NOT                             = Symbol("NOT");
            S_UNIQUE                          = Symbol("UNIQUE");
            S_WITH                            = Symbol("WITH");
            S_TABLE                           = Symbol("TABLE");
            S_ALTER                           = Symbol("ALTER");
            S_ADD                             = Symbol("ADD");
            S_TO                              = Symbol("TO");
            S_COLUMN                          = Symbol("COLUMN");
            S_DROP                            = Symbol("DROP");
            S_RENAME                          = Symbol("RENAME");
            S_CONSTRAINT                      = Symbol("CONSTRAINT");
            S_INDEX                           = Symbol("INDEX");
            S_INDICES                         = Symbol("INDICES");
            S_ON                              = Symbol("ON");
            S_KEY                             = Symbol("KEY");
            S_PRIMARY                         = Symbol("PRIMARY");
            S_INSERT                          = Symbol("INSERT");
            S_INTO                            = Symbol("INTO");
            S_UPDATE                          = Symbol("UPDATE");
            S_INSERTORUPDATE                  = Symbol("INSERTORUPDATE");
            S_INSERTORREPLACE                 = Symbol("INSERTORREPLACE");
            S_REPLACE                         = Symbol("REPLACE");
            S_SET                             = Symbol(TERMINAL_SET);
            S_REMOVE                          = Symbol("REMOVE");
            S_VALUES                          = Symbol("VALUES");
            S_DELETE                          = Symbol("DELETE");
            S_SELECT                          = Symbol("SELECT");
            S_FROM                            = Symbol("FROM");
            S_AS                              = Symbol("AS");
            S_COUNT                           = Symbol("COUNT");
            S_JOIN                            = Symbol("JOIN");
            S_BY                              = Symbol("BY");
            S_WHERE                           = Symbol("WHERE");
            S_TYPE                            = Symbol("TYPE");
            S_TYPES                           = Symbol("TYPES");
            S_VERTEX                          = Symbol("VERTEX");
            S_VERTICES                        = Symbol("VERTICES");
            S_EDITION                         = Symbol("EDITION");
            S_INDEXTYPE                       = Symbol("INDEXTYPE");
            S_LIST                            = Symbol(TERMINAL_LIST);
            S_ListTypePrefix                  = Symbol(TERMINAL_LT);
            S_ListTypePostfix                 = Symbol(TERMINAL_GT);
            S_EXTENDS                         = Symbol("EXTENDS");
            S_ATTRIBUTES                      = Symbol("ATTRIBUTES");
            S_MATCHES                         = Symbol("MATCHES");
            S_LIMIT                           = Symbol("LIMIT");
            S_DEPTH                           = Symbol("DEPTH");
            S_REFERENCE                       = Symbol("REFERENCE");
            S_REF                             = Symbol("REF");
            S_REFUUID                         = Symbol("REFUUID");
            S_REFERENCEUUID                   = Symbol("REFERENCEUUID");
            S_LISTOF                          = Symbol(DBConstants.LISTOF);
            S_SETOF                           = Symbol(DBConstants.SETOF);
            S_SETOFUUIDS                      = Symbol(DBConstants.SETOFUUIDS);
            S_UUID                            = Symbol("UUID");
            S_OFFSET                          = Symbol("OFFSET");
            S_TRUNCATE                        = Symbol("TRUNCATE");
            S_TRUE                            = Symbol(TERMINAL_TRUE);
            S_FALSE                           = Symbol(TERMINAL_FALSE);
            S_SORTED                          = Symbol(TERMINAL_SORTED);
            S_ASC                             = Symbol(TERMINAL_ASC);
            S_DESC                            = Symbol(TERMINAL_DESC);
            S_QUEUESIZE                       = Symbol(TERMINAL_QUEUESIZE);
            S_WEIGHTED                        = Symbol(TERMINAL_WEIGHTED);
            S_GET                             = Symbol("GET");
            S_DB                              = Symbol("DB");
            S_SESSION                         = Symbol("SESSION");
            S_ATTRIBUTE                       = Symbol("ATTRIBUTE");
            S_DEFAULT                         = Symbol("DEFAULT");
            S_BACKWARDEDGE                    = Symbol("BACKWARDEDGE");
            S_BACKWARDEDGES                   = Symbol("BACKWARDEDGES");
            S_DESCRIBE                        = Symbol("DESCRIBE");
            S_FUNCTION                        = Symbol("FUNCTION");
            S_FUNCTIONS                       = Symbol("FUNCTIONS");
            S_AGGREGATE                       = Symbol("AGGREGATE");
            S_AGGREGATES                      = Symbol("AGGREGATES");
            S_SETTING                         = Symbol("SETTING");
            S_SETTINGS                        = Symbol("SETTINGS");
            S_INDICES                         = Symbol("INDICES");
            S_EDGE                            = Symbol("EDGE");
            S_EDGES                           = Symbol("EDGES");
            S_MANDATORY                       = Symbol("MANDATORY");
            S_ABSTRACT                        = Symbol("ABSTRACT");
            S_BEGIN                           = Symbol("BEGIN");
            S_TRANSACTION                     = Symbol("TRANSACTION");
            S_TRANSACTDISTRIBUTED             = Symbol(DBConstants.TRANSACTION_DISTRIBUTED);
            S_TRANSACTLONGRUNNING             = Symbol(DBConstants.TRANSACTION_LONGRUNNING);
            S_TRANSACTISOLATION               = Symbol(DBConstants.TRANSACTION_ISOLATION);
            S_TRANSACTNAME                    = Symbol(DBConstants.TRANSACTION_NAME);
            S_TRANSACTTIMESTAMP               = Symbol(DBConstants.TRANSACTION_TIMESTAMP);
            S_TRANSACTROLLBACK                = Symbol(DBConstants.TRANSACTION_ROLLBACK);
            S_TRANSACTCOMMIT                  = Symbol(DBConstants.TRANSACTION_COMMIT);
            S_TRANSACTCOMROLLASYNC            = Symbol(DBConstants.TRANSACTION_COMROLLASYNC);
            S_ADDTOLIST                       = Symbol("+=");
            S_REMOVEFROMLIST                  = Symbol("-=");
            S_DUMP                            = Symbol("DUMP");
            S_EXPORT                          = Symbol("EXPORT");
            S_ALL                             = Symbol("ALL");
            S_GDDL                            = Symbol("GDDL");
            S_GDML                            = Symbol("GDML");
            S_GQL                             = Symbol("GQL");
            S_CSV                             = Symbol("CSV");
            S_COMMENT                         = Symbol("COMMENT");
            S_REBUILD                         = Symbol("REBUILD");
            S_DEFINE                          = Symbol("DEFINE");
            S_UNDEFINE                        = Symbol("UNDEFINE");
            S_VIA                             = Symbol("VIA");
            S_LINK                            = Symbol("LINK");
            S_UNLINK                          = Symbol("UNLINK");

            #region IMPORT

            S_IMPORT                          = Symbol("IMPORT");
            S_COMMENTS                        = Symbol("COMMENTS");
            S_PARALLELTASKS                   = Symbol("PARALLELTASKS");
            S_VERBOSITY                       = Symbol("VERBOSITY");
            S_FORMAT                          = Symbol("FORMAT");

            #endregion

            #endregion

            #endregion

            #region Non-Terminals

            #region ID related

            var Id                              = new NonTerminal("Id", CreateIDNode);
            var Id_simple                       = new NonTerminal("id_simple", typeof(AstNode));
            var id_typeAndAttribute             = new NonTerminal("id_typeAndAttribute");
            var idlist                          = new NonTerminal("idlist");
            var id_simpleList                   = new NonTerminal("id_simpleList");
            var id_simpleDotList                = new NonTerminal("id_simpleDotList");
            var IdOrFunc                        = new NonTerminal("IdOrFunc");
            var IdOrFuncList                    = new NonTerminal("IdOrFuncList", CreateIDNode);
            var IDOrFuncDelimiter               = new NonTerminal("IDOrFuncDelimiter");
            var dotWrapper                      = new NonTerminal("dotWrapper", CreateDotDelimiter);
            var edgeAccessorWrapper             = new NonTerminal("edgeAccessorWrapper", CreateEdgeAccessorDelimiter);
            var EdgeInformation                 = new NonTerminal("EdgeInformation", CreateEdgeInformation);
            var EdgeTraversalWithFunctions      = new NonTerminal("EdgeTraversalWithFunctions", CreateEdgeTraversal);
            var EdgeTraversalWithOutFunctions   = new NonTerminal("EdgeTraversalWithOutFunctions", CreateEdgeTraversal);

            #endregion

            #region AStatements

            var singlestmt                  = new NonTerminal("singlestmt");
            //            var stmt = new NonTerminal("stmt", typeof(StatementNode));
            var createTableStmt             = new NonTerminal("createTableStmt");
            var createIndexStmt             = new NonTerminal("createIndexStmt", CreateCreateIndexStatementNode);
            var alterStmt                   = new NonTerminal("alterStmt", CreateAlterStmNode);
            var dropTypeStmt                = new NonTerminal("dropTypeStmt", CreateDropTypeStmNode);
            var dropIndexStmt               = new NonTerminal("dropIndexStmt", CreateDropIndexStmNode);
            var InsertStmt                  = new NonTerminal("InsertStmt", CreateInsertStatementNode);
            var updateStmt                  = new NonTerminal("updateStmt", CreateUpdateStatementNode);
            var deleteStmt                  = new NonTerminal("deleteStmt", CreateDeleteStatementNode);
            var SelectStmtGraph             = new NonTerminal("SelectStmtGraph", CreateSelectStatementNode);
            var parSelectStmt               = new NonTerminal("parSelectStmt", CreatePartialSelectStmtNode);
            var createTypesStmt             = new NonTerminal("createTypesStmt", CreateCreateTypesStatementNode);
            var insertorupdateStmt          = new NonTerminal("insertorupdateStmt", CreateInsertOrUpdateStatementNode);
            var insertorreplaceStmt         = new NonTerminal("insertorreplaceStmt", CreateInsertOrReplaceStatementNode);
            var replaceStmt                 = new NonTerminal("replaceStmt", CreateReplaceStatementNode);
            var transactStmt                = new NonTerminal("transactStmt", CreateTransActionStatementNode);
            var commitRollBackTransactStmt  = new NonTerminal("commitRollBackTransactStmt", CreateCommitRollbackTransActionNode);
            var linkStmt                    = new NonTerminal("linkStmt", CreateLinkStmtNode);
            var unlinkStmt                  = new NonTerminal("unlinkStmt", CreateUnlinkStmt);

            #endregion

            var deleteStmtMember            = new NonTerminal("deleteStmtMember");
            var uniqueOpt                   = new NonTerminal("uniqueOpt",              typeof(uniqueOptNode));
            var IndexAttributeList          = new NonTerminal("IndexAttributeList",     typeof(IndexAttributeListNode));
            var IndexAttributeMember        = new NonTerminal("IndexAttributeMember",   typeof(IndexAttributeNode));
            var IndexAttributeType          = new NonTerminal("IndexAttributeType");
            var orderByAttributeList        = new NonTerminal("orderByAttributeList");
            var orderByAttributeListMember  = new NonTerminal("orderByAttributeListMember");
            var AttributeOrderDirectionOpt  = new NonTerminal("AttributeOrderDirectionOpt");
            BNF_IndexTypeOpt                = new NonTerminal("indexTypeOpt",           typeof(IndexTypeOptNode));
            var indexNameOpt                = new NonTerminal("indextNameOpt",          typeof(IndexNameOptNode));
            var editionOpt                  = new NonTerminal("editionOpt",             typeof(EditionOptNode));
            var alterCmd                    = new NonTerminal("alterCmd",               typeof(AlterCommandNode));
            var alterCmdList                = new NonTerminal("alterCmdList");
            var insertData                  = new NonTerminal("insertData");
            var intoOpt                     = new NonTerminal("intoOpt");
            var assignList                  = new NonTerminal("assignList");
            var whereClauseOpt              = new NonTerminal("whereClauseOpt",         CreateWhereExpressionNode);
            var extendsOpt                  = new NonTerminal("extendsOpt");
            var abstractOpt                 = new NonTerminal("abstractOpt");
            var commentOpt                  = new NonTerminal("CommentOpt");
            var bulkTypeList                = new NonTerminal("bulkTypeList");
            var attributesOpt               = new NonTerminal("attributesOpt");
            var insertValuesOpt             = new NonTerminal("insertValuesOpt");

            #region Expression

            var BNF_Expression              = new NonTerminal("expression", typeof(ExpressionNode));
            var expressionOfAList           = new NonTerminal("expressionOfAList", typeof(ExpressionOfAListNode));
            var BNF_ExprList                = new NonTerminal("exprList");
            var exprListOfAList             = new NonTerminal("exprListOfAList");
            var unExpr                      = new NonTerminal("unExpr", CreateUnExpressionNode);
            var unOp                        = new NonTerminal("unOp");
            var binExpr                     = new NonTerminal("binExpr", CreateBinaryExpressionNode);
            var binOp                       = new NonTerminal("binOp");
            var inExpr                      = new NonTerminal("inExpr");

            #endregion

            #region Select

            var selList                     = new NonTerminal("selList");
            var fromClauseOpt               = new NonTerminal("fromClauseOpt");
            var groupClauseOpt              = new NonTerminal("groupClauseOpt");
            var havingClauseOpt             = new NonTerminal("havingClauseOpt", typeof(HavingExpressionNode));
            var orderClauseOpt              = new NonTerminal("orderClauseOpt", typeof(OrderByNode));
            var selectionList               = new NonTerminal("selectionList");
            var selectionListElement        = new NonTerminal("selectionListElement", typeof(SelectionListElementNode));
            selectionSource                 = new NonTerminal("selectionSource");
            var selByType                   = new NonTerminal("selByType", CreateSelByTypeNode);
            var aliasOpt                    = new NonTerminal("aliasOpt");
            var aliasOptName                = new NonTerminal("aliasOptName");
            var selectOutputOpt             = new NonTerminal("selectOutputOpt", typeof(SelectOutputOptNode));

            #endregion

            #region Aggregates & Functions

            BNF_Aggregate                   = new NonTerminal("aggregate", CreateAggregateNode);
            BNF_AggregateArg                = new NonTerminal("aggregateArg");
            var function                    = new NonTerminal("function", CreateFunctionCallNode);
            var functionName                = new NonTerminal("functionName");
            BNF_FunArgs                     = new NonTerminal("funArgs");
            BNF_FuncCall                    = new NonTerminal("funCall", CreateFunctionCallNode);

            #endregion

            #region Tuple

            var tuple                       = new NonTerminal("tuple", typeof(TupleNode));
            var bracketLeft                 = new NonTerminal(DBConstants.BracketLeft);
            var bracketRight                = new NonTerminal(DBConstants.BracketRight);

            #endregion

            var term                        = new NonTerminal("term");
            var notOpt                      = new NonTerminal("notOpt");

            var typeOrVertex                = new NonTerminal("typeOrVertex");
            BNF_TypesOrVertices             = new NonTerminal("typesOrVertices");

            var GraphDBType                 = new NonTerminal(DBConstants.GraphDBType, CreateGraphDBTypeNode);
            var AttributeList               = new NonTerminal("AttributeList");
            var AttrDefinition              = new NonTerminal("AttrDefinition",     CreateAttributeDefinitionNode);
            var ResultObject                = new NonTerminal("ResultObject");
            var ResultList                  = new NonTerminal("ResultList");
            var MatchingClause              = new NonTerminal("MatchingClause");
            var Matching                    = new NonTerminal("MatchingClause");
            var PrefixOperation             = new NonTerminal("PrefixOperation");
            var ParameterList               = new NonTerminal("ParameterList");
            var TypeList                    = new NonTerminal("TypeList",           CreateTypeListNode);
            var AType                       = new NonTerminal("AType",              CreateATypeNode);
            var TypeWrapper                 = new NonTerminal("TypeWrapper");

            #region Attribute changes

            var AttrAssignList              = new NonTerminal("AttrAssignList", CreateAttrAssignListNode);
            var AttrUpdateList              = new NonTerminal("AttrUpdateList", typeof(AttrUpdateOrAssignListNode));
            var AttrAssign                  = new NonTerminal("AttrAssign", typeof(AttributeAssignNode));
            var AttrRemove                  = new NonTerminal("AttrRemove", typeof(AttrRemoveNode));
            var ListAttrUpdate              = new NonTerminal("AttrUpdate");
            var AddToListAttrUpdate         = new NonTerminal("AddToListAttrUpdate", typeof(AddToListAttrUpdateNode));
            var AddToListAttrUpdateAddTo    = new NonTerminal("AddToListAttrUpdateAddTo", CreateAddToListAttrUpdateAddToNode);
            var AddToListAttrUpdateOperator = new NonTerminal("AddToListAttrUpdateOperator", CreateAddToListAttrUpdateOperatorNode);
            var RemoveFromListAttrUpdate    = new NonTerminal("RemoveFromListAttrUpdate", typeof(RemoveFromListAttrUpdateNode));
            var RemoveFromListAttrUpdateAddToRemoveFrom = new NonTerminal("RemoveFromListAttrUpdateAddToRemoveFrom", CreateRemoveFromListAttrUpdateAddToRemoveFromNode);
            var RemoveFromListAttrUpdateAddToOperator   = new NonTerminal("RemoveFromListAttrUpdateAddToOperator", CreateRemoveFromListAttrUpdateAddToOperatorNode);
            var AttrUpdateOrAssign          = new NonTerminal("AttrUpdateOrAssign");
            var CollectionOfDBObjects       = new NonTerminal("ListOfDBObjects", typeof(CollectionOfDBObjectsNode));
            var CollectionTuple = new NonTerminal("CollectionTuple", typeof(TupleNode));
            var ExtendedExpressionList = new NonTerminal("ExtendedExpressionList");
            var ExtendedExpression = new NonTerminal("ExtendedExpression", typeof(ExpressionOfAListNode));

            #endregion

            var Reference                   = new NonTerminal(S_REFERENCE.Symbol,   typeof(SetRefNode));
            var offsetOpt                   = new NonTerminal("offsetOpt",          typeof(OffsetNode));
            var resolutionDepthOpt          = new NonTerminal("resolutionDepthOpt");
            var limitOpt                    = new NonTerminal("limitOpt",           typeof(LimitNode));
            var SimpleIdList                = new NonTerminal("SimpleIdList");
            var bulkTypeListMember          = new NonTerminal("bulkTypeListMember", CreateBulkTypeListMemberNode);
            var bulkType                    = new NonTerminal("bulkType",           CreateBulkTypeNode);
            var truncateStmt                = new NonTerminal("truncateStmt",       CreateTruncateStmNode);
            var uniquenessOpt               = new NonTerminal("UniquenessOpt",      typeof(UniqueAttributesOptNode));
            var mandatoryOpt                = new NonTerminal("MandatoryOpt",       typeof(MandatoryOptNode));

            #region Transactions

            var TransactOptions             = new NonTerminal("TransactOptions");
            var TransactAttributes          = new NonTerminal("TransactAttributes");
            var TransactIsolation           = new NonTerminal("TransactIsolation");
            var TransactName                = new NonTerminal("TransactName");
            var TransactTimestamp           = new NonTerminal("TransactTimestamp");
            var TransactCommitRollbackOpt   = new NonTerminal("TransactCommitRollbackOpt");
            var TransactCommitRollbackType  = new NonTerminal("TransactCommitRollbackType");

            #endregion

            var Value                       = new NonTerminal("Value");
            var ValueList                   = new NonTerminal("ValueList");
            var BooleanVal                  = new NonTerminal("BooleanVal");

            var ListType                    = new NonTerminal("ListType");
            var ListParametersForExpression = new NonTerminal("ListParametersForExpression", typeof(ParametersNode));
            var LinkCondition               = new NonTerminal("LinkCondition");

            #region EdgeType

            var EdgeTypeDef                 = new NonTerminal("EdgeTypeDef", CreateEdgeTypeDefNode);
            var SingleEdgeTypeDef           = new NonTerminal("EdgeTypeDef", CreateSingleEdgeTypeDefNode);
            var DefaultValueDef             = new NonTerminal("DefaultValueDef", typeof(DefaultValueDefNode));
            var EdgeTypeParams              = new NonTerminal("EdgeTypeParams", typeof(EdgeTypeParamsNode));
            var EdgeTypeParam               = new NonTerminal("EdgeTypeParamNode", typeof(EdgeTypeParamNode));
            var EdgeType_Sorted             = new NonTerminal("ListPropertyAssign_Sorted", typeof(EdgeType_SortedNode));
            var EdgeType_SortedMember       = new NonTerminal("ListPropertyAssign_SortedMember");
            var AttrDefaultOpValue          = new NonTerminal("AttrDefaultOpValue", CreateAttrDefaultValueNode);

            #endregion

            #region Settings

            var SettingsStatement           = new NonTerminal("SettingStatement", CreateSettingStatementNode);
            var SettingTypeNode             = new NonTerminal("SettingTypeNode", CreateSettingTypeNode);
            var SettingAttrNode             = new NonTerminal("SettingAttrNode", CreateSettingAttrNode);
            var SettingScope                = new NonTerminal("SettingScope", typeof(SettingScopeNode));
            var SettingOpGet                = new NonTerminal("SettingOpGet");
            var SettingOpSet                = new NonTerminal("SettingOpSet");
            var SettingOpRemove             = new NonTerminal("SettingOpRemove");
            var SettingOperation            = new NonTerminal("SettingOperation", typeof(SettingOperationNode));
            var SettingOpSetLst             = new NonTerminal("SettingOpSetLst");
            var SettingOpGetLst             = new NonTerminal("SettingOpGetLst");
            var SettingOpRemLst             = new NonTerminal("SettingOpRemLst");
            var SettingItems                = new NonTerminal("SettingItems");
            var SettingItemsSet             = new NonTerminal("SettingItemsSet");
            var SettingItemSetVal           = new NonTerminal("SettingItemSetVal");
            var SettingItemSetLst           = new NonTerminal("SettingItemSetLst");
            var SettingTypeStmLst           = new NonTerminal("SettingTypeStmLst");
            var SettingAttrStmLst           = new NonTerminal("SettingAttrStmLst");

            #endregion

            #region BackwardEdges

            var backwardEdgesOpt            = new NonTerminal("BackwardEdges", CreateBackwardEdgesNode);
            var BackwardEdgesSingleDef      = new NonTerminal("BackwardEdgesSingleDef", CreateBackwardEdgeNode);
            var BackwardEdgesList           = new NonTerminal("BackwardEdgesList");

            #endregion

            #region Index

            var indexOptOnCreateType            = new NonTerminal("IndexOptOnCreateType");
            var indexOnCreateType               = new NonTerminal("indexOnCreateType", CreateIndexOnCreateType);
            var IndexOptOnCreateTypeMember      = new NonTerminal("IndexOptOnCreateTypeMember", CreateIndexOptOnCreateTypeMemberNode);
            var IndexOptOnCreateTypeMemberList  = new NonTerminal("IndexOptOnCreateTypeMemberList");
            var IndexDropOnAlterType            = new NonTerminal("IndexDropOnAlterType", CreateDropIndicesNode);
            var IndexDropOnAlterTypeMember      = new NonTerminal("IndexDropOnAlterTypeMember");
            var IndexDropOnAlterTypeMemberList  = new NonTerminal("IndexDropOnAlterTypeMemberList");

            #endregion

            #region Dump/Export

            var dumpStmt                        = new NonTerminal("Dump", CreateDumpNode);
            var dumpType                        = new NonTerminal("dumpType",   CreateDumpTypeNode);
            var dumpFormat                      = new NonTerminal("dumpFormat", CreateDumpFormatNode);
            var typeOptionalList                = new NonTerminal("typeOptionalList");
            var dumpDestination                 = new NonTerminal("dumpDestination");

            #endregion

            #region Describe

            var DescrInfoStmt               = new NonTerminal("DescrInfoStmt",      CreateDescribeNode);
            var DescrArgument               = new NonTerminal("DescrArgument");
            var DescrFuncStmt               = new NonTerminal("DescrFuncStmt",      CreateDescrFunc);
            var DescrFunctionsStmt          = new NonTerminal("DescrFunctionsStmt", CreateDescrFunctions);
            var DescrAggrStmt               = new NonTerminal("DescrAggrStmt",      CreateDescrAggr);
            var DescrAggrsStmt              = new NonTerminal("DescrAggrsStmt",     CreateDescrAggrs);
            var DescrSettStmt               = new NonTerminal("DescrSettStmt",      CreateDescrSett);
            var DescrSettItem               = new NonTerminal("DescrSettItem",      CreateDescrSettItem);
            var DescrSettingsItems          = new NonTerminal("DescrSettingsItems", CreateDescrSettingsItems);
            var DescrSettingsStmt           = new NonTerminal("DescrSettingsStmt",  CreateDescrSettings);
            var DescrTypeStmt               = new NonTerminal("DescrTypeStmt",      CreateDescrType);
            var DescrTypesStmt              = new NonTerminal("DescrTypesStmt",     CreateDescrTypes);
            var DescrIdxStmt                = new NonTerminal("DescrIdxStmt",       CreateDescrIdx);
            var DescrIdxsStmt               = new NonTerminal("DescrIdxsStmt",      CreateDescrIdxs);
            var DescrIdxEdtStmt             = new NonTerminal("DescrIdxEdtStmt");
            var DescrEdgeStmt               = new NonTerminal("DescrEdgeStmt",      CreateDescrEdge);
            var DescrEdgesStmt              = new NonTerminal("DescrEdgesStmt",     CreateDescrEdges);

            #endregion

            #region REBUILD INDICES

            var rebuildIndicesStmt          = new NonTerminal("rebuildIndicesStmt", CreateRebuildIndicesNode);
            var rebuildIndicesTypes         = new NonTerminal("rebuildIndiceTypes");

            #endregion

            #region Import

            BNF_ImportFormat        = new NonTerminal("importFormat");
            BNF_ImportStmt          = new NonTerminal("import", CreateImportNode);
            var paramParallelTasks  = new NonTerminal("parallelTasks", CreateParallelTaskNode);
            var paramComments       = new NonTerminal("comments", CreateCommentsNode);
            var verbosity           = new NonTerminal("verbosity", CreateVerbosityNode);
            var verbosityTypes      = new NonTerminal("verbosityTypes");

            #endregion

            #endregion

            #region Statements

            #region GQL root

            //BNF Rules
            this.Root = singlestmt;

            singlestmt.Rule = SelectStmtGraph
                            | InsertStmt
                            | alterStmt
                            | updateStmt
                            | dropTypeStmt
                            | dropIndexStmt
                            | createIndexStmt
                            | createTypesStmt
                            | deleteStmt
                            | SettingsStatement
                            | truncateStmt
                            | DescrInfoStmt
                            | insertorupdateStmt
                            | insertorreplaceStmt
                            | replaceStmt
                            | dumpStmt
                            | transactStmt
                            | commitRollBackTransactStmt
                            | rebuildIndicesStmt
                            | BNF_ImportStmt
                            | linkStmt
                            | unlinkStmt;

            #endregion

            #region misc

            #region ID

            #region wo functions

            Id_simple.Rule = name;

            EdgeTraversalWithOutFunctions.Rule = dotWrapper + Id_simple;

            Id.SetOption(TermOptions.IsList);
            Id.Rule =       Id_simple
                        |   Id + EdgeTraversalWithOutFunctions;
            //old
            //Id.Rule = MakePlusRule(Id, dotWrapper, Id_simple);

            Id.Description = "an id is composed by an identifier a dot and a second identifier -  or a list of them an id could be ‘U.Name’ or ‘U.Friends.Age’\n";
            idlist.Rule = MakePlusRule(idlist, S_comma, Id);
            id_simpleList.Rule = MakePlusRule(id_simpleList, S_comma, Id_simple);
            id_simpleDotList.Rule = MakePlusRule(id_simpleDotList, S_dot, Id_simple);
            id_typeAndAttribute.Rule = TypeWrapper + S_dot + Id;

            #endregion

            #region ID_or_Func

            IdOrFunc.Rule =     name
                            |   BNF_FuncCall;

            dotWrapper.Rule = S_edgeTraversalDelimiter;

            edgeAccessorWrapper.Rule = S_edgeInformationDelimiterSymbol;

            //IDOrFuncDelimiter.Rule =        dotWrapper
            //                            |   edgeAccessorWrapper;

            EdgeTraversalWithFunctions.Rule = dotWrapper + IdOrFunc;

            EdgeInformation.Rule = edgeAccessorWrapper + Id_simple;

            IdOrFuncList.SetOption(TermOptions.IsList);
            IdOrFuncList.Rule =         IdOrFunc
                                    |   IdOrFuncList + EdgeInformation
                                    |   IdOrFuncList + EdgeTraversalWithFunctions;

            //old
            //IdOrFuncList.Rule = MakePlusRule(IdOrFuncList, IDOrFuncDelimiter, IdOrFunc);

            #endregion

            #endregion

            #region typeList

            TypeList.Rule = MakePlusRule(TypeList, S_comma, AType);
            TypeList.Description = "specify the type object to be selected for example a type list could be ‘User U’, ‘Car C’, …\n";

            AType.Rule = Id_simple + Id_simple
                        | Id_simple;

            //AType.Rule = Id + Id_simple
            //                | Id;

            TypeWrapper.Rule = AType;

            #endregion

            #region CreateIndexAttribute

            IndexAttributeList.Rule = MakePlusRule(IndexAttributeList, S_comma, IndexAttributeMember);

            IndexAttributeMember.Rule = IndexAttributeType;// + AttributeOrderDirectionOpt;

            IndexAttributeType.Rule = Id_simple | id_typeAndAttribute;

            #endregion

            #region OrderDirections

            AttributeOrderDirectionOpt.Rule = Empty
                                                | S_ASC
                                                | S_DESC;

            #endregion

            #region Boolean

            BooleanVal.Rule = S_TRUE | S_FALSE;

            #endregion

            #region Value

            Value.Rule = string_literal | number | BooleanVal;

            ValueList.Rule = MakeStarRule(ValueList, S_comma, Value);

            #endregion

            #region ListType

            ListType.Rule = S_LIST;

            ListParametersForExpression.Rule = Empty
                                         | S_colon + S_BRACKET_LEFT + ValueList + S_BRACKET_RIGHT;

            EdgeType_SortedMember.Rule = S_ASC | S_DESC;
            EdgeType_Sorted.Rule = S_SORTED + "=" + EdgeType_SortedMember;

            #endregion

            #region GraphType

            //                 SET<                   WEIGHTED  (Double, DEFAULT=2, SORTED=DESC)<   [idsimple]  >>
            EdgeTypeDef.Rule = S_SET + S_ListTypePrefix + Id_simple + S_BRACKET_LEFT + EdgeTypeParams + S_BRACKET_RIGHT + S_ListTypePrefix + Id_simple + S_ListTypePostfix + S_ListTypePostfix;
            //                       COUNTED        (Integer, DEFAULT=2)                   <   [idsimple]  >
            SingleEdgeTypeDef.Rule = Id_simple + S_BRACKET_LEFT + EdgeTypeParams + S_BRACKET_RIGHT + S_ListTypePrefix + Id_simple + S_ListTypePostfix;

            EdgeTypeParams.Rule = MakeStarRule(EdgeTypeParams, S_comma, EdgeTypeParam);
            EdgeTypeParam.Rule = Id_simple
                               | DefaultValueDef
                               | EdgeType_Sorted
                               | string_literal;

            EdgeTypeParam.SetOption(TermOptions.IsTransient, false);

            DefaultValueDef.Rule = S_DEFAULT + "=" + Value;

            GraphDBType.Rule = Id_simple
                                   // LIST<[idsimple]>
                                   | S_LIST + S_ListTypePrefix + Id_simple + S_ListTypePostfix
                                   | S_SET + S_ListTypePrefix + Id_simple + S_ListTypePostfix
                                   | EdgeTypeDef
                                   | SingleEdgeTypeDef;

            #endregion

            #region AttributeList

            AttributeList.Rule = MakePlusRule(AttributeList, S_comma, AttrDefinition);

            AttrDefinition.Rule = GraphDBType + Id_simple + AttrDefaultOpValue;

            #endregion

            #region BackwardEdgesList

            BackwardEdgesList.Rule = MakePlusRule(BackwardEdgesList, S_comma, BackwardEdgesSingleDef);

            BackwardEdgesSingleDef.Rule = Id_simple + S_dot + Id_simple + Id_simple;
                                            //| Id_simple + S_dot + Id_simple + S_ListTypePrefix + Id_simple + S_BRACKET_LEFT + EdgeTypeParams + S_BRACKET_RIGHT + S_ListTypePostfix + Id_simple;

            #endregion

            #region id_simple list

            SimpleIdList.Rule = MakePlusRule(SimpleIdList, S_comma, Id_simple);

            #endregion

            #region expression

            //Expression
            BNF_ExprList.Rule = MakeStarRule(BNF_ExprList, S_comma, BNF_Expression);

            exprListOfAList.Rule = MakePlusRule(exprListOfAList, S_comma, expressionOfAList);

            BNF_Expression.Rule =       term
                                |   unExpr
                                |   binExpr;

            expressionOfAList.Rule = BNF_Expression + ListParametersForExpression;

            term.Rule =         IdOrFuncList                  //d.Name
                            |   string_literal      //'lala'
                            |   number              //10
                            //|   funcCall            //EXISTS ( SelectStatement )
                            |   BNF_Aggregate           //COUNT ( SelectStatement )
                            |   tuple               //(d.Name, 'Henning', (SelectStatement))
                            |   parSelectStmt      //(FROM User u Select u.Name)
                            | S_TRUE
                            | S_FALSE;

            #region Tuple

            tuple.Rule = bracketLeft + BNF_ExprList + bracketRight;

            bracketLeft.Rule = S_BRACKET_LEFT | S_TUPLE_BRACKET_LEFT;
            bracketRight.Rule = S_BRACKET_RIGHT | S_TUPLE_BRACKET_RIGHT;

            #endregion

            parSelectStmt.Rule = S_BRACKET_LEFT + SelectStmtGraph + S_BRACKET_RIGHT;

            unExpr.Rule = unOp + term;

            unOp.Rule =         S_NOT
                            |   "+"
                            |   "-"
                            |   "~";

            binExpr.Rule = BNF_Expression + binOp + BNF_Expression;

            binOp.Rule =        Symbol("+")
                            |   "-"
                            |   "*"
                            |   "/"
                            |   "%" //arithmetic
                            |   "&"
                            |   "|"
                            |   "^"                     //bit
                            |   "="
                            |   ">"
                            |   "<"
                            |   ">="
                            |   "<="
                            |   "<>"
                            |   "!="
                            |   "!<"
                            |   "!>"
                            |   "AND"
                            |   "OR"
                            |   "LIKE"
                            |   S_NOT + "LIKE"
                            |   "IN"
                            |   "NOTIN" | "NOT_IN" | "NIN" | "!IN"
                            |   "INRANGE";

            notOpt.Rule =       Empty
                            |   S_NOT;

            #endregion

            #region Functions & Aggregates

            //funcCall covers some psedo-operators and special forms like ANY(...), SOME(...), ALL(...), EXISTS(...), IN(...)
            //funcCall.Rule = BNF_FuncCallName + S_BRACKET_LEFT + funArgs + S_BRACKET_RIGHT;

            // The grammar will be created by IExtendableGrammer methods
            //BNF_Aggregate.Rule = Empty;
            //BNF_FuncCall.Rule = Empty;

            BNF_FunArgs.Rule =      SelectStmtGraph
                            |   BNF_ExprList;

            #endregion

            #region operators

            //Operators
            RegisterOperators(10, "*", "/", "%");
            RegisterOperators(9, "+", "-");
            RegisterOperators(8, "=", ">", "<", ">=", "<=", "<>", "!=", "!<", "!>", "INRANGE", "LIKE", "IN", "NOTIN", "NOT_IN", "NIN", "!IN");
            RegisterOperators(7, "^", "&", "|");
            RegisterOperators(6, "NOT");
            RegisterOperators(5, "AND", "OR");

            #region operators
            // Why this definition was twice in the GraphQL???
            //RegisterOperators(1, Associativity.Neutral, "AND", "OR");
            //RegisterOperators(2, Associativity.Neutral, "=", "!=", ">", ">=", "<", "<=", "<>", "!<", "!>", "IN", "NOTIN", "INRANGE");
            //RegisterOperators(3, "+", "-");
            //RegisterOperators(4, "*", "/");
            RegisterOperators(5, Associativity.Right, "**");
            #endregion

            #endregion

            #region prefixOperation

            PrefixOperation.Rule =      Id_simple + S_BRACKET_LEFT + ParameterList + S_BRACKET_RIGHT;

            ParameterList.Rule =        ParameterList + S_comma + BNF_Expression
                                    |   BNF_Expression;

            #endregion

            #endregion

            #region CREATE INDEX

            createIndexStmt.Rule = S_CREATE + S_INDEX + indexNameOpt + editionOpt + S_ON + typeOrVertex + TypeWrapper + S_BRACKET_LEFT + IndexAttributeList + S_BRACKET_RIGHT + BNF_IndexTypeOpt
                | S_CREATE + S_INDEX + indexNameOpt + editionOpt + S_ON + TypeWrapper + S_BRACKET_LEFT + IndexAttributeList + S_BRACKET_RIGHT + BNF_IndexTypeOpt; // due to compatibility the  + S_TYPE is optional

            uniqueOpt.Rule = Empty | S_UNIQUE;

            editionOpt.Rule =       Empty
                                | S_EDITION + Id_simple;

            BNF_IndexTypeOpt.Rule =     Empty
                                | S_INDEXTYPE + Id_simple;

            indexNameOpt.Rule = Empty
                                |   Id_simple;

            #endregion

            #region REBUILD INDICES

            rebuildIndicesStmt.Rule = S_REBUILD + S_INDICES + rebuildIndicesTypes;

            rebuildIndicesTypes.Rule = Empty | TypeList;

            #endregion

            #region CREATE TYPE(S)

            createTypesStmt.Rule    = S_CREATE + BNF_TypesOrVertices + bulkTypeList
                                    | S_CREATE + abstractOpt + typeOrVertex + bulkType;

            typeOrVertex.Rule       = S_TYPE | S_VERTEX;
            BNF_TypesOrVertices.Rule    = S_TYPES | S_VERTICES;

            bulkTypeList.Rule       = MakePlusRule(bulkTypeList, S_comma, bulkTypeListMember);

            bulkTypeListMember.Rule = abstractOpt + bulkType;

            bulkType.Rule           = Id_simple + extendsOpt + attributesOpt + backwardEdgesOpt + uniquenessOpt + mandatoryOpt + indexOptOnCreateType + commentOpt;

            commentOpt.Rule         =   Empty
                                    |   S_COMMENT + "=" + string_literal;

            abstractOpt.Rule        = Empty
                                    | S_ABSTRACT;

            extendsOpt.Rule         = Empty
                                    | S_EXTENDS + Id_simple;

            attributesOpt.Rule      = Empty
                                    | S_ATTRIBUTES + S_BRACKET_LEFT + AttributeList + S_BRACKET_RIGHT;

            backwardEdgesOpt.Rule   = Empty
                                    | S_BACKWARDEDGES + S_BRACKET_LEFT + BackwardEdgesList + S_BRACKET_RIGHT;

            uniquenessOpt.Rule = Empty
                                    | S_UNIQUE + S_BRACKET_LEFT + id_simpleList + S_BRACKET_RIGHT;

            mandatoryOpt.Rule = Empty
                                    | S_MANDATORY + S_BRACKET_LEFT + id_simpleList + S_BRACKET_RIGHT;

            indexOptOnCreateType.Rule = Empty
                                        | indexOnCreateType;

            indexOnCreateType.Rule = S_INDICES + S_BRACKET_LEFT + IndexOptOnCreateTypeMemberList + S_BRACKET_RIGHT
                                    | S_INDICES + IndexOptOnCreateTypeMember;

            IndexOptOnCreateTypeMemberList.Rule = MakePlusRule(IndexOptOnCreateTypeMemberList, S_comma, IndexOptOnCreateTypeMember);

            IndexOptOnCreateTypeMember.Rule = S_BRACKET_LEFT + indexNameOpt + editionOpt + BNF_IndexTypeOpt + S_ON + S_ATTRIBUTES + IndexAttributeList + S_BRACKET_RIGHT
                                            | S_BRACKET_LEFT + indexNameOpt + editionOpt + BNF_IndexTypeOpt + S_ON + IndexAttributeList + S_BRACKET_RIGHT // due to compatibility the  + S_ATTRIBUTES is optional
                                            | S_BRACKET_LEFT + IndexAttributeList + S_BRACKET_RIGHT;

            AttrDefaultOpValue.Rule = Empty
                                    | "=" + Value
                                    | "=" + S_LISTOF + S_BRACKET_LEFT + ValueList + S_BRACKET_RIGHT
                                    | "=" + S_SETOF  + S_BRACKET_LEFT + ValueList + S_BRACKET_RIGHT;

            #endregion

            #region ALTER TYPE/VERTEX

            alterStmt.Rule = S_ALTER + typeOrVertex + Id_simple + alterCmdList + uniquenessOpt + mandatoryOpt;

            alterCmd.Rule = Empty
                            | S_ADD         + S_ATTRIBUTES    + S_BRACKET_LEFT + AttributeList     + S_BRACKET_RIGHT
                            | S_DROP        + S_ATTRIBUTES    + S_BRACKET_LEFT + SimpleIdList      + S_BRACKET_RIGHT
                            | S_ADD         + S_BACKWARDEDGES + S_BRACKET_LEFT + BackwardEdgesList + S_BRACKET_RIGHT
                            | S_DROP        + S_BACKWARDEDGES + S_BRACKET_LEFT + SimpleIdList      + S_BRACKET_RIGHT
                            | S_ADD         + indexOnCreateType
                            | S_DROP        + IndexDropOnAlterType
                            | S_RENAME      + S_ATTRIBUTE     + Id_simple + S_TO + Id_simple
                            | S_RENAME      + S_BACKWARDEDGE  + Id_simple + S_TO + Id_simple
                            | S_RENAME      + S_TO + Id_simple
                            | S_DEFINE      + S_ATTRIBUTES + S_BRACKET_LEFT + AttributeList + S_BRACKET_RIGHT
                            | S_UNDEFINE    + S_ATTRIBUTES + S_BRACKET_LEFT + SimpleIdList + S_BRACKET_RIGHT
                            | S_DROP        + S_UNIQUE
                            | S_DROP        + S_MANDATORY
                            | S_COMMENT     + "=" + string_literal;

            alterCmdList.Rule = MakePlusRule(alterCmdList, S_comma, alterCmd);

            IndexDropOnAlterTypeMember.Rule = S_BRACKET_LEFT + Id_simple + editionOpt + S_BRACKET_RIGHT;

            IndexDropOnAlterTypeMemberList.Rule = MakePlusRule(IndexDropOnAlterTypeMemberList, S_comma, IndexDropOnAlterTypeMember);

            IndexDropOnAlterType.Rule = S_INDICES + IndexDropOnAlterTypeMember
                                        | S_INDICES + S_BRACKET_LEFT + IndexDropOnAlterTypeMemberList + S_BRACKET_RIGHT;

            #endregion

            #region SELECT

            SelectStmtGraph.Rule = S_FROM + TypeList + S_SELECT + selList + whereClauseOpt + groupClauseOpt + havingClauseOpt + orderClauseOpt + MatchingClause + offsetOpt + limitOpt + resolutionDepthOpt + selectOutputOpt;
            SelectStmtGraph.Description = "The select statement is used to query the database and retrieve one or more types of objects in the database.\n";

            MatchingClause.Rule =       Empty
                                    |   MatchingClause + Matching;

            Matching.Rule =             S_MATCHES + S_BRACKET_LEFT + number + S_BRACKET_RIGHT + PrefixOperation;

            resolutionDepthOpt.Rule =       Empty
                                        |   S_DEPTH + number;

            selectOutputOpt.Rule    =       Empty
                                        |   "OUTPUT" + name;

            offsetOpt.Rule =       Empty
                            |   S_OFFSET + number;

            limitOpt.Rule =     Empty
                            |   S_LIMIT + number;

            selList.Rule =      selectionList;

            selectionList.Rule = MakePlusRule(selectionList, S_comma, selectionListElement);

            selectionListElement.Rule =     S_ASTERISK
                                        |   S_RHOMB
                                        |   S_MINUS
                                        |   TERMINAL_LT
                                        |   TERMINAL_GT
                                        |   selByType
                                        |   selectionSource;

            selByType.Rule = Empty
                            | S_AD + Id_simple;

            aliasOptName.Rule = Id_simple | string_literal;

            aliasOpt.Rule =     Empty
                            |   S_AS + aliasOptName;

            var staticSelect = new NonTerminal("staticSelect", CreateSelectValueAssignmentNode);
            staticSelect.Rule = Empty | S_EQUALS + Value | "?=" + Value;

            selectionSource.Rule = BNF_Aggregate + aliasOpt | IdOrFuncList + staticSelect + aliasOpt;
                //|   funcCall
                //|   Id;

            #region Aggregate

            //BNF_Aggregate.Rule = BNF_AggregateName + S_BRACKET_LEFT + name + S_BRACKET_RIGHT;

            BNF_AggregateArg.Rule =   Id
                                    | S_ASTERISK;
            /*
            aggregateName.Rule =        S_COUNT
                                    |   "AVG"
                                    |   "MIN"
                                    |   "MAX"
                                    |   "STDEV"
                                    |   "STDEVP"
                                    |   "SUM"
                                    |   "VAR"
                                    |   "VARP";
            */
            #endregion

            #region Functions

            //function.Rule           = functionName + S_BRACKET_LEFT + term + S_BRACKET_RIGHT;

            //functionName.Rule       = FUNC_WEIGHT;

            #endregion

            whereClauseOpt.Rule =       Empty
                                    |   S_WHERE + BNF_Expression;

            groupClauseOpt.Rule =       Empty
                                    |   "GROUP" + S_BY + idlist;

            havingClauseOpt.Rule =      Empty
                                    |   "HAVING" + BNF_Expression;

            orderByAttributeListMember.Rule =       Id
                                                |   string_literal;

            orderByAttributeList.Rule = MakePlusRule(orderByAttributeList, S_comma, orderByAttributeListMember);

            orderClauseOpt.Rule =       Empty
                                    |   "ORDER" + S_BY + orderByAttributeList + AttributeOrderDirectionOpt;

            #endregion

            #region INSERT

            InsertStmt.Rule = S_INSERT + S_INTO + TypeWrapper + insertValuesOpt;

            insertValuesOpt.Rule =      Empty
                                    |   S_VALUES + S_BRACKET_LEFT + AttrAssignList + S_BRACKET_RIGHT;

            AttrAssignList.Rule = MakePlusRule(AttrAssignList, S_comma, AttrAssign);

            AttrAssign.Rule =       Id + "=" + BNF_Expression
                                |   Id + "=" + Reference
                                |   Id + "=" + CollectionOfDBObjects;

            CollectionOfDBObjects.Rule = S_SETOF + CollectionTuple
                                            | S_LISTOF + CollectionTuple
                                            | S_SETOFUUIDS + CollectionTuple
                                            | S_SETOFUUIDS + "()"
                                            | S_SETOF + "()";

            CollectionTuple.Rule = S_BRACKET_LEFT + ExtendedExpressionList + S_BRACKET_RIGHT;

            ExtendedExpressionList.Rule = MakePlusRule(ExtendedExpressionList, S_comma, ExtendedExpression);

            ExtendedExpression.Rule = BNF_Expression + ListParametersForExpression;

            Reference.Rule = S_REFERENCE + tuple + ListParametersForExpression
                           | S_REF + tuple + ListParametersForExpression
                           | S_REFUUID + tuple + ListParametersForExpression
                           | S_REFERENCEUUID + tuple + ListParametersForExpression;

                //| S_SETREF + tupleRangeSet + ListParametersForExpression;

            #endregion

            #region UPDATE

            updateStmt.Rule = S_UPDATE + TypeWrapper + S_SET + S_BRACKET_LEFT + AttrUpdateList + S_BRACKET_RIGHT + whereClauseOpt;

            AttrUpdateList.Rule = MakePlusRule(AttrUpdateList, S_comma, AttrUpdateOrAssign);

            AttrUpdateOrAssign.Rule =       AttrAssign
                                        |   AttrRemove
                                        |   ListAttrUpdate;

            AttrRemove.Rule = S_REMOVE + S_ATTRIBUTES + S_BRACKET_LEFT + id_simpleList + S_BRACKET_RIGHT;

            ListAttrUpdate.Rule =       AddToListAttrUpdate
                                    |   RemoveFromListAttrUpdate;

            AddToListAttrUpdate.Rule =      AddToListAttrUpdateAddTo
                                        |   AddToListAttrUpdateOperator;

            AddToListAttrUpdateAddTo.Rule = S_ADD + S_TO + Id + CollectionOfDBObjects;
            AddToListAttrUpdateOperator.Rule = Id + S_ADDTOLIST + CollectionOfDBObjects;

            RemoveFromListAttrUpdate.Rule =         RemoveFromListAttrUpdateAddToRemoveFrom
                                            |       RemoveFromListAttrUpdateAddToOperator;

            RemoveFromListAttrUpdateAddToRemoveFrom.Rule = S_REMOVE + S_FROM + Id + tuple;
            RemoveFromListAttrUpdateAddToOperator.Rule = Id + S_REMOVEFROMLIST + tuple;

            #endregion

            #region DROP TYPE

            dropTypeStmt.Rule = S_DROP + typeOrVertex + Id_simple;

            #endregion

            #region DROP INDEX

            dropIndexStmt.Rule = S_FROM + TypeWrapper + S_DROP + S_INDEX + Id_simple + editionOpt;

            #endregion

            #region TRUNCATE

            truncateStmt.Rule = S_TRUNCATE + typeOrVertex + Id_simple
                              | S_TRUNCATE + Id_simple; // Due to compatibility the  + S_TYPE is optional

            #endregion

            #region DELETE

            deleteStmtMember.Rule = Empty | idlist;
            deleteStmt.Rule = S_FROM + TypeList + S_DELETE + deleteStmtMember + whereClauseOpt;

            #endregion

            #region SETTING

            SettingsStatement.Rule = S_SETTING + SettingScope + SettingOperation;

            SettingScope.Rule = S_DB | S_SESSION | SettingTypeNode | SettingAttrNode;

            SettingTypeNode.Rule = typeOrVertex + SettingTypeStmLst;

            SettingTypeStmLst.Rule = MakePlusRule(SettingTypeStmLst, S_comma, TypeWrapper);

            SettingAttrNode.Rule = S_ATTRIBUTE + SettingAttrStmLst;

            SettingAttrStmLst.Rule = MakePlusRule(SettingAttrStmLst, S_comma, id_typeAndAttribute);

            SettingOperation.Rule = SettingOpSet | SettingOpGet | SettingOpRemove;

            SettingOpSet.Rule = S_SET + S_BRACKET_LEFT + SettingItemSetLst + S_BRACKET_RIGHT;

            SettingItemsSet.Rule = string_literal + "=" + SettingItemSetVal;

            SettingItemSetLst.Rule = MakePlusRule(SettingItemSetLst, S_comma, SettingItemsSet);

            SettingItemSetVal.Rule =        number
                                        |   S_DEFAULT
                                        |   string_literal;

            SettingOpGet.Rule = S_GET + S_BRACKET_LEFT + SettingItems + S_BRACKET_RIGHT;

            SettingOpRemove.Rule = S_REMOVE + S_BRACKET_LEFT + SettingItems + S_BRACKET_RIGHT;

            SettingItems.Rule = MakePlusRule(SettingItems, S_comma, string_literal);

            #endregion

            #region DESCRIBE

            DescrInfoStmt.Rule = S_DESCRIBE + DescrArgument;

            DescrInfoStmt.Description = "This statement gives you all information about an type, a function, an index, an setting, an object, an edge or an aggregate.\n";

            DescrArgument.Rule = DescrAggrStmt | DescrAggrsStmt | DescrEdgeStmt | DescrEdgesStmt | DescrTypeStmt | DescrTypesStmt | DescrFuncStmt | DescrFunctionsStmt | DescrSettStmt | DescrSettingsStmt | DescrIdxStmt | DescrIdxsStmt;

            DescrAggrStmt.Rule = S_AGGREGATE + Id_simple;

            DescrAggrsStmt.Rule = S_AGGREGATES;

            DescrEdgeStmt.Rule = S_EDGE + Id_simple;

            DescrEdgesStmt.Rule = S_EDGES;

            DescrTypeStmt.Rule = typeOrVertex + Id_simple;

            DescrTypesStmt.Rule = S_TYPES;

            DescrFuncStmt.Rule = S_FUNCTION + Id_simple;

            DescrFunctionsStmt.Rule = S_FUNCTIONS;

            DescrSettStmt.Rule = S_SETTING + DescrSettItem | S_SETTINGS + DescrSettingsItems;

            DescrSettItem.Rule = Id_simple + Empty | Id_simple + S_ON + typeOrVertex + AType | Id_simple + S_ON + S_ATTRIBUTE + id_typeAndAttribute | Id_simple + S_ON + S_DB | Id_simple + S_ON + S_SESSION;

            DescrSettingsItems.Rule = S_ON + typeOrVertex + TypeList | S_ON + S_ATTRIBUTE + id_typeAndAttribute | S_ON + S_DB | S_ON + S_SESSION;

            DescrSettingsStmt.Rule = S_SETTINGS;

            DescrIdxStmt.Rule = S_INDEX + id_simpleDotList + DescrIdxEdtStmt;

            DescrIdxEdtStmt.Rule = Empty | Id_simple;

            DescrIdxsStmt.Rule = S_INDICES;

            #endregion

            #region INSERTORUPDATE

            insertorupdateStmt.Rule = S_INSERTORUPDATE + TypeWrapper + S_VALUES + S_BRACKET_LEFT + AttrAssignList + S_BRACKET_RIGHT + whereClauseOpt;

            #endregion

            #region INSERTORREPLACE

            insertorreplaceStmt.Rule = S_INSERTORREPLACE + TypeWrapper + S_VALUES + S_BRACKET_LEFT + AttrAssignList + S_BRACKET_RIGHT + whereClauseOpt;

            #endregion

            #region REPLACE

            replaceStmt.Rule = S_REPLACE + TypeWrapper + S_VALUES + S_BRACKET_LEFT + AttrAssignList + S_BRACKET_RIGHT + S_WHERE + BNF_Expression;

            #endregion

            #region TRANSACTION

            #region BeginTransAction

            transactStmt.Rule = S_BEGIN + TransactOptions + S_TRANSACTION + TransactAttributes;

            TransactOptions.Rule = Empty |
                                S_TRANSACTDISTRIBUTED + S_TRANSACTLONGRUNNING |
                                S_TRANSACTDISTRIBUTED |
                                S_TRANSACTLONGRUNNING;

            TransactAttributes.Rule = Empty |
                                TransactIsolation |
                                TransactName |
                                TransactTimestamp |
                                TransactIsolation + TransactName |
                                TransactIsolation + TransactTimestamp |
                                TransactName + TransactTimestamp |
                                TransactIsolation + TransactName + TransactTimestamp;

            TransactIsolation.Rule = S_TRANSACTISOLATION + "=" + string_literal;

            TransactName.Rule = S_TRANSACTNAME + "=" + string_literal;

            TransactTimestamp.Rule = S_TRANSACTTIMESTAMP + "=" + string_literal;

            #endregion

            #region CommitRollbackTransAction

            commitRollBackTransactStmt.Rule = TransactCommitRollbackType + S_TRANSACTION + TransactCommitRollbackOpt;

            TransactCommitRollbackType.Rule = S_TRANSACTCOMMIT | S_TRANSACTROLLBACK;

            TransactCommitRollbackOpt.Rule = Empty |
                                        TransactName |
                                        S_TRANSACTCOMROLLASYNC |
                                        TransactName + S_TRANSACTCOMROLLASYNC;

            #endregion

            #endregion

            #region EXPORT/DUMP

            dumpType.Rule           = Empty | S_ALL | S_GDDL | S_GDML;      // If empty => create both
            dumpFormat.Rule         = Empty | S_AS + S_GQL;                 // If empty => create GQL
            typeOptionalList.Rule   = Empty | BNF_TypesOrVertices + TypeList;

            dumpDestination.Rule    = Empty | S_INTO + location_literal | S_TO + location_literal;

            dumpStmt.Rule           = S_DUMP   + typeOptionalList + dumpType + dumpFormat + dumpDestination
                                    | S_EXPORT + typeOptionalList + dumpType + dumpFormat + dumpDestination;

            #endregion

            #region IMPORT

            paramComments.Rule      = S_COMMENTS + tuple | Empty;
            paramParallelTasks.Rule = S_PARALLELTASKS + "(" + number + ")" | Empty;
            verbosityTypes.Rule     = Symbol(VerbosityTypes.Silent.ToString()) | Symbol(VerbosityTypes.Errors.ToString()) | Symbol(VerbosityTypes.Full.ToString());
            verbosity.Rule          = S_VERBOSITY + verbosityTypes | Empty;

            //BNF_ImportFormat.Rule = Empty;

            BNF_ImportStmt.Rule = S_IMPORT + S_FROM + location_literal + S_FORMAT + BNF_ImportFormat + paramParallelTasks + paramComments + offsetOpt + limitOpt + verbosity;

            #endregion

            #region LINK

            // Semantic Web Yoda-Style and human language style
            linkStmt.Rule = S_LINK + TypeWrapper + CollectionTuple + S_VIA + Id + S_TO + LinkCondition |
                            S_LINK + TypeWrapper + CollectionTuple + S_TO + LinkCondition + S_VIA + Id;

            LinkCondition.Rule = TypeWrapper + CollectionTuple;

            #endregion

            #region UNLINK

            unlinkStmt.Rule = S_UNLINK + TypeWrapper + CollectionTuple + S_VIA + Id + S_FROM + LinkCondition |
                              S_UNLINK + TypeWrapper + CollectionTuple + S_FROM + LinkCondition + S_VIA + Id;

            #endregion

            #endregion

            #region Misc

            #region punctuation

            RegisterPunctuation(",", S_BRACKET_LEFT.Symbol, S_BRACKET_RIGHT.Symbol, "[", "]");
            //RegisterPunctuation(",", S_BRACKET_LEFT.Symbol, S_BRACKET_RIGHT.Symbol, S_TUPLE_BRACKET_LEFT.Symbol, S_TUPLE_BRACKET_RIGHT.Symbol);
            //RegisterPunctuation(",");
            //RegisterBracePair(_S_BRACKET_LEFT.Symbol, S_BRACKET_RIGHT.Symbol);
            //RegisterBracePair(_S_TUPLE_BRACKET_LEFT.Symbol, S_TUPLE_BRACKET_RIGHT.Symbol);
            //RegisterBracePair(_S_TUPLE_BRACKET_LEFT_EXCLUSIVE.Symbol, S_TUPLE_BRACKET_RIGHT.Symbol);
            //RegisterBracePair(_S_TUPLE_BRACKET_LEFT.Symbol, S_TUPLE_BRACKET_RIGHT_EXCLUSIVE.Symbol);
            //RegisterBracePair(_S_TUPLE_BRACKET_LEFT_EXCLUSIVE.Symbol, S_TUPLE_BRACKET_RIGHT_EXCLUSIVE.Symbol);

            #endregion

            base.MarkTransient(
                singlestmt, Id_simple, selList, selectionSource, BNF_Expression, term, BNF_FunArgs
                , unOp, binOp, aliasOpt, aliasOptName, orderByAttributeListMember
                , Value
                //, EdgeTypeParam
                , EdgeType_SortedMember, AttrUpdateOrAssign, ListAttrUpdate, SettingItemSetVal, DescrArgument,
                TypeWrapper //is used as a wrapper for AType
                , IdOrFunc //, IdOrFuncList
                , BNF_ExprList, BNF_AggregateArg,
                ExtendedExpressionList,
                BNF_ImportFormat, BNF_FuncCall, BNF_Aggregate, verbosityTypes,
                typeOrVertex, BNF_TypesOrVertices);

            #endregion
        }
Example #3
0
 //http://docs.python.org/ref/numbers.html
 public static NumberLiteral CreatePythonNumber(String name)
 {
     NumberLiteral term = new NumberLiteral(name, NumberFlags.AllowStartEndDot);
       //default int types are Integer (32bit) -> LongInteger (BigInt); Try Int64 before BigInt: Better performance?
       term.DefaultIntTypes = new TypeCode[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt };
       // term.DefaultFloatType = TypeCode.Double; -- it is default
       //float type is implementation specific, thus try decimal first (higher precision)
       //term.DefaultFloatTypes = new TypeCode[] { TypeCode.Decimal, TypeCode.Double };
       term.AddPrefix("0x", NumberFlags.Hex);
       term.AddPrefix("0", NumberFlags.Octal);
       term.AddSuffixCodes("L", TypeCode.Int64, NumberLiteral.TypeCodeBigInt);
       term.AddSuffixCodes("J", NumberLiteral.TypeCodeImaginary);
       return term;
 }
Example #4
0
 //http://www.microsoft.com/downloads/details.aspx?FamilyId=6D50D709-EAA4-44D7-8AF3-E14280403E6E&displaylang=en section 2
 public static NumberLiteral CreateVbNumber(String name)
 {
     NumberLiteral term = new NumberLiteral(name);
       term.DefaultIntTypes = new TypeCode[] { TypeCode.Int32, TypeCode.Int64 };
       //term.DefaultFloatType = TypeCode.Double; it is default
       term.AddPrefix("&H", NumberFlags.Hex);
       term.AddPrefix("&O", NumberFlags.Octal);
       term.AddSuffixCodes("S", TypeCode.Int16);
       term.AddSuffixCodes("I", TypeCode.Int32);
       term.AddSuffixCodes("%", TypeCode.Int32);
       term.AddSuffixCodes("L", TypeCode.Int64);
       term.AddSuffixCodes("&", TypeCode.Int64);
       term.AddSuffixCodes("D", TypeCode.Decimal);
       term.AddSuffixCodes("@", TypeCode.Decimal);
       term.AddSuffixCodes("F", TypeCode.Single);
       term.AddSuffixCodes("!", TypeCode.Single);
       term.AddSuffixCodes("R", TypeCode.Double);
       term.AddSuffixCodes("#", TypeCode.Double);
       term.AddSuffixCodes("US", TypeCode.UInt16);
       term.AddSuffixCodes("UI", TypeCode.UInt32);
       term.AddSuffixCodes("UL", TypeCode.UInt64);
       return term;
 }
Example #5
0
 //Note - this is incomplete implementation; need to add functionality to NumberTerminal class to support type detection based
 // on exponent symbol.
 // From R6RS:
 //  ... representations of number objects may be written with an exponent marker that indicates the desired precision
 // of the inexact representation. The letters s, f, d, and l specify the use of short, single, double, and long precision, respectively.
 public static NumberLiteral CreateSchemeNumber(String name)
 {
     NumberLiteral term = new NumberLiteral(name);
       term.DefaultIntTypes = new TypeCode[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt };
       term.DefaultFloatType = TypeCode.Double; // it is default
       term.ExponentSymbols = "sfdl";
       term.AddPrefix("#b", NumberFlags.Binary);
       term.AddPrefix("#o", NumberFlags.Octal);
       term.AddPrefix("#x", NumberFlags.Hex);
       term.AddPrefix("#d", NumberFlags.None);
       term.AddPrefix("#i", NumberFlags.None); // inexact prefix, has no effect
       term.AddPrefix("#e", NumberFlags.None); // exact prefix, has no effect
       term.AddSuffixCodes("J", NumberLiteral.TypeCodeImaginary);
       return term;
 }