【问题标题】:Python target for Java grammar in antlrantlr 中 Java 语法的 Python 目标
【发布时间】:2016-11-19 19:46:49
【问题描述】:

我想使用 Antlr 在 Python 中为 Java 运行 Lexer

对于 Antlr4,我使用的是来自 https://github.com/antlr/grammars-v4/tree/master/java8 的 Java8 语法。

我正在使用生成解析器

java -jar antlr-4.5.2-complete.jar -Dlanguage=Python2 ./Java8.g4

现在,如果我查看生成的 Java8Lexer.py,它包含

return Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))

我不认为类型转换是有效的 python,当我使用它时它会在那里引发语法错误。

我在使用 antlr3 java 1.6 语法使用 antlr3 时遇到了类似的问题。它产生了

boolean isSomething = something

这也不是有效的 Python。

我错过了什么吗?有没有办法在 Python 中使用 antlr 使用 Java Lexer?

【问题讨论】:

    标签: java python antlr4


    【解决方案1】:

    只需从您的 Java8 语法中删除以 Character.isJavaIdentifierStart 开头的字符串即可。

    【讨论】:

    • 删除 替换为它们的 Python 等效项,因为谓词对于这些词法分析器规则的正确操作很重要。
    • 我离开了规则的第一部分,即字符类 [a-z] 等。但删除了 Character.* 东西,它现在可以工作了。谢谢!
    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多