私はNearley と mooを使用して、かなり複雑な文法を作成しています。私の空白の要件を除いて、うまく機能しているようです。文法を明確に保ちながら、必要な場合は空白を要求し、そうでない場合は許可する必要があります。
例えば:
After dinner, I went to bed.
単語の間に空白を必要とする必要がありますが、カンマの周りは許可します。したがって、以下も有効です。
After dinner , I went to bed.
After dinner,I went to bed.
以下は、これを行うための簡単な Nearley 文法です。構文がわからない場合でも、簡単に理解できます。
// Required whitespace
rws : [ \t]+
// Optional whitespace
ows : [ \t]*
sentence -> words %ows "," sentence
| words
words -> word %rws words
-> word
word -> [a-zA-Z]
文法に問題があるかもしれませんが、考え方は同じです。これはあいまいな文法になります。オプションおよび必須の空白を想定して、明確な文法を定義するにはどうすればよいですか?