2

私は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]

文法に問題があるかもしれませんが、考え方は同じです。これはあいまいな文法になります。オプションおよび必須の空白を想定して、明確な文法を定義するにはどうすればよいですか?

4

2 に答える 2