トークン識別子WORDとNAMEの違いは何ですか?

トークン識別子WORDとNAMEの違いは何ですか?

POSIX 7では、シェル構文(XCUのセクション2.10)には複数のトークン識別子が記載されています。私は言葉と名前の2つについて混乱しています。それらの違いは何ですか?

たとえば、コマンドオプションがWORDですか、それともNAMEですか?コマンドの非選択的な引数はどうですか?

ベストアンサー1

このセクションのすべての大文字の名前は(おそらくマシンをコンパイル可能な)lex構文の説明を参照します(2.10。シェル構文)。質問された機能は項目5に記載されています。

[NAME存在するfor]

いつ。 。 。いつTOKEN名前の要件を満たしています(参照XBD名) トークン識別子NAME結果を生み出します。そうでなければトークンWORD返す必要があります。

つまり(参考として3.231 名前)、ㅏNAMEどんな種類なのかWORD:

シェルコマンド言語では言葉移植可能な文字セットの下線、数字、および文字のみで構成されます。 aの最初の文字名前数字ではありません。

すべての単語が名前ではありません。 10進整数は単語ですが、名前ではありません。

構文に関して、次の行はyaccシンボル定数( via #define)がlex返すことができる内容を示します。

%token  WORD
%token  ASSIGNMENT_WORD
%token  NAME
%token  NEWLINE
%token  IO_NUMBER

そしてyacc文法(規則)は次のように始まります。

%start  complete_command

WORD構文にが表示されることがわかります。この時点で、対応するシンボル定数が返されると予想します。通常、大文字の名前はこの目的に使用され、他の名前は構文上の規則にすぎません。NAMEyacclexyacc

コマンドを解釈するとき、シェルインタプリタはNAMEになると予想される最初のWORDにのみ興味があります。他の単語をコマンドの引数として渡し、コマンドはその意味を決定する必要があります。これの構文はyaccあいまいですが、「7a」への参照を参照してください。これを表示する書面標準には項目はありませんが、次に移動しました。2.9.1 簡単なコマンド文法では、このクラスターに対応します。

simple_command   : cmd_prefix cmd_word cmd_suffix
                 | cmd_prefix cmd_word
                 | cmd_prefix
                 | cmd_name cmd_suffix
                 | cmd_name

(練習で誰かが文法を完成させ、実際に作ってみることもできます。マッチ用語標準)。

おすすめ記事