狠狠撸
Submit Search
僕が構文解析にこんなにも時間をかけてしまった理由 ?Yacc/Bisonにおけるノウハウ?
?
0 likes
?
1,277 views
Y
Yuki Ito
Follow
170722 Aizu.golang with tenntenn Yaccをつかっていていくつか躓いたところをまとめました。
Read less
Read more
1 of 67
Download now
Download to read offline
More Related Content
僕が構文解析にこんなにも時間をかけてしまった理由 ?Yacc/Bisonにおけるノウハウ?
1.
僕が構文解析に こんなにも時間を かけてしまった理由 会津大学 学部三年 /
Eyes, JAPAN Co. Ltd. 伊藤勇希 / @publmag1 / acomagu 170722 Aizu.golang
2.
自己紹介 - 伊藤勇希 - 福島県伊達市出身 -
会津大学学部3年 - Eyes, JAPAN Co. Ltd.
3.
自己紹介 - 好きな言語: - Golang -
Fish - 合唱
6.
自己紹介 - 好きなエディタ - (Neo)Vim
7.
はじめに
8.
Welcome To Aizu!!!!
9.
ところで
10.
gometalinter つかってますか?
11.
gometalinter 最高くないですか?
12.
そんな僕が
13.
Fish にもLinterが欲しくて
14.
孤军奋闘する切ない物语...
15.
僕が構文解析に こんなにも時間を かけてしまった理由 会津大学 学部三年 /
Eyes, JAPAN Co. Ltd. 伊藤勇希 / @publmag1 / acomagu 170722 Aizu.golang ?Yacc / Bison におけるノウハウ集?
16.
时は遡って6/22
18.
尝颈苍迟ツールの作成开始
20.
① 字句解析器と構文解析 器の違いがわからない
21.
② %unionが 全く理解できない
22.
%union とは
24.
構文解析中にずっと 破棄されず使いまわされる 構造体のこと
25.
③ go tool
yaccコマンドが ない
26.
go tool yacc
コマンドは goyaccパッケージに移動しました!!! (Since Go 1.8)
28.
④ セミコロンの省略はどう するか?
29.
n と ;
の2つがデリミタとして使える
30.
n と ;
の2つがデリミタとして使える が
31.
空行はどうする?
33.
;n+ をEOSに設定
35.
IF は 文?
式?
36.
最終的にこう定義した - Statement: パイプ可能 -
Expression: パイプ不可能
37.
- Statement: パイプ可能 -
Expression: パイプ不可能 - > IF_STMT 最終的にこう定義した
39.
構文解析器に スペースを渡すか?
40.
なぜこんな話が出るのか? - スペースを構文解析器に渡すメリット - クオーテーション内の変数と外の変数を統一 的に字句解析器がパースできる -
aa”bb”cc と aa “bb” cc の区別
41.
しかし 字句解析器が状態を持たなければならなく なる (e.g. クオーテーション中?
外?) なぜこんな話が出るのか?
42.
結論 悩んだ末、スペースを渡すことに
43.
しかし...
47.
Yacc(bison)は闇 - 複雑なことをしようとするとすぐにデバッグが困難 になる - y.output(Yaccが出力するオートマトンの状態遷 移リスト)をコンフリクトする部分から3つ以上遡ら なければならない状態くらいになるともう無理 -
Wikipediaにも「経験上のノウハウ」のリストがあ る
48.
Yaccに立ち向かうための武器 - bison -v
49.
というわけで...
51.
結論 悩んだ末、スペースを渡すことに スペースを渡さずに字句解析側で頑張るこ とに...
52.
しかししかし...
54.
問題 abc (ls) と
abc(ls) がどちらも IDENT ‘(‘ IDENT ‘)’ になってしまう!
58.
つまり - abc( ->
STRS_AND_LEFT_PAREN - )def -> RIGHT_PAREN_AND_STRS - )ghi( -> RIGHT_PAREN_AND_STRS_AND_LEFT_PAREN
63.
ここで彼の言叶は终わっている...
64.
まとめ - Yaccは闇 - 字句解析器と構文解析器でうまーくラインを引くノウハウが 必要 -
デバッグの方法を知っておく - ドキュメントが極端に少ないが、公式に目を通せば仕組み は理解できる - 静的解析は書き始める前にきっちり役割分担と要素を決める べき
65.
まとめ - go/ast、go/parser、go/tokenは読むべき - mattnさんのstreeemの実装も無茶苦茶参考にな る -
tenntennさんのgoyacc入門も穴が開くほど読ん だ
66.
Lintはすぐ! 完成させます!
67.
Thanks!!!
Download