diff --git a/src/main/java/org/jcnc/snow/compiler/lexer/core/LexerEngine.java b/src/main/java/org/jcnc/snow/compiler/lexer/core/LexerEngine.java index 672116f..ec69e67 100644 --- a/src/main/java/org/jcnc/snow/compiler/lexer/core/LexerEngine.java +++ b/src/main/java/org/jcnc/snow/compiler/lexer/core/LexerEngine.java @@ -37,7 +37,7 @@ public class LexerEngine { * @param sourceName 文件名(诊断用) */ public LexerEngine(String source, String sourceName) { - this.absPath = new File(sourceName).getAbsolutePath(); + this.absPath = new File(sourceName).getAbsolutePath().replace('\\', '/'); this.context = new LexerContext(source); this.scanners = List.of( new WhitespaceTokenScanner(), diff --git a/src/main/java/org/jcnc/snow/compiler/lexer/core/LexicalError.java b/src/main/java/org/jcnc/snow/compiler/lexer/core/LexicalError.java index b036fa0..ae928d4 100644 --- a/src/main/java/org/jcnc/snow/compiler/lexer/core/LexicalError.java +++ b/src/main/java/org/jcnc/snow/compiler/lexer/core/LexicalError.java @@ -50,6 +50,6 @@ public class LexicalError { */ @Override public String toString() { - return file + ": 行 " + line + ", 列 " + column + ": " + message; + return "file:///" + file + ":" + line + ":" + column + ": " + message; } } diff --git a/src/main/java/org/jcnc/snow/compiler/parser/context/ParseError.java b/src/main/java/org/jcnc/snow/compiler/parser/context/ParseError.java index 24c1d27..c32d95e 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/context/ParseError.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/context/ParseError.java @@ -40,6 +40,6 @@ public class ParseError { */ @Override public String toString() { - return file + ": 行 " + line + ", 列 " + column + ": " + message; + return "file:///" + file + ":" + line + ":" + column + ": " + message; } } diff --git a/src/main/java/org/jcnc/snow/compiler/parser/context/ParserContext.java b/src/main/java/org/jcnc/snow/compiler/parser/context/ParserContext.java index b9c9852..e9ce832 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/context/ParserContext.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/context/ParserContext.java @@ -39,7 +39,7 @@ public class ParserContext { */ public ParserContext(List tokens, String sourceName) { this.tokens = new TokenStream(tokens); - this.sourceName = Paths.get(sourceName).toAbsolutePath().toString(); + this.sourceName = Paths.get(sourceName).toAbsolutePath().toString().replace('\\', '/'); } diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/error/SemanticError.java b/src/main/java/org/jcnc/snow/compiler/semantic/error/SemanticError.java index ce7bfc4..c43e6c9 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/error/SemanticError.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/error/SemanticError.java @@ -48,9 +48,9 @@ public record SemanticError(Node node, String message) { } - StringBuilder sb = new StringBuilder(); - if (file != null && !file.isBlank()) sb.append(file).append(": "); - sb.append((line >= 0 && col >= 0) ? "行 " + line + ", 列 " + col : "未知位置"); + StringBuilder sb = new StringBuilder("file:///"); + if (file != null && !file.isBlank()) sb.append(file).append(":"); + sb.append((line >= 0 && col >= 0) ? line + ":" + col : "未知位置"); sb.append(": ").append(message); return sb.toString(); }