private InputElement MakeInputElement(InputElementTag tag) { var res = new InputElement (new Location(fileName, startPos, startLine, startColumn, currentPos, currentLine, currentColumn), tag, sb.ToString()); sb = new StringBuilder(); startPos = currentPos; startLine = currentLine; startColumn = currentColumn; if (IsSignificantTag(tag)) { lastSignificantTag = tag; wasInExpressionContext = false; } return(res); }
public Lexer(TextReader source, string fileName, bool strict) { this.source = source; this.fileName = fileName; this.strict = strict; charState = CharState.BeforeFirst; currentPos = -1; currentLine = 1; currentColumn = -1; startPos = 0; startLine = 1; startColumn = 0; sb = new StringBuilder(); lastSignificantTag = InputElementTag.EOF; wasInExpressionContext = false; openPunctuators = new Seq <InputElement>(); }
private InputElement MakeInputElement(InputElementTag tag) { var res = new InputElement (new Location(fileName, startPos, startLine, startColumn, currentPos, currentLine, currentColumn), tag, sb.ToString()); sb = new StringBuilder(); startPos = currentPos; startLine = currentLine; startColumn = currentColumn; if (IsSignificantTag(tag)) { lastSignificantTag = tag; wasInExpressionContext = false; } return res; }
private bool IsSignificantTag(InputElementTag tag) { return tag != InputElementTag.LineTerminator && tag != InputElementTag.Comment; }
public Lexer(TextReader source, string fileName, bool strict) { this.source = source; this.fileName = fileName; this.strict = strict; charState = CharState.BeforeFirst; currentPos = -1; currentLine = 1; currentColumn = -1; startPos = 0; startLine = 1; startColumn = 0; sb = new StringBuilder(); lastSignificantTag = InputElementTag.EOF; wasInExpressionContext = false; openPunctuators = new Seq<InputElement>(); }
private Location DelimitedList(string context, string expected, InputElementTag delim, InputElementTag close, Action consumeElem) { // Current is open delimiter var loc = Current.Loc; Consume(); if (Current.Tag == close) { loc = loc.Union(Current.Loc); Consume(); return loc; } else { while (true) { consumeElem(); if (Current.Tag == close) { loc = loc.Union(Current.Loc); Consume(); return loc; } else if (Current.Tag == delim) Consume(); else throw IEError(context, expected); } } }
// ---------------------------------------------------------------------- // Combinators // ---------------------------------------------------------------------- private Location Only(string context, string expected, InputElementTag tag) { if (Current.Tag == tag) { var loc = Current.Loc; Consume(); return loc; } else throw IEError(context, expected); }
public InputElement(Location loc, InputElementTag tag, string value) { Loc = loc; Tag = tag; Value = value; }
private bool IsSignificantTag(InputElementTag tag) { return(tag != InputElementTag.LineTerminator && tag != InputElementTag.Comment); }