java - 如何将缩进驱动的代码解析为 AST

标签 java antlr antlr4 abstract-syntax-tree

这是我需要解析为 AST 的代码:

one
 two
  three
   four
 five
 six
  seven

如您所见,它是缩进驱动的。我真的找不到一种方法来解释我的解析器(我正在使用 Antlr4),前导空格是子级别的指示符。

最佳答案

基本上,如果没有词法分析器的帮助,你无法向解析器解释它。

相反,您所做的就是破解词法分析器,以在扫描空格时跟踪一行开头的空格数。如果空间计数与上一行相比发生变化,则词法分析器会发出一个标记。如果计数增加,则发出 INDENT 标记。如果计数下降,则发出 DEDENT token 。

现在您可以将 INDENT 和 DEDENT 标记添加到解析器规则中。它们的逻辑行为类似于类 C 语言中的 { 和 }。

关于java - 如何将缩进驱动的代码解析为 AST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936000/

相关文章:

ANTLR错误(99)语法没有规则

java - webView的scrollTo始终不工作

java - 继续 TextView 上的另一个 Activity 和/或 fragment 单击

匹配相似字符串的 Antlr lexer 标记,如果贪婪的词法分析器出错了怎么办?

visual-studio-2010 - 如何抑制自动生成文件的 stylecop/fxcop/Visual Studio 代码分析?

intellij-idea - 我们如何使用 Intellij ANTLR V4 插件测试 ANTLR Lexer 规则?

java - 如何为 ANTLR 中的模糊输入生成多个解析树

parsing - 可以使用ANTLR解析大文件吗?

Java 递归 - 我这样做对吗?

java - 如何在 Java 中使用 servlet 过滤器来更改传入的 servlet 请求 url?