0

私はいくつかのトークンを持っています:

PNAMEおよびENAME-両方とも文字列です。

次に、これらのトークンを一致させるために、レクサーに2つのルールを設定します。

PNAME文字列が文字azとオプションの特殊文字@/()で構成されている場合、最初のルール( )は一致する必要があります。

2番目のルールENAME)は、文字列が文字azとオプションのプレフィックス(#/。)で構成されている場合に一致する必要があります。

ENAMEさて、プレフィックスがない場合でも、一致するだけのルールをレクサーファイルでどのように作成しますか?

違いが生じる場合は、次のような文字列ENAMEの後にアフターがあります。-ただし、このブラケットをパーサーに渡さないでください...{(prefix)eName {

助言がありますか?

4

1 に答える 1

2

この質問が以前の質問(CSSの解析について)に関連している場合は、おそらく別のアプローチを使用する必要があります。

レクサーは、#and .(トークン名HASHDOT)、中括弧(トークンLCURLYRCURLYfor{}それぞれ)、および任意IDENTの文字シーケンスをとる正規表現を使用する任意の識別子などの単純なトークンのみを識別する必要がありますa-zA-Z

残りの処理(CSSルールの識別など.foo { ... })は、パーサーで実行する必要があります。以前の回答では、プロパティ名のリストを解析する方法について説明しました。navigatorsこれは、またはなどのHTML要素を指定する構文要素であると想定してい#nameます#name .class。これらに対して個別の解析ルールを作成できます。

navigators = 
  | navigator            { [$1] }
  | navigator navigators { $1::$2 }
navigator = 
  | HASH IDENT   { SelectByID($2) }
  | DOT IDENT    { SelectByClass($1) }

パーサーとレクサーのワーティングの詳細については、ウィキブックスの記事とChrisSmithのブログを参照してください。

于 2011-06-30T18:58:41.323 に答える