/// <summary> /// Process the interchange version identifier of the interchange file. /// Set internal state based on the version identifier. /// </summary> /// <param name="chunk">Chunk of source code that is supposed to contain the version identifier.</param> /// <returns></returns> private bool ProcessVersionSpecification(InterchangeChunk chunk) { InterchangeFormatParser parser = parser = new InterchangeFormatParser(new StringReader(chunk.SourceChunk)); parser.ErrorSink = chunk; InterchangeVersionIdentifierNode vidNode = parser.ParseVersionId(); // Parser always returns a node. if (vidNode.VersionId != null) { this.Version = vidNode.VersionId.Value; } if ((vidNode.VersionId != null) && !this.SetVersionService()) { if (this.ErrorSink != null) { this.ErrorSink.AddInterchangeError( chunk.TranslateSourcePosition(vidNode.VersionId.StartPosition), chunk.TranslateSourcePosition(vidNode.VersionId.StopPosition), InterchangeFormatErrors.InvalidVersionId); } return(false); // Cannot process this version } return(true); }
protected internal virtual InterchangeVersionIdentifierNode ParseVersionId() { // TODO : Move constants out of code into a the InterchangeFormatConstants class // PARSE: <interchangeVersionIdentifier> ::= 'Smalltalk' 'interchangeVersion:' <versionId> // <versionId> ::= quotedString InterchangeVersionIdentifierNode result = this.CreateInterchangeVersionIdentifierNode(); Token token = this.GetNextTokenxx(); IdentifierToken idt = token as IdentifierToken; if ((idt == null) || (idt.Value != "Smalltalk")) { this.ReportParserError(result, InterchangeFormatErrors.MissingInterchangeVersionIdentifier, token); return(result); } token = this.GetNextTokenxx(); KeywordToken kwt = token as KeywordToken; if ((kwt == null) || (kwt.Value != "interchangeVersion:")) { this.ReportParserError(result, InterchangeFormatErrors.MissingInterchangeVersionIdentifier, token); return(result); } token = this.GetNextTokenxx(); StringToken versionId = token as StringToken; if (versionId == null) { this.ReportParserError(result, InterchangeFormatErrors.MissingInterchangeVersionIdentifier, token); return(result); } return(new InterchangeVersionIdentifierNode(versionId)); }
/// <summary> /// Visits the Interchange Version Identifier node. /// </summary> /// <param name="node">The node to visit.</param> public override bool VisitInterchangeVersionIdentifier(InterchangeVersionIdentifierNode node) { if (node.VersionId == null) return false; return true; }
/// <summary> /// Visits the Interchange Version Identifier node. /// </summary> /// <param name="node">The node to visit.</param> public virtual TResult VisitInterchangeVersionIdentifier(InterchangeVersionIdentifierNode node) { return(default(TResult)); // The default naive implementation }