LoginSignup
3
1

More than 1 year has passed since last update.

BNFCチュートリアル

Last updated at Posted at 2021-08-23

字句解析/構文解析/ASTの生成までをやってくれるフレームワークBNFCを試してみた

BNF構文を書くだけで字句解析/構文解析/ASTの生成までをやってくれるらしい。

  • 検証環境Debian11(bullseye)
$ sudo apt-get install haskell-stack
$ stack install BNFC
  • PATH=$PATH:~/.local/bin にパスを通しておく

BNFCを呼び出す

BNF Converter Tutorial

  • バージョンが出れば成功
$ bnfc --version
2.9.2
  • C++でlexer/parser/astを出力するには
$ bnfc -m -c       FILE.cf      # to generate C
$ bnfc -m -cpp_stl FILE.cf      # to generate C++ with STL

計算機

以下のファイルを用意する

Calc.cf
    EAdd. Exp  ::= Exp  "+" Exp1 ;
    ESub. Exp  ::= Exp  "-" Exp1 ;
    EMul. Exp1 ::= Exp1 "*" Exp2 ;
    EDiv. Exp1 ::= Exp1 "/" Exp2 ;
    EInt. Exp2 ::= Integer ;

    coercions Exp 2 ;

コンパイル

$ bnfc -m -cpp_stl Calc.cf
$ make

お試し

$ echo "23 + 4 * 70" | ./TestCalc

Parse Successful!

[Abstract Syntax]
(EAdd (EInt 23) (EMul (EInt 4) (EInt 70)))

[Linearized Tree]
23 + 4 * 70 

やるじゃん

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1