式エバリュエーターの数値に +/- 記号のサポートを追加したいのですが、それが数値トークン (例: number = [\+\-]*[0-9]+
) の一部として字句要素であるべきか、構文要素 (例: primary ::= [ ( "+" | "-" ) ] primary | number
where number = [0-9]+
) であるべきかわかりません。
上からわかるように、この記号は任意に多くなる可能性があります。現在、再帰降下と演算子の優先順位解析の両方を使用して構文バージョンを実装しています。しかし、これが良い選択かどうかはまだわかりません。私が気付いたことの 1 つは、構文バージョンでは、一致する各記号に対して再帰が必要なことです。