Пример #1
0
        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);
        }
Пример #2
0
        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>();
        }
Пример #3
0
 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;
 }
Пример #4
0
 private bool IsSignificantTag(InputElementTag tag)
 {
     return tag != InputElementTag.LineTerminator && tag != InputElementTag.Comment;
 }
Пример #5
0
        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>();
        }
Пример #6
0
 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);
         }
     }
 }
Пример #7
0
        // ----------------------------------------------------------------------
        // 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);
        }
Пример #8
0
 public InputElement(Location loc, InputElementTag tag, string value)
 {
     Loc   = loc;
     Tag   = tag;
     Value = value;
 }
Пример #9
0
 public InputElement(Location loc, InputElementTag tag, string value)
 {
     Loc = loc;
     Tag = tag;
     Value = value;
 }
Пример #10
0
 private bool IsSignificantTag(InputElementTag tag)
 {
     return(tag != InputElementTag.LineTerminator && tag != InputElementTag.Comment);
 }