public static EchelonScriptErrorMessage GenUnexpectedIdentifier(EchelonScriptToken token) { var tokenText = StringPool.Shared.GetOrAdd(token.Text.Span); var errorMessage = UnexpectedX.Replace("{0}", "identifier").Replace("{1}", tokenText); return(new EchelonScriptErrorMessage(token, errorMessage)); }
public static EchelonScriptErrorMessage GenExpectedXGotY(string expected, EchelonScriptToken token) { var tokenText = StringPool.Shared.GetOrAdd(token.Text.Span); var errorMessage = ExpectedXGotY.Replace("{0}", expected).Replace("{1}", tokenText); return(new EchelonScriptErrorMessage(token, errorMessage)); }
private void codeText_TextChanged(object sender, EventArgs e) { using var d = Dispatcher.DisableProcessing(); var code = codeText.Text; errors.Clear(); tokenizer.SetSource("Buffer".AsMemory(), code.AsMemory()); textMarkerService.Clear(); errorsList.Items.Clear(); tokensTree.Items.Clear(); var tok = new EchelonScriptToken() { Type = EchelonScriptTokenType.Invalid }; EchelonScriptToken?docComment; while (tok.Type != EchelonScriptTokenType.EOF) { (tok, docComment) = tokenizer.NextToken(); var tokItem = new TreeViewItem { Header = $"{tok.Type} ({tok.TextLine}:{tok.TextColumn})" }; if (tok.Text.Length > 0) { tokItem.ToolTip = $"Text: \"{tok.Text}\""; } tokItem.Tag = tok; if (docComment != null) { var docItem = new TreeViewItem { Header = $"{docComment?.Type} ({docComment?.TextLine}:{docComment?.TextColumn})", ToolTip = $"Text: \"{docComment?.Text}\"", Tag = docComment.Value }; tokItem.Items.Add(docItem); } tokensTree.Items.Add(tokItem); } foreach (var error in errors) { errorsList.Items.Add($"Line {error.Line}, column {error.Column}: {error.Message}"); if (error.Length == 0 || (error.StartPos + error.Length >= codeText.Text.Length)) { continue; } DisplayError(error.Column, error.Line, error.Message); } }
public EchelonScriptErrorMessage(EchelonScriptToken tk, string?message = null) { Message = message; StartPos = tk.TextStartPos; Length = tk.Text.Length; FileName = tk.FileName.Span.GetPooledString(); Line = tk.TextLine; Column = tk.TextColumn; }
public ES_AstNamespace( ES_AstDottableIdentifier name, ES_AstNode? [] contents, EchelonScriptToken namespaceTk, EchelonScriptToken closeBraceTk ) : base(1) { NamespaceName = name; Contents = contents; bounds = new ES_AstNodeBounds { StartPos = namespaceTk.TextStartPos, EndPos = closeBraceTk.TextEndPos, }; }
public static EchelonScriptErrorMessage GenInstAccessOnStatic(string memberName, EchelonScriptToken errorToken) { var errorMessage = InstAccessOnStatic.Replace("{memberName}", memberName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenTypeAlreadyConst(bool newImmut, bool oldImmut, EchelonScriptToken tk) => new (tk, GenTypeAlreadyConst(newImmut, oldImmut));
public static EchelonScriptErrorMessage GenTypeNotNullable(string typeName, EchelonScriptToken errorToken) { var errorMessage = TypeNotNullable.Replace("{typeName}", typeName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenStaticAccessOnInst(string typeName, string memberName, EchelonScriptToken errorToken) { var errorMessage = StaticAccessOnInst.Replace("{typeName}", typeName).Replace("{memberName}", memberName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenInvalidExprTerm(string exprTerm, EchelonScriptToken errorToken) { var errorMessage = InvalidExprTerm.Replace("{exprTerm}", exprTerm); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenIntLitTooBig(bool sign, ES_IntSize size, EchelonScriptToken errorToken) { var signStr = sign ? "a signed" : "an unsigned"; var sizeStr = size switch { ES_IntSize.Int8 => "8", ES_IntSize.Int16 => "16", ES_IntSize.Int32 => "32", ES_IntSize.Int64 => "64", _ => throw new NotImplementedException("Int size not implemented."), }; var errorMessage = IntLitTooBigForSize.Replace("{sign}", signStr).Replace("{size}", sizeStr); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenDuplicateSymbolDef(string symbolName, EchelonScriptToken errorToken) { var errorMessage = DuplicateSymbolDefinition.Replace("{symbolName}", symbolName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenExpectedAggregateContent(EchelonScriptToken token) => GenExpectedXGotY($"{ES_Keywords.Class}, {ES_Keywords.Struct} or {ES_Keywords.Enum}", token);
public static EchelonScriptErrorMessage GenCantFindSymbol(string symbolName, EchelonScriptToken errorToken) { var errorMessage = CantFindSymbol.Replace("{symbolName}", symbolName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public abstract bool ParseToken(EchelonScriptTokenizer tokenizer, ReadOnlySpan <char> peekedChars, ref EchelonScriptToken retToken);
public static EchelonScriptErrorMessage GenInaccessibleProtectionLevel(string symbolName, EchelonScriptToken errorToken) { var errorMessage = InaccessibleProtectionLevel.Replace("{symbolName}", symbolName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenTypeAlreadyDefined(string nmName, string typeName, EchelonScriptToken errorToken) { var errorMessage = TypeAlreadyDefined.Replace("{namespace}", nmName).Replace("{typeName}", typeName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenInvalidModifierForContext(string modName, EchelonScriptToken token) { var errorMessage = InvalidModifierForContext.Replace("{0}", modName); return(new EchelonScriptErrorMessage(token, errorMessage)); }
public override bool ParseToken(EchelonScriptTokenizer tokenizer, ReadOnlySpan <char> peekedChars, ref EchelonScriptToken retToken) { var startPos = tokenizer.curPos; tokenizer.ReadChars(2); if (tokenizer.PeekChar() == NumberSeparator) { tokenizer.Errors.Add(new EchelonScriptErrorMessage(retToken, ES_FrontendErrors.InvalidHexLiteral)); } else { tokenizer.ReadStringWhile(c => IsHexDigit(c) || c == NumberSeparator); } tokenizer.TryReadIntSuffix(); retToken.Type = EchelonScriptTokenType.HexIntegerLiteral; retToken.Text = tokenizer.data [startPos..tokenizer.curPos];
public static EchelonScriptErrorMessage GenArgTypeCantUseDefExpr(string argName, string argType, EchelonScriptToken errorToken) { var errorMessage = ArgAlreadyDefined.Replace("{arg}", argName).Replace("{argType}", argType); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenFuncUsedAsType(string symbolName, EchelonScriptToken errorToken) { var errorMessage = FuncUsedAsType.Replace("{symbolName}", symbolName); return(new EchelonScriptErrorMessage(errorToken, errorMessage)); }
public static EchelonScriptErrorMessage GenExpectedIdentifier(EchelonScriptToken token) => GenExpectedXGotY("an identifier", token);