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 ExprList ToExprList( 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 ExprList ToExprList( 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
- BamlBinaryReader.cs
- GenerateTemporaryTargetAssembly.cs
- ArrangedElementCollection.cs
- UidManager.cs
- XmlCustomFormatter.cs
- FloaterBaseParaClient.cs
- EntityDataSourceColumn.cs
- TypeSystem.cs
- xmlsaver.cs
- TextSchema.cs
- DataTemplate.cs
- DoubleLink.cs
- TextContainerChangedEventArgs.cs
- HttpChannelHelper.cs
- EntityDataSource.cs
- HierarchicalDataSourceControl.cs
- SvcFileManager.cs
- CanExecuteRoutedEventArgs.cs
- MiniParameterInfo.cs
- listviewsubitemcollectioneditor.cs
- DataContractSerializerElement.cs
- DocumentViewerConstants.cs
- ToolStripItemEventArgs.cs
- wgx_sdk_version.cs
- ObjectKeyFrameCollection.cs
- RegexInterpreter.cs
- LabelEditEvent.cs
- HttpPostClientProtocol.cs
- SrgsElement.cs
- ValidationPropertyAttribute.cs
- VariableElement.cs
- MappingItemCollection.cs
- ThicknessKeyFrameCollection.cs
- RadioButtonList.cs
- FixedDSBuilder.cs
- DecodeHelper.cs
- mactripleDES.cs
- HwndSource.cs
- ServiceNameCollection.cs
- AssemblyResourceLoader.cs
- SegmentInfo.cs
- UrlParameterWriter.cs
- MessageSecurityOverMsmq.cs
- ThemeInfoAttribute.cs
- DetailsView.cs
- ObjectAssociationEndMapping.cs
- DisplayInformation.cs
- Util.cs
- XmlILCommand.cs
- AppDomainAttributes.cs
- ViewStateModeByIdAttribute.cs
- SafeSerializationManager.cs
- CollectionAdapters.cs
- MaskDescriptors.cs
- RuntimeResourceSet.cs
- SystemDiagnosticsSection.cs
- SiteIdentityPermission.cs
- ReadWriteObjectLock.cs
- SchemaImporterExtension.cs
- EntityDataSourceWrapperCollection.cs
- FileSystemWatcher.cs
- StylusShape.cs
- ConfigurationElement.cs
- _ShellExpression.cs
- SqlTypesSchemaImporter.cs
- DesignerTextWriter.cs
- NativeMethods.cs
- WorkflowViewManager.cs
- base64Transforms.cs
- ScrollContentPresenter.cs
- IndexOutOfRangeException.cs
- CodeRegionDirective.cs
- PropagatorResult.cs
- IsolatedStorageFile.cs
- Int32Collection.cs
- _IPv6Address.cs
- ClientFormsIdentity.cs
- MappingItemCollection.cs
- CodeMemberField.cs
- NotSupportedException.cs
- FontResourceCache.cs
- QilScopedVisitor.cs
- Variable.cs
- WebPartAuthorizationEventArgs.cs
- XmlSiteMapProvider.cs
- DataGridViewColumnConverter.cs
- RuntimeEnvironment.cs
- DocumentScope.cs
- ToolStripDropDown.cs
- IERequestCache.cs
- GPStream.cs
- Iis7Helper.cs
- TextBounds.cs
- ListInitExpression.cs
- HttpListenerResponse.cs
- SettingsAttributeDictionary.cs
- ObjectReferenceStack.cs
- NoneExcludedImageIndexConverter.cs
- BaseDataListActionList.cs
- HtmlInputButton.cs