/// <summary> /// Initializes a new instance of the <see cref="LineScanner"/> class. /// </summary> public LuaScanner() { this.lex = new ParaEngine.Tools.Lua.Lexer.Scanner(); yylval = lex.yylval; yylloc = lex.yylloc; Reset(); }
/// <summary> /// Initializes a new instance of the <see cref="LineScanner"/> class. /// </summary> public LineScanner() { this.lex = new ParaEngine.Tools.Lua.Lexer.Scanner(); }
public override AuthoringScope ParseSource(ParseRequest req) { PuppetSource source = (PuppetSource)this.GetSource(req.FileName); bool yyparseResult = false; // req.DirtySpan seems to be set even though no changes have occurred // source.IsDirty also behaves strangely // might be possible to use source.ChangeCount to sync instead if (req.Sink.Reason == ParseReason.Check || req.DirtySpan.iStartIndex != req.DirtySpan.iEndIndex || req.DirtySpan.iStartLine != req.DirtySpan.iEndLine) { Puppet.Parser.ErrorHandler handler = new Parser.ErrorHandler(); Puppet.Lexer.Scanner scanner = new Lexer.Scanner(); // string interface Parser.Parser parser = new PuppetParser(); // use noarg constructor parser.scanner = scanner; scanner.Handler = handler; parser.SetHandler(handler); scanner.SetSource(req.Text, 0); parser.MBWInit(req); yyparseResult = parser.Parse(); // store the parse results // source.ParseResult = aast; source.ParseResult = null; source.Braces = parser.Braces; // for the time being, just pull errors back from the error handler if (handler.ErrNum > 0) { foreach (Parser.Error error in handler.SortedErrorList()) { var span = new TextSpan(); span.iStartLine = span.iEndLine = error.line - 1; span.iStartIndex = error.column; span.iEndIndex = error.column + error.length; req.Sink.AddError(req.FileName, error.message, span, Severity.Error); } } } switch (req.Reason) { case ParseReason.Check: case ParseReason.HighlightBraces: case ParseReason.MatchBraces: case ParseReason.MemberSelectAndHighlightBraces: int indexOfCaret = source.GetPositionOfLineIndex(req.Line, req.Col); if (source.Braces != null) { foreach (TextSpan[] brace in source.Braces) { if (brace.Length == 2) { req.Sink.MatchPair(brace[0], brace[1], 1); } else if (brace.Length >= 3) { req.Sink.MatchTriple(brace[0], brace[1], brace[2], 1); } } } break; case ParseReason.QuickInfo: return(new PuppetAuthoringScope(this.GetSource(req.FileName))); default: break; } return(new PuppetAuthoringScope(source.ParseResult)); }