iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
自我挑戰組

C again系列 第 22

Bison

  • 分享至 

  • xImage
  •  

要看懂 parse.c 需要對 Bison 有一定瞭解,可是 https://www.gnu.org/software/bison/manual/bison.html 文件很長,就算只是掃過去都要不少時間。

用前面最簡單的例子實際走看看流程,能不能稍微有點感覺

pp Ripper.sexp <<~RUBY
RUBY
# => [:program, [[:void_stmt]]]

output 裡的 void_stmt 沒有在 parse.y 內直接定義,想先弄清楚它的來源。
先看 program 的定義和產生的 C code 比較

https://ithelp.ithome.com.tw/upload/images/20231005/20161937bPLkBu3ISV.png

program 的組成有個 top_compstmt,就字面猜上述沒內容的例子應該是對應到 top_stmts : none

top_stmts	: none
                    {
		    /*%%%*/
			$$ = NEW_BEGIN(0, &@$);
		    /*% %*/
		    /*% ripper: stmts_add!(stmts_new!, void_stmt!) %*/
		    }
            
none		: /* none */
		    {
			$$ = Qnull;
		    }
		;

上一篇
用 Ripper 看 tokens, AST (3)
下一篇
Bison (2)
系列文
C again30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言