私は私たちのサイトのユーザー向けのメッセージングシステムを書いています。これは、個々のメッセージがユーザーの動的セグメントをターゲットにできるようにセグメンテーションを実装しています。特定のメッセージのセグメント定義には複数の個別のセグメント一致が含まれる場合があるため、メッセージ本文のコンテンツもセグメント化する必要があります。はるかに経験豊富なプログラマーとの偶然の会話がレクサーとパーサージェネレーターを調べることを提案するまで、私はカスタムレクサー/パーサーであることが判明したものを(レクサーやパーサーについてさえ知らずに)書くことによってこれを試みました。少し調べてみたところ、私が書いているコードはPHPであるため、PHPネイティブのLimeパーサージェネレーターが私の最良の選択肢であることがわかりました。
電卓の例の文法ファイルとメタグラマーを調べましたが(実際、ほとんどのソースコードの分析に数時間を費やしました)、構築方法に頭を悩ませています。単純な文法ファイルですら。レモンや他のPGの文法定義ではなく、独自の文法定義のように見える、ライム専用の文法ファイルの例を知っている人はいますか。
あなたが喜んで具体的な例を提供できるのであれば、私は具体的に次のような形式で条件文を書こうとしています。
This is a text block all users will see.
{{IF user.modules.sms}}
This is a text block only visible to users with the sms module enabled
{{/IF}}
{{IF user.modules.anothermodule AND user.previouslogin < (now() - 3600)}}
This is a text block only visible to users with the anothermodule module enabled, whose previous login was more than an hour ago
{{/IF}}
または、一般的に、そのような機能を実装する他の可能な方法について誰かが提案を持っている場合、私はアドバイスを歓迎します!これらのメッセージを書く人はプロジェクトマネージャーとマーケターになるので、PHPを使用することはできないことを覚えておいてください。