java - 使用 ANTLR 语法进行 Verilog 解析

标签 java parsing antlr verilog antlr4

我正在尝试用 Java 创建一个解析器(使用 Netbeans),它可以接受任何任意 Verilog 文件作为输入,并生成包含门的网表作为输出。网表不必优化。

我有 ANTLR 语法文件 https://github.com/antlr/grammarsv4/blob/master/verilog/Verilog2001.g4

但是,我不太确定如何将它集成到我的 Java 程序中。

例如,如果我有以下 Verilog 文件作为输入,

module and3(output out, input in1, in2,in3);
  reg r_out;
  assign out = r_out;
  always@(in1, in2, in3)
    begin
      case({in3,in2,in1})
        000: out = 0;
        001: out = 1;
        010: out = 1;
        011: out = 1;
        100: out = 0;
        101: out = 1;
        110: out = 0;
        111: out = 1;
        default: out = 0;
      endcase
    end
endmodule

我想确定输入和输出端口的名称及其大小。我还想识别always block 以及case 语句 block 以及Case 语句中的每个赋值。

所以我的疑问是:

1) 如何将其集成到我的 java 程序中

2) 如何使用此 Verilog 语法文件并读取上面提到的 Verilog 代码来识别输入、输出、case 语句、赋值语句。

谢谢

最佳答案

我最近解决了一个类似的任务。我开始使用与 ANTLR 相同的语法文件为 Verilog 创建一个 IntelliJ 插件。目前,它可以成功解析Verilog文件并进行一些突出显示/完成等操作。

这是我的代码 https://github.com/MrTsepa/jetbrains-verilog-plugin

首先,我使用一些 ANTLR 工具生成 ANTLR AST 树(嵌入在 Idea 的 ANTLR 插件中),然后通过 ANTLR adapter 将此树调整为 IntelliJ 的 AST 格式(PSI 树)。

关于java - 使用 ANTLR 语法进行 Verilog 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507920/

相关文章:

java - 使用大 IF ELSE 字符串比较来调用不同的方法。更有效的方法?

javascript - 如何使用Papa Parse进行javascript csv解析

c - 如何输出使用 ANTLR 构建的 AST?

java - OpenCV linux下如何安装FFMPEG

java - 如何在 TestNG 中使用 @AfterMethod 跳过方法

java - 当 Firebase 中的值发生更改时,Sharedpreferences 值会更新

python - 在python中将json文件解析为csv文件时如何获得水平输出

Java:从一棵树遍历到另一棵树

java - 是否可以将树(数据结构)传递给 clojure 并对其进行处理?

java - 尝试让 ANTLR 语法遵循 AND/OR 语句