private LexMode SetMode(LexMode mode) { var tmp = this.Mode; this.Mode = mode | (tmp & (LexMode.MaskXmlDocCommentLocation | LexMode.MaskXmlDocCommentStyle)); return(tmp); }
private Token PopToken() { StackToken _StackToken = _tokens.Pop(); _currentMode = _StackToken._LexMode; return(_StackToken._Token); }
private Token DequeueToken() { StackToken _StackToken = _que.Dequeue(); _currentMode = _StackToken._LexMode; return(_StackToken._Token); }
private void PushToken(Token _token, LexMode _LexMode) { StackToken _StackToken = new StackToken(); _StackToken._Token = _token; _StackToken._LexMode = _LexMode; _tokens.Push(_StackToken); }
private void QueueToken(Token _token, LexMode _LexMode) { StackToken _StackToken = new StackToken(); _StackToken._Token = _token; _StackToken._LexMode = _LexMode; _que.Enqueue(_StackToken); }
private void Reset() { modes = new Stack <LexMode>(); currentMode = LexMode.Text; modes.Push(currentMode); line = 1; column = 1; pos = 0; }
private void Reset() { _modes = new Stack <LexMode>(); _currentMode = LexMode.Text; _modes.Push(_currentMode); _line = 1; _column = 1; _pos = 0; }
private void Reset() { _Modes = new Stack <LexMode>(); _CurrentMode = LexMode.Text; _Modes.Push(_CurrentMode); _Line = 1; _Column = 1; _Pos = 0; }
private void Initialize() { _modes = new Stack <LexMode>(); _que = new Queue <StackToken>(); _currentMode = LexMode.Text; _modes.Push(_currentMode); _line = 1; _column = 1; _pos = 0; }
public Lexer(string text) { this.text = text; modes = new Stack<LexMode>(); currentMode = LexMode.Text; modes.Push(currentMode); line = 1; column = 1; pos = 0; }
private void LeaveMode() { _CurrentMode = _Modes.Pop(); }
private void EnterMode(LexMode mode) { _Modes.Push(_CurrentMode); _CurrentMode = mode; }
internal void ReInitialize(LexMode modeflags) { base.ReInitialize(); this.Mode = LexMode.XmlDocComment | LexMode.XmlDocCommentLocationStart | modeflags; isDelimited = (modeflags & LexMode.XmlDocCommentStyleDelimited) != 0; }
private void LeaveMode() { _currentMode = _modes.Pop(); }
private void EnterMode(LexMode mode) { _modes.Push(_currentMode); _currentMode = mode; }
private void ResetMode(LexMode mode) { this.Mode = mode; }
private Token NextText() { SavePoint(); StartTextRead: switch (LA(0)) { case EOF: if (_save_pos == _pos) { return(NewToken(TokenKind.EOF, "EOF")); } else { break; } case '$': if (LA(1) == '$') { Consume(2); goto StartTextRead; } else if (_save_pos == _pos && LA(1) == '{') { Consume(2); SkipWhiteSpace(); EnterMode(LexMode.Expression); return(NewToken(TokenKind.ExpStart)); } else if (_save_pos == _pos && (char.IsLetter(LA(1)) || LA(1) == '_')) { Consume(); QueueToken(NewToken(TokenKind.ExpStart, "${"), LexMode.Expression); QueueToken(ReadId(), LexMode.Expression); if (LA(0) == '.' && char.IsLetter(LA(1))) { Consume(); QueueToken(NewToken(TokenKind.Dot, "."), LexMode.Expression); QueueToken(ReadId(), LexMode.Expression); } QueueToken(NewToken(TokenKind.ExpEnd, "}"), _currentMode); return(Next()); } else { //Consume(); //goto StartTextRead; if (_r >= 1000) { string ss = ""; int _i = 0; while (_i < 10 && LA(_i) != EOF) { ss = ss + LA(_i); _i++; } throw new VoltException("loop...: " + _line + "/" + _column + " [" + ss + "]", _line, _column); } _r++; break; } case '}': case _PREFIX: bool _f_tag_start = false; bool _f_tag_end = false; int eat_char = 1; LexMode _Mode = LexMode.Text; if (LA(0) == _PREFIX && LA(1) == _PREFIX) { Consume(2); goto StartTextRead; } else if (LA(0) == _PREFIX) { if (LA(1) == '{') { eat_char = 2; _f_tag_start = true; } else if (Peek(8).ToLower() == _PREFIX + "define ") { _f_tag_start = true; } else if (Peek(7).ToLower() == _PREFIX + "using ") { _f_tag_start = true; } else if (Peek(5).ToLower() == _PREFIX + "for ") { _f_tag_start = true; } else if (Peek(4).ToLower() == _PREFIX + "if ") { _f_tag_start = true; _Mode = LexMode.If; } else if (Peek(9).ToLower() == _PREFIX + "foreach ") { _f_tag_start = true; } else if (Peek(5).ToLower() == _PREFIX + "else") { _f_tag_start = true; } } else if (LA(0) == '}') { if (Peek(9).ToLower() == "}" + _PREFIX + "elseif ") { eat_char = 2; _f_tag_start = true; _Mode = LexMode.ElseIf; } else if (Peek(6).ToLower() == "}" + _PREFIX + "else") { eat_char = 2; _f_tag_start = true; } else if (LA(1) == _PREFIX && LA(2) == '{' && (LA(3) == 'e' || LA(3) == 'E')) { eat_char = 3; _f_tag_start = true; } else if (LA(1) == _PREFIX && (LA(2) == '\t' || LA(2) == '\n' || LA(2) == '\r' || LA(2) == ' ')) { eat_char = 2; _f_tag_end = true; } } if (_f_tag_start) { if (_save_pos == _pos) { if (eat_char == 0) { Consume(); } else { Consume(eat_char); } if (_Mode == LexMode.If) { EnterMode(LexMode.If); return(NewToken(TokenKind.If)); } else if (_Mode == LexMode.ElseIf) { EnterMode(LexMode.If); return(NewToken(TokenKind.ElseIf)); } else { EnterMode(LexMode.Tag); return(NewToken(TokenKind.TagStart)); } } else { break; } } else if (_f_tag_end) { if (_save_pos == _pos) { if (eat_char == 0) { Consume(); } else { Consume(eat_char); } EnterMode(LexMode.Tag); return(NewToken(TokenKind.TagClose)); } else { break; } } Consume(); goto StartTextRead; case '\n': case '\r': SkipWhiteSpace(); goto StartTextRead; default: Consume(); goto StartTextRead; } return(NewToken(TokenKind.TextData)); }
internal XmlDocCommentParser(Lexer lexer, LexMode modeflags) : base(lexer.Options, lexer, LexMode.XmlDocComment | LexMode.XmlDocCommentLocationStart | modeflags, null, null, true) { isDelimited = (modeflags & LexMode.XmlDocCommentStyleDelimited) != 0; }
private void LeaveMode() { currentMode = modes.Pop(); }
void LeaveMode() { currentMode = modes.Pop(); }
public void LeaveMode() { _currentMode = _modes.Pop(); }
public void EnterMode(LexMode mode) { _modes.Push(_currentMode); _currentMode = mode; }
private void Reset() { _Modes = new Stack<LexMode>(); _CurrentMode = LexMode.Text; _Modes.Push(_CurrentMode); _Line = 1; _Column = 1; _Pos = 0; }
void EnterMode(LexMode mode) { modes.Push(currentMode); currentMode = mode; }
private void Reset() { _modes = new Stack<LexMode>(); _currentMode = LexMode.Text; _modes.Push(_currentMode); _line = 1; _column = 1; _pos = 0; }
private void EnterMode(LexMode mode) { modes.Push(currentMode); currentMode = mode; }
private void Reset() { modes = new Stack<LexMode>(); currentMode = LexMode.Text; modes.Push(currentMode); line = 1; column = 1; pos = 0; }
private void LeaveMode() { currentMode = (LexMode)modes.Pop(); }