!VHDLファイルをJRubyでいじる VHDLでJavaをいじるためのライブラリ,というのはいくつか公開されていますが, 今回は, http://sourceforge.net/projects/edautils/files/ から, parsevhdl-30OCT2012.tar.gz をダウンロードして試してみます. で,いろいろと手軽にさわってみたいな,と,JavaじゃなくてJRubyでいじってみることに. ::準備 ダウンロードして展開してできる parsevhdl-30OCT2012/lib/parseVhdl.jar がロードすべきライブラリのJARファイル. たとえば, /Users/miyo/src/parsevhdl-30OCT2012/lib/parseVhdl.jar だとすると, export CLASSPATH=/Users/miyo/src/parsevhdl-30OCT2012/lib/:$CLASSPATH とかしてクラスパスに追加しておきます. あ,もちろんJRubyも用意しておく必要があります. ::とりあえず,いじるためのローダーを用意 ダウンロードしたファイルのexampleから,とりあえずパースするために必要そうな部分だけを 抜きだしてみました.{{ref test.rb}}. 中身は↓のような感じ. def parse_vhdl(fName, lName) include Java require 'parseVhdl.jar' java_import 'com.eu.miscedautils.SortHDL.ANTLRNoCaseFileStream' istream = ANTLRNoCaseFileStream.new(fName) lexer = com.eu.miscedautils.vhdlparser.VhdlRTLLexer.new(istream) tokenStream = org.antlr.runtime.CommonTokenStream.new(lexer) parser = com.eu.miscedautils.vhdlparser.VhdlRTLParser.new(tokenStream) parser_ret = parser.parseVhdlRTL(lName, true) return parser_ret end ::実行 jirbを起動して,ローダーをload.パースしたいVHDLファイルをくわせてみます. VHDLファイルは,たとえば{{ref counter.vhd}}とか. あ,解析のためにディレクトリが作られるので何もないところで実験するのがいいです. たとえば,~/tmp/test とかで実験しました.~/tmp/testの下に,test.rbとcounter.vhdをおいて, miyo@cider:% cd ~/tmp/test miyo@cider:% jirb irb(main):001:0> load "test.rb" irb(main):002:0> ret = parse_vhdl("counter.vhd", "work") とかすると,retにVHDLを解析した結果である com.eu.miscedautils.vhdlparser.VhdlRTLParser.parseVhdlRTL_returnのインスタンスがバインドされます. あとは, p ret.root.getSymbolTable とか tbl = ret.root.getSymbolTable p tbl['counter'] とか tbl['counter'].getPorts.get(0) tbl['counter'].getPorts.get(0).getName() とかしていじれます.ちなみに最後の式の評価結果は"pClk"で, counter.vhdで定義しているポートの名前が取得できていることがわかります. ::さて いろいろ遊んでみよう.