私は単純な C アプリケーションに取り組んでおり、アプリケーションのいくつかの動作を定義する DSL を作成するという考えがありました。アイデアは、非常にクリーンな言語を作成することです...実際にはCで実行されます.
この考えを持ったのはあなたが初めてではありません。John Ousterhout は、このアイデアをTcl/Tkで普及させました。残念ながら、この言語はあまりきれいではありません。
現在利用できるこのアイデアの最も明確な実現は、組み込み言語Luaです。非常によく設計されており、非常に強くお勧めします。(Lua を使用する代わりに) 独自のものを構築する唯一の理由は、組み込みプログラミング言語の実装方法を学びたいからです。その場合でも 、Lua の設計を研究することで多くのことを学ぶことができます。
私は lex と yacc を知っていますが、私がやろうとしていることにはやり過ぎだと思います。もっと簡単なものはありませんか?
ほとんどの場合、lex を使用するよりも手でレクサーを作成する方が簡単です。
yacc は別の話です。根本的に単純なものは実際にはありません。なぜなら、文脈自由言語の全機能を実際に扱わなければならないからです。しかし、この洗練されたテクノロジーは他のパッケージにも見られます (Lex と yacc は、1970 年代のハードウェアの制約のために設計された 1970 年代のテクノロジーであり、ヒューマン インターフェイスが貧弱です)。
LL(1) 文法の設計方法を知っていれば、手書きの再帰降下パーサーは非常に簡単に作成でき、追加の技術は必要ありません。しかし、知識を習得するのはそれほど簡単ではなく、これらを C でコーディングするのはあまり楽しくありません。
学びたい場合は、ニクラウス ヴィルトの著書に優れた例があります。LL(1) のチュートリアルとオンラインの再帰的降下もあるかもしれません。
LALR(1) 文法に限定されない、より最新のパーサー ジェネレーターを使用する方が簡単な場合があります。たとえば、おそらくElkoundパーサー ジェネレーターです。しかし、これも単純ではありません。