Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / EntitySql / CqlParserHelpers.cs / 1 / CqlParserHelpers.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Common.EntitySql { using System; using System.IO; using System.Globalization; ////// Represents the Cql Parser engine. Also, implements helpers and util routines. /// internal sealed partial class CqlParser { private Expr _parsedTree; private CqlLexer _lexer; private string _query; private ParserOptions _parserOptions = new ParserOptions(); private const string _internalYaccSyntaxErrorMessage = "syntax error"; private uint _methodCallNodeCount; private string _version = YYMAJOR.ToString(NumberFormatInfo.InvariantInfo) + '.' + YYMINOR.ToString(NumberFormatInfo.InvariantInfo); internal CqlParser( ParserOptions parserOptions, bool debug ) { _parserOptions = parserOptions; yydebug = debug; } ////// Main entry point for parsing cql. /// /// cql query string ///Thrown when Syntatic rules are violated and the query cannot be accepted ///Abstract Syntax Tree internal Expr Parse( string query ) { _query = query; _parsedTree = null; _methodCallNodeCount = 0; _parserOptions = _parserOptions.MakeReadOnly(); internalParseEntryPoint(); return _parsedTree; } ////// Returns query string /// internal string Query { get { return _query; } } #if EXTRA_ENTITYSQL_PARSER_DEBUGGING ////// Enables/Disables yacc debugging. /// internal bool EnableDebug { get { return yydebug; } set { yydebug = value; } } #endif ////// Returns ParserOptions used /// ///Once parse has been invoked, ParserOptions are frozen and cannot be changed. otherwise a EntityException exception will be thrown internal ParserOptions ParserOptions { get { return _parserOptions; } } ////// Internal entry point /// private void internalParseEntryPoint() { _lexer = new CqlLexer(Query, ParserOptions); #if EXTRA_ENTITYSQL_PARSER_DEBUGGING CqlLexer.Token tk = lexer.yylex(); while (null != tk) { Console.WriteLine("{0} := {1}", tk.TokenId, lexer.yytext()); tk = lexer.yylex(); } #endif yyparse(); } // // Conversion/Cast/Helpers // private static AstNode AstNode( object o ) { return ((AstNode)o); } private static int AstNodePos( object o ) { return ((AstNode)o).ErrCtx.InputPosition; } private static CqlLexer.TerminalToken Terminal( object o ) { return ((CqlLexer.TerminalToken)o); } private static int TerminalPos( object o ) { return ((CqlLexer.TerminalToken)o).IPos; } private static ExprListToExprList ( object o ) { return ((ExprList )o); } private short yylex() { CqlLexer.Token token = null; token = _lexer.yylex(); if (null == token) { return 0; } _lexer.AdvanceIPos(); yylval = token.Value; return token.TokenId; } private void yyerror_stackoverflow() { yyerror(System.Data.Entity.Strings.StackOverflowInParser); } private void yyerror( string s ) { if (s.Equals(_internalYaccSyntaxErrorMessage, StringComparison.Ordinal)) { int errorPosition = _lexer.IPos; string syntaxContextInfo = null; string term = _lexer.YYText; if (!String.IsNullOrEmpty(term)) { syntaxContextInfo = System.Data.Entity.Strings.LocalizedTerm; ErrorContext errCtx = null; AstNode astNode = yylval as AstNode; if (null != astNode && (null != astNode.ErrCtx) && (!String.IsNullOrEmpty(astNode.ErrCtx.ErrorContextInfo))) { errCtx = astNode.ErrCtx; errorPosition = Math.Min(errorPosition, errorPosition - term.Length); } if ((yylval is CqlLexer.TerminalToken) && CqlLexer.IsReservedKeyword(term) && !(astNode is Identifier)) { syntaxContextInfo = System.Data.Entity.Strings.LocalizedKeyword; term = term.ToUpperInvariant(); errorPosition = Math.Min(errorPosition, errorPosition - term.Length); } else if (null != errCtx) { syntaxContextInfo = EntityRes.GetString(errCtx.ErrorContextInfo); } syntaxContextInfo = String.Format(CultureInfo.CurrentCulture, "{0} '{1}'", syntaxContextInfo, term); } throw EntityUtil.EntitySqlError(_query, System.Data.Entity.Strings.GenericSyntaxError, errorPosition, syntaxContextInfo, false /* loadErrorContextInfoFromResource */); } throw EntityUtil.EntitySqlError(_query, s, _lexer.IPos); } // // Error tracking helpers // private void SetErrCtx( AstNode astExpr, CqlLexer.TerminalToken tokenValue, string info ) { SetErrCtx(astExpr, tokenValue.IPos, info); } private void SetErrCtx( AstNode astExpr, int inputPos, string info ) { astExpr.ErrCtx.InputPosition = inputPos; astExpr.ErrCtx.ErrorContextInfo = info; astExpr.ErrCtx.QueryText = _query; } private void ResetMethodCallCount() { _methodCallNodeCount = 0; } private void IncrementMethodCallCount() { unchecked { _methodCallNodeCount++; } } private uint MethodCallCount { get { return _methodCallNodeCount; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Common.EntitySql { using System; using System.IO; using System.Globalization; ////// Represents the Cql Parser engine. Also, implements helpers and util routines. /// internal sealed partial class CqlParser { private Expr _parsedTree; private CqlLexer _lexer; private string _query; private ParserOptions _parserOptions = new ParserOptions(); private const string _internalYaccSyntaxErrorMessage = "syntax error"; private uint _methodCallNodeCount; private string _version = YYMAJOR.ToString(NumberFormatInfo.InvariantInfo) + '.' + YYMINOR.ToString(NumberFormatInfo.InvariantInfo); internal CqlParser( ParserOptions parserOptions, bool debug ) { _parserOptions = parserOptions; yydebug = debug; } ////// Main entry point for parsing cql. /// /// cql query string ///Thrown when Syntatic rules are violated and the query cannot be accepted ///Abstract Syntax Tree internal Expr Parse( string query ) { _query = query; _parsedTree = null; _methodCallNodeCount = 0; _parserOptions = _parserOptions.MakeReadOnly(); internalParseEntryPoint(); return _parsedTree; } ////// Returns query string /// internal string Query { get { return _query; } } #if EXTRA_ENTITYSQL_PARSER_DEBUGGING ////// Enables/Disables yacc debugging. /// internal bool EnableDebug { get { return yydebug; } set { yydebug = value; } } #endif ////// Returns ParserOptions used /// ///Once parse has been invoked, ParserOptions are frozen and cannot be changed. otherwise a EntityException exception will be thrown internal ParserOptions ParserOptions { get { return _parserOptions; } } ////// Internal entry point /// private void internalParseEntryPoint() { _lexer = new CqlLexer(Query, ParserOptions); #if EXTRA_ENTITYSQL_PARSER_DEBUGGING CqlLexer.Token tk = lexer.yylex(); while (null != tk) { Console.WriteLine("{0} := {1}", tk.TokenId, lexer.yytext()); tk = lexer.yylex(); } #endif yyparse(); } // // Conversion/Cast/Helpers // private static AstNode AstNode( object o ) { return ((AstNode)o); } private static int AstNodePos( object o ) { return ((AstNode)o).ErrCtx.InputPosition; } private static CqlLexer.TerminalToken Terminal( object o ) { return ((CqlLexer.TerminalToken)o); } private static int TerminalPos( object o ) { return ((CqlLexer.TerminalToken)o).IPos; } private static ExprListToExprList ( object o ) { return ((ExprList )o); } private short yylex() { CqlLexer.Token token = null; token = _lexer.yylex(); if (null == token) { return 0; } _lexer.AdvanceIPos(); yylval = token.Value; return token.TokenId; } private void yyerror_stackoverflow() { yyerror(System.Data.Entity.Strings.StackOverflowInParser); } private void yyerror( string s ) { if (s.Equals(_internalYaccSyntaxErrorMessage, StringComparison.Ordinal)) { int errorPosition = _lexer.IPos; string syntaxContextInfo = null; string term = _lexer.YYText; if (!String.IsNullOrEmpty(term)) { syntaxContextInfo = System.Data.Entity.Strings.LocalizedTerm; ErrorContext errCtx = null; AstNode astNode = yylval as AstNode; if (null != astNode && (null != astNode.ErrCtx) && (!String.IsNullOrEmpty(astNode.ErrCtx.ErrorContextInfo))) { errCtx = astNode.ErrCtx; errorPosition = Math.Min(errorPosition, errorPosition - term.Length); } if ((yylval is CqlLexer.TerminalToken) && CqlLexer.IsReservedKeyword(term) && !(astNode is Identifier)) { syntaxContextInfo = System.Data.Entity.Strings.LocalizedKeyword; term = term.ToUpperInvariant(); errorPosition = Math.Min(errorPosition, errorPosition - term.Length); } else if (null != errCtx) { syntaxContextInfo = EntityRes.GetString(errCtx.ErrorContextInfo); } syntaxContextInfo = String.Format(CultureInfo.CurrentCulture, "{0} '{1}'", syntaxContextInfo, term); } throw EntityUtil.EntitySqlError(_query, System.Data.Entity.Strings.GenericSyntaxError, errorPosition, syntaxContextInfo, false /* loadErrorContextInfoFromResource */); } throw EntityUtil.EntitySqlError(_query, s, _lexer.IPos); } // // Error tracking helpers // private void SetErrCtx( AstNode astExpr, CqlLexer.TerminalToken tokenValue, string info ) { SetErrCtx(astExpr, tokenValue.IPos, info); } private void SetErrCtx( AstNode astExpr, int inputPos, string info ) { astExpr.ErrCtx.InputPosition = inputPos; astExpr.ErrCtx.ErrorContextInfo = info; astExpr.ErrCtx.QueryText = _query; } private void ResetMethodCallCount() { _methodCallNodeCount = 0; } private void IncrementMethodCallCount() { unchecked { _methodCallNodeCount++; } } private uint MethodCallCount { get { return _methodCallNodeCount; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextTrailingCharacterEllipsis.cs
- HttpException.cs
- WsdlImporterElementCollection.cs
- TaskScheduler.cs
- xmlglyphRunInfo.cs
- HttpConfigurationSystem.cs
- PagedDataSource.cs
- __Filters.cs
- ToolStripRendererSwitcher.cs
- ThreadAttributes.cs
- UnsafeNativeMethodsTablet.cs
- LinkConverter.cs
- SamlSubjectStatement.cs
- AuthenticationModuleElement.cs
- Brush.cs
- Number.cs
- SqlRemoveConstantOrderBy.cs
- XmlDocumentSurrogate.cs
- HuffCodec.cs
- ToolStripStatusLabel.cs
- CryptoApi.cs
- ToolConsole.cs
- StrongNameKeyPair.cs
- Timer.cs
- SecurityAppliedMessage.cs
- MenuRenderer.cs
- TimeSpanMinutesConverter.cs
- mediaeventshelper.cs
- UnknownBitmapEncoder.cs
- ErrorCodes.cs
- SelectorItemAutomationPeer.cs
- DataFieldConverter.cs
- InternalConfigSettingsFactory.cs
- XMLSchema.cs
- ChangePasswordDesigner.cs
- DataGridHeaderBorder.cs
- PreApplicationStartMethodAttribute.cs
- CorruptingExceptionCommon.cs
- CompareValidator.cs
- ToolstripProfessionalRenderer.cs
- FilteredDataSetHelper.cs
- PropertyEmitter.cs
- WebConfigurationHost.cs
- HttpProtocolReflector.cs
- ZipPackage.cs
- WSSecurityOneDotZeroSendSecurityHeader.cs
- Rotation3DAnimationBase.cs
- XmlIterators.cs
- CharAnimationUsingKeyFrames.cs
- DataStreamFromComStream.cs
- UnauthorizedWebPart.cs
- unsafenativemethodsother.cs
- Validator.cs
- SspiHelper.cs
- oledbmetadatacolumnnames.cs
- HTTPNotFoundHandler.cs
- HebrewCalendar.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- BackoffTimeoutHelper.cs
- TlsnegoTokenAuthenticator.cs
- WebBrowser.cs
- AsymmetricKeyExchangeDeformatter.cs
- ConfigurationFileMap.cs
- ScriptComponentDescriptor.cs
- DbDataSourceEnumerator.cs
- CellLabel.cs
- ToolStripSeparatorRenderEventArgs.cs
- SendMailErrorEventArgs.cs
- SoapExtensionReflector.cs
- HijriCalendar.cs
- DbLambda.cs
- LocalizedNameDescriptionPair.cs
- DesignRelationCollection.cs
- WorkflowViewService.cs
- BaseCodePageEncoding.cs
- AssociativeAggregationOperator.cs
- XmlSerializableReader.cs
- AuthenticatingEventArgs.cs
- EmbeddedMailObjectsCollection.cs
- WebPartAddingEventArgs.cs
- WebPartEditorOkVerb.cs
- DispatcherHooks.cs
- AttachmentService.cs
- CmsUtils.cs
- InputScopeNameConverter.cs
- BasePattern.cs
- PointCollection.cs
- QueryContinueDragEventArgs.cs
- RefExpr.cs
- ContainerControl.cs
- CompilationUtil.cs
- EntityDataSourceStatementEditorForm.cs
- WebHttpBindingCollectionElement.cs
- BufferBuilder.cs
- SQLByteStorage.cs
- HttpRequestWrapper.cs
- Boolean.cs
- XmlValidatingReaderImpl.cs
- Library.cs
- WebServiceEnumData.cs