- SmaCC で ggame のサンプル
- greeting : hello world
- greeting : "hello" "world" ;
- expr : expr inc [ :a :b | a + 1 ]
- expr : number
- expr : expr "inc" { '1' + 1 } ;
- expr :
{ '1' value asNumber } ;
- greeting : hello world
- ブロック構文、derivation 以外は可能。
- SmaCC 文法はやっぱり難しい?
- * と + を使ってみる (拡張BNF)
- アクションが無ければ簡単
- アクションの書き方は? 以下の場合、'2' には "inc" のOrderedCollection が入る。
- expr ::=
"inc" * { '1' value + '2' size } ;
- 文法
- まずは 9月 ggame と同じに
- 行末の ; は廃止
- 終端記号の "" は省略
- スキャナは固定
- 後で考える
- 正規表現風 * + には別の表現を充てる?
- グループ化は [] ?
- アクション {}
- アクションへの引数は シンボル名 + 番号
- まずは 9月 ggame と同じに
- RefactoryChangeManager とは何か? こいつのせいで遅い。
- しばらく触らずにおこう。。。
SmaCCGrammar から文法をテキストに復元できるか? -> これは出来そう。
- SmaCC に言いたい事。
Term: |{' ' "grammar terminalSymbolNamed: '1' value ifAbsent: [currentToken := '1'. self reportErrorMessage: 'Token not specified']"}
-
- コンパイル時スキャナも書き換えられてしまう事が判明! スキャナとパーサは一対一である必要がある。今までのわけの分からない現象はこれか?!ドキュメントに書いとけ!
- エラーメッセージ不親切すぎ! T-Gen なら本当はこれのはずなんだけどと教えてくれる。