Anonymous
Мой файл scala не соответствует грамматике Scala.g4 ANTLR
Сообщение
Anonymous » 10 апр 2024, 07:48
Я использую ANTLR для анализа файлов Scala.
Грамматику языка Scala я нашел здесь:
https://github.com/antlr/grammars-v4 /blob/master/scala/Scala.g4
Я сгенерировал классы ANTLR из грамматики благодаря плагину antlr4-maven-plugin.
Код: Выделить всё
org.antlr
antlr4-maven-plugin
4.13.1
antlr-generate
generate-sources
antlr4
src/main/antlr4
target/generated-sources/antlr4
true
true
У меня есть зависимость от среды выполнения:
Вот мой код для анализа файла Scala:
Код: Выделить всё
public class Main {
public static void main(String[] args) throws IOException {
Path filePath = Paths.get(args[0]);
CharStream charStream = CharStreams.fromPath(filePath , StandardCharsets.UTF_8);
ScalaLexer lexer = new ScalaLexer(charStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
ScalaParser parser = new ScalaParser(tokens);
ParseTree tree = parser.compilationUnit();
ParseTreeWalker.DEFAULT.walk(new ScalaBaseListener(), tree);
}
}
Я успешно использую этот файл scala test.scala в качестве входных данных:
Код: Выделить всё
object replace extends RewriteRule {
def transform(node: Node): Seq[Node] = node match {
case { value @ _* } => { value }
case _ => node
}
}
Однако этот ввод с добавленным ключевым словом override завершается неудачно:
Код: Выделить всё
object replace extends RewriteRule {
override def transform(node: Node): Seq[Node] = node match {
case { value @ _* } => { value }
case _ => node
}
}
Stderr сообщает, что находит неожиданные символы, такие как : из .
Код: Выделить всё
line 3:13 extraneous input ':' expecting {'-', 'null', 'this', 'super', '(', '_', Id, BooleanLiteral, CharacterLiteral, SymbolLiteral, IntegerLiteral, StringLiteral, FloatingPointLiteral, Varid, NL}
line 3:19 extraneous input '{' expecting {'-', 'null', 'this', 'super', '(', '_', Id, BooleanLiteral, CharacterLiteral, SymbolLiteral, IntegerLiteral, StringLiteral, FloatingPointLiteral, Varid, NL}
line 3:27 mismatched input '@' expecting {'=>', 'if'}
line 3:30 extraneous input '*' expecting {'-', 'null', 'this', 'super', '(', '{', '}', 'type', 'val', '_', 'implicit', 'if', 'while', 'try', 'do', 'for', 'throw', 'return', '+', '~', '!', 'new', 'lazy', 'case', '@', 'var', 'override', 'abstract', 'final', 'sealed', 'private', 'protected', 'import', 'def', 'class', 'object', 'trait', Id, BooleanLiteral, CharacterLiteral, SymbolLiteral, IntegerLiteral, StringLiteral, FloatingPointLiteral}
Файл scala правильный, это упрощенная версия файла, который я хочу проанализировать и который компилируется.
Что мне нужно исправить в грамматике?
Подробнее здесь:
https://stackoverflow.com/questions/782 ... lr-grammar
1712724506
Anonymous
Я использую ANTLR для анализа файлов Scala. Грамматику языка Scala я нашел здесь: https://github.com/antlr/grammars-v4 /blob/master/scala/Scala.g4 Я сгенерировал классы ANTLR из грамматики благодаря плагину antlr4-maven-plugin. [code] org.antlr antlr4-maven-plugin 4.13.1 antlr-generate generate-sources antlr4 src/main/antlr4 target/generated-sources/antlr4 true true [/code] У меня есть зависимость от среды выполнения: [code] org.antlr antlr4-runtime 4.13.1 [/code] Вот мой код для анализа файла Scala: [code]public class Main { public static void main(String[] args) throws IOException { Path filePath = Paths.get(args[0]); CharStream charStream = CharStreams.fromPath(filePath , StandardCharsets.UTF_8); ScalaLexer lexer = new ScalaLexer(charStream); CommonTokenStream tokens = new CommonTokenStream(lexer); ScalaParser parser = new ScalaParser(tokens); ParseTree tree = parser.compilationUnit(); ParseTreeWalker.DEFAULT.walk(new ScalaBaseListener(), tree); } } [/code] Я успешно использую этот файл scala test.scala в качестве входных данных: [code]object replace extends RewriteRule { def transform(node: Node): Seq[Node] = node match { case { value @ _* } => { value } case _ => node } } [/code] Однако этот ввод с добавленным ключевым словом override завершается неудачно: [code]object replace extends RewriteRule { override def transform(node: Node): Seq[Node] = node match { case { value @ _* } => { value } case _ => node } } [/code] Stderr сообщает, что находит неожиданные символы, такие как : из . [code]line 3:13 extraneous input ':' expecting {'-', 'null', 'this', 'super', '(', '_', Id, BooleanLiteral, CharacterLiteral, SymbolLiteral, IntegerLiteral, StringLiteral, FloatingPointLiteral, Varid, NL} line 3:19 extraneous input '{' expecting {'-', 'null', 'this', 'super', '(', '_', Id, BooleanLiteral, CharacterLiteral, SymbolLiteral, IntegerLiteral, StringLiteral, FloatingPointLiteral, Varid, NL} line 3:27 mismatched input '@' expecting {'=>', 'if'} line 3:30 extraneous input '*' expecting {'-', 'null', 'this', 'super', '(', '{', '}', 'type', 'val', '_', 'implicit', 'if', 'while', 'try', 'do', 'for', 'throw', 'return', '+', '~', '!', 'new', 'lazy', 'case', '@', 'var', 'override', 'abstract', 'final', 'sealed', 'private', 'protected', 'import', 'def', 'class', 'object', 'trait', Id, BooleanLiteral, CharacterLiteral, SymbolLiteral, IntegerLiteral, StringLiteral, FloatingPointLiteral} [/code] Файл scala правильный, это упрощенная версия файла, который я хочу проанализировать и который компилируется. Что мне нужно исправить в грамматике? Подробнее здесь: [url]https://stackoverflow.com/questions/78279544/my-scala-file-fails-scala-g4-antlr-grammar[/url]