構文の表記方法 |
この節は、Eiffel 構文仕様 で使用する表記方法を記述します。
あらゆる構成要素は、末端要素<terminal> か 非末端要素<non-terminal> かのいずれかです。末端要素は、それ以上、構文上の構造を持ちません。対照的に、非末端要素は、他の構成要素の用語において定義されています。末端要素には、予約語<reserved word>、シンボル<symbol>、そして 可変トークン<variable token> の三種類があります。
予約語は、キーワードまたは事前定義の名前であり、inherit や Result などといったものです。この生産物<production>では、予約語は、次のように、文字どおりボールド体で示します。
- Inheritance(継承)
- inherit Parent_list(親リスト)
シンボル<Symbol>
シンボルは、空白文字や他の文字を含まない、一字以上の文字から成り立つものであり、+ や ?= などといったものです。この生産物では、シンボルは、次の例のように、文字どおりボールド体で現れます。
- Assignment_attempt(試行割り当て)
- Writable(書き込み可能) ?= Expression(式)
ここで記述している表記法は、同じように、表記法自体のシンボルを持っています。この生産物での表記法のシンボルと Eiffel のシンボルとの混乱を避けるために、表記法のシンボルは、次のように、赤で表示します。
- New_feature_list(新たな特徴並び)
- { New_feature(新たな特徴) , ... }+
カンマは Eiffel のシンボルであるのに対して、左中括弧と右中括弧、 三つのドットとプラス記号は表記法の一部です。
可変トークン<Variable Token>
可変トークンは、Integer や Identifier などといった、末端要素です。これらは、下に示したように、平易な英語<English>で記述します。
- Identifier(識別子)
- 識別子は、一字以上の文字の並びであり、 最初の文字は英字( a から z までと A から Z まで)であり、それ以降の文字があるときは、 英字、数字( 0 から 9 まで)、あるいは下線文字(_)を続けます。
非末端要素要素を理解するために、構成要素の構造の形式的記述が必要です。このような記述は、構成要素のための 生産物<production> と呼びます。生産物は、次の書式を持ちます。
- Construct(構成要素)
- right-hand-side(左辺)
あらゆる非末端要素は、このような生産物の正確に一つの左辺に現れます。生産物の右辺には、左辺の構成要素の構造を記述します。左辺にある非末端要素は、その期待される生産物へアクセスするためにクリックできます。右辺の書式は、集合<aggregate>、選択<choice>、そして 反復<repetition> の三種類が使えます。
集合<Aggregate>
集合は、所与の順序で連結される、固定数の部品(いくつかは付加的であるかもしれない)からなる構成要素を記述します。集合の左辺は、次の例にあるように、空でない構成要素を並べたものです。
- Binary_expression(二項式)
- Expression(式) Infix_operator(前置演算子) Expression(式)
二項式 は、式、前置演算子、そして他の式から成ります。
もし集合がオプションの構成要素を含んでいるならば、その構成要素は、赤い角括弧 [] で囲みます。
- New_feature(新たな特徴)
- [ frozen ] Feature_name(特徴名)
上の例において、キーワード frozen は、オプションです。
選択<Choice>
選択は、いくつかの所与の変種を持つ構成要素を記述します。選択の左辺は、空でない構成要素を並べ、赤い縦棒 | で区切ったものです。
- Feature_name(特徴名)
- Identifier(識別子) | Prefix(前置子) | Infix(中置子)
Feature_name(特徴名) は、Identifier(識別子)、Prefix(前置子)、あるいはInfix(中置子)のいずれかです。
反復<Repetition>
反復は、すべてが所与の構成要素と同一である、可変数の部品からなる構成要素を記述します。反復の左辺は、次の二つの書式の一つになります。
{ Construct(構成要素) Separator(区切り文字) ... } { Construct(構成要素) Separator(区切り文字) ... }+ここで、Separator(区切り文字)は、通常は末端要素ですが、必ずしもそうとは限りません。これが述べていることは、記述される構成要素は、構成要素のゼロ個以上の類語<specimen>から成り、もし構成要素が二つ以上あるならば区切り文字で区切ります。最初の書式では、+ を伴わず、記述される構成要素の類語は空であってもよいです。第二の書式では、+ を伴い、それらは、少なくとも一つの構成要素を含まなければなりません。
注釈は、記述される構文の一部ではありません。注釈は、ここの構成要素または構成要素一式に関する、いくつかの良く知られた助言<tips>と秘訣<trics>を読者に提供します。注釈は、字下げして、緑色で表示します。
- Interval(間隔)
- Choice_constant(選択定数) .. Choice_constant(選択定数)
注意事項: 字句解析プログラムは、次の例のように、十分整然としていなければなりません。
inspect expr when 1..2 then ...実際、 '1..2' は、 二つの連続した実数の定数 '1.' と '.2' ではなく、 Eiffel のシンボル '..' によって区切られた、 二つの整数定数 '1' と '2' として認識されます。
|
Copyright (c) 1997, Eric Bezault ericb@gobo.demon.co.uk http://www.gobo.demon.co.uk Last Updated: 6 September 1997 |