From 3aa3659bc7b9912c861a139d77e1a28dbf7e6d7b Mon Sep 17 00:00:00 2001 From: meisl Date: Sat, 12 Jun 2021 20:24:15 +0200 Subject: [PATCH] * #40 grammar: handle different EOLs (Win, Unix, Mac) purely in grammar --- compilerAst/src/prog8/parser/ModuleParsing.kt | 4 +--- parser/antlr/prog8.g4 | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/compilerAst/src/prog8/parser/ModuleParsing.kt b/compilerAst/src/prog8/parser/ModuleParsing.kt index 630c40b90..efae7049e 100644 --- a/compilerAst/src/prog8/parser/ModuleParsing.kt +++ b/compilerAst/src/prog8/parser/ModuleParsing.kt @@ -44,9 +44,7 @@ class ModuleImporter(private val program: Program, if(!Files.isReadable(filePath)) throw ParsingFailedError("No such file: $filePath") - var content = filePath.toFile().readText().replace("\r\n", "\n") // normalize line endings - - return importModule(CharStreams.fromString(content), filePath, false) + return importModule(CharStreams.fromPath(filePath), filePath, false) } fun importLibraryModule(name: String): Module? { diff --git a/parser/antlr/prog8.g4 b/parser/antlr/prog8.g4 index e515ba161..dbf21734b 100644 --- a/parser/antlr/prog8.g4 +++ b/parser/antlr/prog8.g4 @@ -15,10 +15,10 @@ grammar prog8; package prog8.parser; } -LINECOMMENT : [\n][ \t]* COMMENT -> channel(HIDDEN); -COMMENT : ';' ~[\n]* -> channel(HIDDEN) ; +LINECOMMENT : ('\r'? '\n' | '\r') [ \t]* COMMENT -> channel(HIDDEN); +COMMENT : ';' ~[\r\n]* -> channel(HIDDEN) ; WS : [ \t] -> skip ; -EOL : [\n]+ ; +EOL : ('\r'? '\n' | '\r')+ ; // WS2 : '\\' EOL -> skip; VOID: 'void'; NAME : [a-zA-Z][a-zA-Z0-9_]* ;