一連のステートメントを持つ C ライクな言語の文法を作成する場合、文法を定義する最も標準的な方法は何ですか?
私の考えは、次のようなことをすることです:
<program> ::= <statement>
<statement> ::= <statement-head><statement-tail>
<statement-head> ::= <if-statement> | <var-declaration> | <assignment> | <whatever>
<statement-tail> ::= ; | ;<statement>
しかし、それは私には少し不格好に感じます。作ることも考えました
<program> ::= <statement>*
また
<statement> ::= <statement-head> ; | <sequence>
<sequence> ::= <statement> <statement>
タイププロダクション。
これを行うための標準的な方法または受け入れられている方法はありますか。ASTをできるだけきれいにしたい。