Eiffel: Sintaksis

Original URL: http://www.gobosoft.com/eiffel/syntax/index.html

Translation by: Qalina Najafova


Burada təsvir edilən şərhli Eiffel sintaksisi bəzi məsləhətlərdən və fəndlərdən faydalanmaq istəyən tərtibçilər, tərcüməçilər, sintaksis yoxlayıcıları, qısa və düz alətlər, yaraşıqlı printerlər və s. kimi Eiffel alətlərinin müəllifləri üçün nəzərdə tutulub. Bu Eiffel üçün Qeyri-kommersiya Beynəlxalq Konsorsiumu ( NICE ) tərəfindən təqdim edilən rəsmi Eiffel sintaksisi spesifikasiyası olmasa da , o, yalnız iki və ya üç yaxşı sənədləşdirilmiş vəziyyətdə ondan ayrılır. Xüsusilə, mövcud kompilyatorların Eiffel sintaksisini harada və bəzən nə üçün genişləndirdiyini izah edir.

Eiffel sintaksisi konstruksiyaları Class_declaration kimi yüksək səviyyəli konstruksiyalardan başlayaraq İdentifikator kimi leksik komponentlərə qədər qruplara bölünür . Alternativ olaraq, bu konstruksiyalar da əlifba sırası ilə verilir . Eiffel sintaksisini təsvir etmək üçün istifadə edilən qeyd başqa yerdə göstərilmişdir. Eiffel sintaksisinin yacc və lex formatında mümkün tətbiqi də nümunə kimi təqdim olunur.


Class_declaration
[ Indexing ]
Class_header
[ Formal_generics ]
[ Obsolete ]
[ Inheritance ]
[ Creators ]
[ Features ]
[ Invariant ]
end [ -- class Class_name ]

Qeyd : Əksər Eiffel tərtibçiləri isteğe bağlı şərhin etibarlılığını end açar sözündən sonra yoxlamırlar. SmallEiffel bir xəbərdarlıq yayır.

Qeyd : Faylda birdən çox sinif bəyannaməsi ola bilər. Bununla belə, Eiffel tərtibatçılarının əksəriyyətində fayl başına bir sinif məhdudiyyəti var.


Indexing
indexing Index_list
Index_list
{ Index_clause ; ... }

Class_header
[ Header_mark ] class Class_name
Header_mark
deferred | expanded | separate

Qeyd : Ayrı açar sözüEiffel standartının bir hissəsi deyil. SCOOP mexanizmini dəstəkləmək üçün ISE Eiffel-də təqdim edilmişdir. Ətraflı məlumat üçün Obyekt yönümlü proqram təminatının qurulması , ikinci nəşrioxuyun

Class_name
Identifier

Formal_generics
[ Formal_generic_list ]

Qeyd : Formal generiklərin siyahısı boş ola bilər. Nəticədə, FOO [] etibarlıdır və FOO ilə eyni deməkdir . Ancaq bu tövsiyə olunan üslub deyil.

Formal_generic
Formal_generic_name [ Constraint ]
Formal_generic_name
Identifier
Constraint
-> Class_type

Obsolete
obsolete Message
Message
Manifest_string
Inheritance
inherit Parent_list
Parent_list
{ Parent ; ... }
Parent
Class_type Feature_adaptation ]
Feature_adaptation
Rename ]
[ New_exports ]
[ Undefine ]
[ Redefine ]
Select ]
end
Qeyd : Bu konstruksiyaya görə Eiffel qrammatikasıLR(1). Bu, aşağıdakı vəziyyətdə baş verir:
sinif FOO
 miras
    BAR
son

Son açar sözü Class_declaration konstruksiyasının bir hissəsi kimi deyil, isteğe bağlı Feature_adaptation hissəsi kimi nəzərdən keçiriləcək .

Bu problemi həll etməyin bir yolu, Feature_adaptation- da açar sözün sonuna yalnız Feature_adaptation- u təşkil edən əlavə konstruksiyalardan ən azı biri mövcud olduqda icazə vermək olardı .


Rename
rename Rename_list
Rename_list
{ Rename_pair , ... }
Rename_pair
Feature_name as Feature_name

New_exports
export New_export_list
New_export_list
{ New_export_item ; ... }
New_export_item
Clients Feature_set
Feature_set
Feature_list | all
Feature_list
{ Feature_name , ... }

Clients
{ Class_list }
Class_list
{ Class_name , ... }

Redefine
redefine Feature_list
Undefine
undefine Feature_list
Select
select Feature_list

Creators
creation Creation_clause creation ... }+
Creation_clause
[ Clients ] [ Header_comment ] Procedure_list

Qeyd : Standart sintaksis Prosedur_siyahısı əvəzinə Xüsusiyyətlər_siyahısı tələb edir , lakin Yaradılma_bəndi əslində yaratma prosedurunun adlarını sadalayır (VGCP-2).

Procedure_list
{ Procedure_name , ... }
Procedure_name
Identifier

Qeyd : Prefiks və İnfiks prosedur adları deyil, funksiya adlarıdır. Prefiksin atribut adı ola biləcəyi mənə aydın deyil, lakin o, mütləq prosedur adı deyil (baxın etibarlılıq qaydasıVFFD-5).


Features
feature { Feature_clause feature ... }+
Feature_clause
Clients ] [ Header_comment ] Feature_declaration_list
Feature_declaration_list
{ Feature_declaration ; ... }

Feature_declaration
New_feature_list Declaration_body
Declaration_body
[ Formal_arguments ] [ Type_mark ] [ Constant_or_routine ]
Constant_or_routine
is Feature_value
Feature_value
Manifest_constant | Unique | Routine
Unique
Unique

New_feature_list
{ New_feature , ... }+
New_feature
[ frozen ] Feature_name

Feature_name
Identifier | Prefix | Infix
Prefix
prefix " Prefix_operator "
Infix
infix " Infix_operator "
Prefix_operator
Unary | Free_operator
Infix_operator
Binary | Free_operator

Qeyd : Bütün Eiffel tərtibçiləri hərf hərfindən asılı olmayaraq prefiks və infiks operatorlarını qəbul edirlər, məsələn, "NOT" prefiksi və ya "AnD" infiksi .

Qeyd : Birinci və ya sonuncu qoşa sitatdan əvvəl heç bir müdaxilə simvoluna icazə verilmir. Lakin və sonra və ya başqa iki açar söz arasında hansı növ fasilədən istifadə edilməli olduğu aydın deyil. SmallEiffel istənilən sayda blankı və nişan simvolunu qəbul edir, digər tərtibçilər isə tək blank tələb edir.


Unary
not | + | -
Binary
+ | - | * | / | < | > | <= | >= | // | \\ | ^ |
and | or | xor | and then | or else | implies

Formal_arguments
( Entity_declaration_list )
Entity_declaration_list
{ Entity_declaration_group ; ... }
Entity_declaration_group
Identifier_list Type_mark
Identifier_list
{ Identifier , ... }+
Type_mark
: Type

Qeyd : Müəssisə bəyannamələrinin siyahısı boş ola bilər. Nəticədə, foo () etibarlıdır və foo ilə eyni deməkdir . Ancaq bu üslub tövsiyə edilmir.


Routine
Obsolete ]
[
 Header_comment ]
[
 Precondition ]
Local_declarations ]
Routine_body
[ Postcondition ]
Rescue ]
end [ -- Feature_name ]

Qeyd : Əksər Eiffel tərtibçiləri isteğe bağlı şərhin etibarlılığını end açar sözündən sonra yoxlamırlar. Artıq bu şərhi yazmaq üslub qaydalarına daxil deyil.


Routine_body
Effective | Deferred
Effective
Internal | External
Internal
Routine_mark Compound
Routine_mark
do | once
Deferred
deferred

External
external Language_name [ External_name ]
Language_name
Manifest_string
External_name
alias Manifest_string

Qeyd : Hər bir Eiffel tərtibçisi digər proqramlaşdırma dilləri ilə interfeysini təsvir etmək üçün dil adında və xarici ad sətirlərində öz mini-sintaksisini dəstəkləyir. Ətraflı məlumat üçün müxtəlif kompilyatorlarla gələn sənədlərə baxın.


Local_declarations
local Entity_declaration_list

Precondition
require [ else ] Assertion
Postcondition
ensure [ then ] Assertion
Invariant
invariant Assertion
Assertion
{ Assertion_clause ; ... }
Assertion_clause
[ Tag_mark ] Unlabeled_assertion_clause
Unlabeled_assertion_clause
Boolean_expression | Comment
Tag_mark
Tag :
Tag
Identifier

Qeyd : Başlıq şərhləri kimi şərhlər Rutin və ya Xüsusiyyətlər kimi bəzi konstruksiyalarda gözlənilsə də , şərhə məhəl qoymamağın sintaksis xətası və ya yanlış sintaksis ağacı ilə nəticələndiyi yeganə yer budur. Bu, aşağıdakı hallarda baş verir:

tələb 
    etiketi : -- Diqqət edilmədikdə sintaksis xətası!
 et

tələb 
    etiketi : -- Bu şərh nəzərə alınmazsa,
         -- etiket səhv olacaq-- foo 
         ilə əlaqələndirilir . etibarlıdır !
     foo . etibarlıdır

Ətraflı məlumat üçün Şərhdə ikinci qeydə baxın .


Rescue
rescue Compound

Qeyd : Etibarlılıq qaydasıVXRTbildirir ki, Yenidən cəhd təlimatı yalnız xilasetmə bəndində etibarlıdır. Bu, nəhayət, sintaksis tərəfindən həyata keçirilə bilər.


Type
Class_type |
Class_type_expanded |
Class_type_separate |
Anchored | Bit_type

Qeyd : Standart Eiffel sintaksisi həmçinin Formal_generic_name Növ üçün mümkün alternativ kimi. Lakin o, sintaksisdə qeyri-müəyyənlik yaratdı, çünki identifikator həm Formal_generic_name , həm dəfaktiki generikləri olmayan Class_type kimi tanınır.

Class_type
Class_name [ Actual_generics ]
Actual_generics
[ Type_list ]
Type_list
{ Type , ... }

Qeyd : Növlərin siyahısı boş ola bilər. Nəticədə, FOO [] etibarlıdır və FOO ilə eyni deməkdir . Ancaq bu tövsiyə olunan üslub deyil.

Class_type_expanded
expanded Class_type
Class_type_separate
separate Class_type

Qeyd : Class_type_separate Eiffel standartının bir hissəsi deyil. SCOOP mexanizmini dəstəkləmək üçün ISE Eiffel-də təqdim edilmişdir. Ətraflı məlumat üçün Obyekt yönümlü proqram təminatının qurulması , ikinci nəşrioxuyun

Bit_type
BIT Bit_length

Qeyd : Standart sintaksisdə Bit_length əvəzinə Constant görünür .VTBTetibarlılıq qaydası bildirir ki, Bit_type bəyannaməsi yalnız və yalnız onun Sabiti INTEGER tipli olduqdaetibarlıdır, bu o deməkdir ki, sabit ya manifest tam ədəd sabiti, ya da atribut sabitidir.

Bit_length
Integer_constant | Attribute
Anchored
like Anchor
Anchor
Identifier | Current

Compound
{ Instruction ; ... }
Instruction
Creation | Call | Assignment |
Assignment_attempt | Conditional |
Multi_branch | Loop | Debug |
Check | Retry | Null_instruction
Creation
! [ Type ] ! Writable [ Creation_call ]

Qeyd : Növ yoxdursa, iki nida işarəsi fasilə ilə və ya fasiləsiz yazıla bilər. Stil standartında tövsiyə olunan forma fasiləsiz formadır ki, bu da !! vahid leksik simvol kimi görünür.

Creation_call
. Procedure_name [ Actuals ]

Qeyd : Standart Eiffel sintaksisində Yaradılma_zəngi Qeyri-İxtisaslı_zəngdən hazırlanır.VGCC-6etibarlılıq qaydasıbildirir ki, əgər f Yaradılma_zənginin xüsusiyyətidirsə, f prosedurdur.


Assignment
Writable := Expression
Assignment_attempt
Writable ?= Expression
Conditional
if Then_part_list [ Else_part ] end
Then_part_list
{ Then_part elseif ... }+
Then_part
Boolean_expression then Compound
Else_part
else Compound
Multi_branch
inspect Expression
[ When_part_list ] [ Else_part ] end
When_part_list
when { When_part when ... }+
When_part
Choices then Compound
Choices
{ Choice , ... }

Qeyd : Seçimlər siyahısı boş ola bilər. Nəticə kimi,

sonra
     bir şey etdikdə ifadəni
 yoxlayın
...

mənasız olsa da, sintaktik cəhətdən düzgündür. kimi düşünmək olar

Əgər Yalan varsa
    nəsə et
...

Ancaq bu tövsiyə olunan üslubun bir hissəsi deyil.

Choice
Choice_constant | Interval

Qeyd : Standart sintaksis Choice_constant əvəzinəSabiti. Bununla belə , VOMB-1-2etibarlılıq qaydasıbildirir ki, Seçim İntervaldakı Sabit yalnız INTEGER və ya CHARACTER tiplidir.

Interval
Choice_constant .. Choice_constant

Qeyd : Aşağıdakı misalda leksik analizator kifayət qədər ağıllı olmalıdır:

1..2 olduqda ifadəni
 yoxlayın , sonra 
...

Həqiqətən də, ' 1..2 ' ardıcıl iki real sabit ' 1. ' və ' .2 ' əvəzinə Eiffel simvolu ' .. ' ilə ayrılmış iki tam ədəd ' 1 ' və ' 2 ' sabitləri kimi tanınmalıdır . Vizual Eiffel yuxarıdakı nümunəni təhlil edərkən səhvən sintaksis xətası verir.

Choice_constant
Integer_constant | Character_constant | Attribute

Qeyd : TowerEiffel Seçim və Intervalda "uzaqdan sabit" qəbul edir, məsələn:

foo : FOO foo olduqda i
 
yoxlayır . const sonra bir şey bitir  
     

burada const FOO sinfində sabit elan edilir . Bu standart Eiffel sintaksisi deyil.


Loop
Initialization
[ Invariant ]
[ Variant ]
Loop_body
end
Initialization
from Compound
Variant
variant [ Tag_mark ] Expression

Qeyd : VAVE etibarlılıq qaydasıifadə edir ki, İfadə INTEGER tipli olmalıdır. Bu, Bərabərlik , Manifest_array , Strip və bütün tam olmayan Manifest_constant s-ni ləğv etməklə nəhayət sintaksisdə qismən tətbiq edilə bilər.

Loop_body
Exit loop Compound
Exit
until Boolean_expression
Debug
debug [ Debug_keys ] Compound end
Debug_keys
( Debug_key_list )
Debug_key_list
{ Debug_key , ... }
Debug_key
Manifest_string
Check
check Assertion end

Retry
retry

Qeyd : Etibarlılıq qaydasıVXRTbildirir ki, Yenidən cəhd təlimatı yalnız Xilasetmə bəndində etibarlıdır. Bu, nəhayət, sintaksis tərəfindən həyata keçirilə bilər.


Null_instruction
empty

Qeyd : Bu təlimatın sırf sintaktik rolu var: Mürəkkəyə nəzarət yolu ilə əlavə edilmiş əlavə nöqtəli vergüllərin zərərsiz olduğundan əmin olmaq.

əgər  c  onda ; i1 ;;; i2 ; başqa ;; son

TowerEiffel terminatorlardan başqa əlavə nöqtəli vergülləri dəstəkləmir. Bütün digər kompilyatorlar gözlənildiyi kimi işləyir. SmallEiffel əlavə nöqtəli vergülləri təhlil edərkən xəbərdarlıq verir.


Call
Qualified_call | Precursor
Qualified_call
[ Call_qualifier ] Call_chain
Call_qualifier
Call_target .
Call_target
Parenthesized | Result | Current | Precursor
Call_chain
{ Unqualified_call . ... }+
Unqualified_call
Identifier [ Actuals ]

Qeyd : Zəngin bu spesifikasiyasıstandartda verilmiş versiyadan bir qədər fərqlidir. Bununla belə, standart sintaksis düzgün Eiffel olmayan konstruksiyaları qəbul edir, məsələn:

foo . Nəticə 
cari ( 5 )

halbuki yuxarıda verilmiş spesifikasiya yoxdur.

Qeyd : TowerEiffel-də funksiyalar sabitin ətrafında mötərizə qoymadan birbaşa Manifest_constant -da çağırıla bilər, məsələn:

küç := 'a' . həyata

standart sintaksisdən istifadə edərək olmalıdır:

küç := ( 'a' ). həyata

Baxmayaraq ki, Integer_constant ilə kiçik bir leksik problem var

123.out

kimi tanınır

123.  çıxdı

'123.' Real_sabit olmaq . Proqramçı bu problemi həll etmək üçün tam ədəd sabiti ilə nöqtə arasında əlavə fasilə əlavə etməlidir .


Precursor
[ Parent_qualification ] Precursor [ Actuals ]
Parent_qualification
{ Class_name }

Qeyd : Prekursorkonstruksiyası standart Eiffel sintaksisinin bir hissəsi deyil . O , Obyekt yönümlü Proqram Təminatında , ikinci nəşrdə təqdim edilmişdirNICE-ə təqdim edilmişdir. ISE Eiffel və Halstenbach çox güman ki, növbəti buraxılışlarında bu quruluşu dəstəkləyəcəklər.

Qeyd : Obyekt yönümlü proqram təminatının konstruksiyasında , ikinci nəşrdə, Parent_qualification -da sinif adı qoşa mötərizələr arasında bağlanmışdır: {{ Class_name }} .NICE-ə təqdim edilən təklif yuxarıda göstərilən sintaksisdən istifadə edir.


Attribute
Identifier

Qeyd : VFFD-5 etibarlılıq qaydasına əsasənAtribut həm də Prefiks ola bilər.

Writable
Identifier | Result

Qeyd : Standart sintaksis spesifikasiyasından Müəssisə sintaksisqrupu bir çox qeyri-müəyyənliyi həll etmək üçün çox sadələşdirilmişdir. Məsələn, olmalıdır:

foo

Atribut , Yerli və ya Formal kimi tanınmalıdır ? Yalnız semantik təhlil cavab verə bilər.


Actuals
( Actual_list )
Actual_list
{ Actual , ... }

Qeyd : Faktiki olanların siyahısı boş ola bilər. Nəticədə, foo () etibarlıdır və foo ilə eyni deməkdir . Ancaq bu üslub tövsiyə edilmir.

Actual
Expression | Address

Qeyd : TowerEiffel Ünvanı normal ifadə kimi qəbul edir (yəni İfadə konstruksiyasında alternativ kimi). Nəticədə ünvanın yalnız faktiki siyahılarda olması lazım deyil.

Address
$ Address_mark
Address_mark
Feature_name | Current | Result

Expression
Current | Result |
Call | Operator_expression |
Equality | Manifest_array |
Old | Strip | Boolean_constant |
Bit_constant | Integer | Real |
Manifest_string | Character_constant |
Wide_character_constant |
Wide_manifest_string |
Hexadecimal_constant

Qeyd : İfadənin bu spesifikasiyasıstandartda təqdim olunan versiyadan bir qədər fərqlidir. Birincisi, Zəng üçün yeni spesifikasiyanın nəticəsi olaraq Cari və Nəticə əlavə edildi . Sonra, Manifest_constant alternativlərinin siyahısı ilə əvəz edilmişdir. Bu standart sintaksisdəki qeyri-müəyyənliyi aradan qaldırmaq üçündür. Aşağıdakı kod parçasında:

foo := - 2

tapşırığın sağ tərəfindəki İfadə Tam_sabit və ya Prefiks_operatoru - ' və İfadəsi (imzasız) Tam ədəd olan Birlik_ifadəsi kimi tanınmalıdırmı ? Integer_constant və Real_constant'ı Tam və Real ilə əvəz etmək problemi həll edir.

Qeyd : Wide_character_constant , Wide_manifest_string və Hexadecimal_constant standartın bir hissəsi deyil. Onlar TowerEiffel-də geniş simvolları və sətirləri və onaltılıq tam ədədləri dəstəkləmək üçün təqdim edilmişdir.

Boolean_expression
Expression

Qeyd : Etibarlılıq qaydasıVWBE bildirir ki, mantiq ifadəsi BOOLEAN tipində olmalıdır. Bu, nəhayət, Manifest_array , Strip və bütün qeyri-boole Manifest_constant s-ni ləğv etməklə sintaksisdə qismən tətbiq edilə bilər.


Operator_expression
Parenthesized | Unary_expression | Binary_expression
Parenthesized
( Expression )
Unary_expression
Prefix_operator Expression
Binary_expression
Expression Infix_operator Expression

Qeyd : Operatorun üstünlüyü və assosiativliyi üçün Operatora baxın

Equality
Expression Comparison Expression
Comparison
= | /=
Qeyd : Operatorun üstünlüyü və assosiativliyi üçün Operatora baxın

Manifest_constant
Boolean_constant | Character_constant |
Integer_constant | Real_constant |
Manifest_string | Bit_constant |
Wide_character_constant |
Wide_manifest_string |
Hexadecimal_constant

Qeyd : Wide_character_constant , Wide_manifest_string və Hexadecimal_constant standartın bir hissəsi deyil. Onlar TowerEiffel-də geniş simvolları və sətirləri və onaltılıq tam ədədləri dəstəkləmək üçün təqdim edilmişdir.

Boolean_constant
True | False
Integer_constant
[ Sign ] Integer

Qeyd : Burada standart sintaksisdə qeyri-müəyyənlik var. Aşağıdakı kod parçasında:

foo := - 2

tapşırığın sağ tərəfindəki İfadə Tam_sabit və ya Prefiks_operatoru - ' və İfadəsi (imzasız) Tam ədəd olan Birlik_ifadəsi kimi tanınmalıdırmı ? Bu, İfadə üçün spesifikasiyanın yenidən yazılması ilə cari sintaksis təsvirində həll edilmişdir .

Real_constant
[ Sign ] Real
Qeyd : Yuxarıdakı Integer_constant ilə eyni qeyri-müəyyənlik.
Sign
+ | -
Wide_character_constant
Character_constant

Qeyd : Wide_character_constant standartın bir hissəsi deyil. Geniş simvolları dəstəkləmək üçün TowerEiffel-də təqdim edilmişdir.

Qeyd : Dollar işarəsi ilə Character_constant arasında heç bir müdaxilə simvoluna icazə verilmir .

Wide_manifest_string
$ Manifest_string

Qeyd : Wide_manifest_string standartın bir hissəsi deyil. Sətirlərdə geniş xarakterləri dəstəkləmək üçün TowerEiffel-də təqdim edilmişdir.

Qeyd : Dollar işarəsi ilə Manifest_sətri arasında heç bir müdaxilə simvoluna icazə verilmir .


Manifest_array
<< Expression_list >>
Expression_list
{ Expression , ... }

Old
old Expression
Qeyd : Etibarlılıq qaydasıVAOL-1Köhnəifadənin yalnız Postşərtdə etibarlı olduğunu bildirir. Bu, nəhayət, sintaksis tərəfindən həyata keçirilə bilər.

Strip
Strip ( Attribute_list )
Attribute_list
{ Attribute , ... }

İdentifikator
İdentifikator bir və ya bir neçə simvol ardıcıllığıdır, bunlardan birincisi hərfdir ( a -dan z-ə və A -dan Z - yə) və sonrakıların hər biri, əgər varsa, hərf, onluq rəqəmdir ( 0 -dan 9-a qədər ) və ya alt xətt simvolu ( _ ).
Hərf hərfləri üçün əhəmiyyətli deyil: iki identifikator lInKeD_liST və LINKED_LIST eyni hesab olunur.

Qeyd : Təəssüf ki, SmallEiffel hərflərə həssasdır. (Təəccüblüdür ki, Reserved_word s üçün hərflərə həssas deyil.)

Qeyd : İdentifikator yalnız və yalnız Reserved_word s -dən biri olmadığı təqdirdə etibarlıdır.

Qeyd : TowerEiffel funksiya adlarında və sinif adlarında bitişik alt xətt işarələrini idarə edə bilməz.


Tam
Tam ədəd simvollar ardıcıllığıdır və hər biri aşağıdakılardan biri olmalıdır:
  1. onluq rəqəm ( 0 -dan 9-a qədər )
  2. alt xətt ( _ ), ilk simvol olmaya bilər.
Əgər hər hansı alt xətt varsa, onda hər alt xəttdən sağda üç rəqəm olmalıdır və dörd rəqəmdən ibarət ardıcıl qrup olmamalıdır.

Qeyd : Alt xətt ilə bağlı son iki məhdudiyyət gələcəkdə istənilən sayda rəqəm qruplarına icazə verməklə silinə bilər.

Qeyd : Integer_constant- dan fərqli olaraq, Tam ədədin işarəsi yoxdur.

Qeyd : Minimum tam dəyər problemindən xəbərdar olun! Məsələn, tam ədədlərin 32 bitdə saxlandığı platformalarda aşağıdakı Eiffel kodu etibarlıdır:

Minimum_integer : INTEGER  - 2_147_483_648 -- INTEGER 
        tipli ən kiçik dəstəklənən dəyər

lakin təhlilçi kifayət qədər ağıllı olmalıdır, əks halda o, 32 bitə sığmayan 2147483648 tam ədədinin ardınca birinar minus oxuyacaq və buna görə də daşmağa səbəb olacaq.


Hexadecimal_sabit
Onaltılıq sabit iki və ya daha çox simvol ardıcıllığıdır , onun ilk simvolu onluq rəqəmdir ( 0- dan 9-a qədər ), sonrakı simvolları, lakin sonuncusu onluq rəqəmlər və ya a -dan f və ya A -dan F -ə qədər olan hərflərdir və ardınca x və ya X gəlir. , başqa heç bir müdaxilə simvol olmadan.

Qeyd : Hexadecimal_constant standartın bir hissəsi deyil. Hexadecimal tam ədədləri dəstəkləmək üçün TowerEiffel-də təqdim edilmişdir.

Qeyd : Hexadecimal sabitlərdə alt xəttlərə icazə verilib-verilmədiyi aydın deyil.


Real
Həqiqi ədəd aşağıdakı elementlərdən ibarətdir:
  1. inteqral hissəni verən isteğe bağlı Tam ədəd (Bu yoxdursa, inteqral hissə 0-dır.)
  2. tələb olunan nöqtə ( . )
  3. kəsr hissəsini verən geriyə yazılmış isteğe bağlı Tam ədəd (əgər bu yoxdursa, kəsr hissəsi 0-dır).
  4. e və ya E hərfi, ardınca əlavə İşarə ( + və ya - ) və Tam Ədəd olan isteğe bağlı göstərici . e və ya E varsa, tam ədəd tələb olunur . Bu onu göstərir ki, e və ya E- dən əvvəl görünən dəyər 10^n ilə ölçülməlidir, burada n verilmiş tam ədəddir.
Bu elementlər arasında heç bir müdaxilə xarakterinə (boş və ya başqa) icazə verilmir. İnteqral və kəsr hissələrinin hər ikisi olmaya bilər. İnteqral və ya kəsr hissədə alt xətt istifadə olunursa, üç rəqəm və ya daha az olmadıqda, digər hissədə də görünməlidir.

Qeyd : Tövsiyə olunan üslub e deyil, E istifadə etməkdir .

Qeyd : Real_constant- dan fərqli olaraq Realda heç bir işarə yoxdur.

Qeyd : İnteqral və kəsr hissələrin hər ikisinin olmaya biləcəyini bildirən məhdudiyyət leksik cəhətdən vacibdir. Əks halda aşağıdakı kod parçası

a.e1

kimi skan edilə bilər

a   .e1

əvəzinə

a   .   e1

'.e1' real olaraq tanınır.


Xarakter_sabit
Xarakter sabiti ya:
  1. faiz ( % ) və tək dırnaq ( ' ) istisna olmaqla çap edilə bilən simvol
  2. Xüsusi_xarakter
tək dırnaqlar ( ' ) içərisindədir .

Qeyd : Çap edilə bilən simvollara, bu halda, boşluqlar və nişan simvolları daxildir, lakin yeni sətirlər deyil. Bunu Free_operator ilə müqayisə edin.


manifest_sətri
Manifest sətir aşağıdakıların ixtiyari ardıcıllığıdır:
  1. faiz ( % ) və qoşa dırnaq ( " ) istisna olmaqla çap edilə bilən simvollar
  2. Xüsusi_xarakter s
qoşa dırnaq içərisində ( " ).
Genişləndirilmiş forma iki və ya daha çox sətirdə manifest sətri yazmağa imkan verir. Sonuncudan başqa hər sətir faizlə ( % ) bitməlidir və birincidən başqa hər sətir faizlə ( % ) başlamalıdır, ehtimal ki, əvvəllər boşluqlar ( ) və nişan simvolları olmalıdır.

Qeyd : Çap edilə bilən simvollara, bu halda, boşluqlar və nişan simvolları daxildir, lakin yeni sətirlər deyil. Bunu Free_operator ilə müqayisə edin.


Bit_sabit
Bit sabiti 0 və ya 1 rəqəmlərinin ardıcıllığıdır , ardınca b və ya B , heç bir müdaxilə simvolu yoxdur.

Qeyd : Tövsiyə olunan üslub b deyil, B istifadə etməkdir .


Pulsuz_operator
Pulsuz operator ilk simvolu @ # | hər hansı biri olan bir və ya bir neçə simvol ardıcıllığıdır & və onların sonrakı simvolları, əgər varsa, çap edilə bilən hər hansı simvol ola bilər. Sərbəst operatorlardakı hərflər üçün hərf böyük əhəmiyyət kəsb etmir.

Qeyd : Çap edilə bilən simvollara Break s -də icazə verilən simvollar daxil deyil. Bunu Character_constant ilə müqayisə edin.

Qeyd : Aşağıdakı kod

a@1

kimi skan edilir

a   @1

sintaktik cəhətdən düzgün olmayan. Ətraflı məlumat üçün Eiffel gotchas-a baxın .

Qeyd : Eiffel: Dil , ikinci çap,pulsuz operatorlarda Xüsusi_xarakterlərə (çap olunsa da) imkan verir. Heç bir Eiffel tərtibçisi bunu dəstəkləmir.

Qeyd : SmallEiffel və Visual Eiffel pulsuz operatorlar üçün hərflərə həssasdır.


Şərh
Şərh iki tire simvolu ( -- ) ilə başlayır və sətrin sonuna qədər uzanır.
Genişləndirilmiş forma iki və ya daha çox sətirdə şərh yazmağa imkan verir. Birincidən başqa hər sətir iki tire simvolu ilə başlamalıdır, ola bilsin ki, əvvəllər boşluqlar və tab simvolları olmalıdır.
Başlıq_şərh
Şərh
Fasilə
Fasilə aşağıdakı simvollardan bir və ya bir neçəsinin ardıcıllığından ibarətdir:
  1. boş
  2. nişanı
  3. yeni xətt
Semantikaya təsir etmədən iki bitişik element arasında fasilə qoyula bilər.

Qeyd : Windows kimi bəzi platformalar yeni sətirdən əvvəl daşıma qaytarma simvolu qoyur. Belə hallarda vaqonun qaytarılmasını fasilə təşkil edən dördüncü mümkün simvol kimi nəzərdən keçirmək daha asandır.


Xüsusi_xarakter
Xüsusi simvol aşağıdakı formalardan birinə malikdir:
  1. %/code/ ardıcıllığı, burada kod ASCII kod kodunun onluq dəyərdə simvolunu təmsil edən işarəsiz tam ədəddir
  2. %K ardıcıllığı aşağıdakı xüsusi simvolları təmsil etmək üçün istifadə olunur:
     
    Xarakter Kod Mnemonik ad
    @ %A T işarəsi
    BS %B B boşluq
    ^ %C C ircumflex
    $ %D D olur
    FF %F F orm yemi
    \ %H backslas H
    ~ %L ti L da
    NL (LF) %N N ewline
    ` %Q geri Sitat
    CR %R vaqon R dön
    # %S S arfa
    HT %T üfüqi T ab
    NUL %U Ull xarakter
    | %V V şaquli bar
    % %% faiz
    ' %' tək sitat
    " %" ikiqat sitat
    [ %( açılış mötərizəsi
    ] %) bağlama mötərizəsi
    { %< açılış braketi
    } %> bağlama mötərizəsi

Qeyd : Əksər Eiffel kompilyatorları yuxarıdakı cədvəldə %K ardıcıllığı göstərilmədikdə sintaksis xətası verirBununla belə, Visual Eiffel hesab edir ki, %K ardıcıllığı yuxarıdakı cədvəldə göstərilmədikdə K simvolunu təmsil edirNəticədə %P P simvolunu, %D isə $ simvolunu ifadə edir.

Qeyd : Test etdiyim bütün Eiffel tərtibçiləri (yəni, ISE Eiffel, Halstenbach, SmallEiffel, Visual Eiffel, TowerEiffel) yuxarıdakı cədvəldən xüsusi simvol kimi tanınması üçün %K hərfində K hərfinin böyük hərf olmasını gözləyirlər. Nəticədə %d və %D eyni hesab edilmir.

Qeyd : Kod tam ədədində alt tirelərə icazə verilib-verilmədiyi mənə aydın deyil(xüsusilə bu, geniş xarakterli kod olduqda).


Ehtiyatlı_söz
Qorunan söz ya:
  1. konstruksiyaların variant komponentlərini təqdim etməyə və məhdudlaşdırmağa xidmət edən açar söz. Eiffel açar sözləri bunlardır: ləqəb , hamısı ,  , kimi , yoxlamaq , sinif , yaradılış , debug , təxirə salınmış , etmək , else , elseif , son , təmin etmək , genişləndirilmiş , ixrac , xarici , xüsusiyyət , dan , dondurulmuş , əgər , nəzərdə tutur , indeksləşdirmə , infix , miras , inspect , invariant , is , like , local , loop , not , köhnəlmiş , köhnə , bir dəfə , və ya , prefiks , yenidən təyin etmək , adını dəyişmək , tələb etmək , xilas etmək , yenidən cəhd etmək , seçmək , ayırmaq , sonra , müəyyən etməmək , qədər , variant , nə vaxt , xor .
  2. dəyişən işarələrin də icazə veriləcəyi mövqelərdə gələn əvvəlcədən təyin edilmiş ad. Eiffel tərəfindən əvvəlcədən təyin edilmiş adlar bunlardır: BIT , Current , False , Precursor , Result , Strip , True , Unique .
Hərf halı qorunan sözlər üçün əhəmiyyət kəsb etmir: Nəticə və rEsUlT iki sözü eyni hesab olunur.

Qeyd : Rəsmi sintaksis spesifikasiyası qorunan sözlər kimi aşağıdakı sinif adlarını sadalayır: BOOLEAN , CHARACTER , DOUBLE , INTEGER , NONE , POINTER , REAL , STRING . Mən başa düşürəm ki, bu siniflər Eiffel tərtibçiləri tərəfindən tanınmalıdır, lakin onların nə üçün ehtiyat sözlər olması lazım olduğunu anlamıram. Nəzərə alın kiNüvə Kitabxana Standartından HƏR , ÜMUMİ , PLATFORM və bir çox başqa sinif adları da siyahıda yoxdur! Üstəlik, bu sinif adları sintaksis konstruksiyalarının heç bir yerində görünmür. Nəhayət, yalnız Visual Eiffel bu sinif adlarını qorunan sözlər hesab edir.

Qeyd : Eiffeldə : Dil , ikinci çap, False , Strip , True və Unique açar sözlər hesab olunur. Mən bu fikri bölüşmürəm.

Qeyd : SmallEiffel İdentifikatorla bağlı hərf hərfinə həssas olsa da, hərf hərfinin ayrılmış sözlər üçün əhəmiyyətli olmadığını hesab edir!

Qeyd : Prekursor standart sintaksisin bir hissəsi deyil. Prekursor mexanizmini dəstəkləmək üçün təqdim edilmişdir.


Operator
Aşağıdakı cədvəldəki operatorlar ən yüksək üstünlük qrupundan başlayaraq üstünlük səviyyəsinə görə qruplaşdırılıb. Hər qrupdakı operatorlar eyni üstünlüyə malikdirlər. Eyni üstünlük səviyyəsinə malik ikili operatorların iki və ya daha çox ardıcıl təkrarlanması üçün assosiativlik sütunu qiymətləndirmə sırasını müəyyən edir.
Simvol assosiativlik
. sol
old
not
unary +
unary -
Bütün pulsuz unar operatorlar
Bütün pulsuz ikili operatorlar
^ sağ
*
/
//
\\
sol
sol
sol
sol
ikili +
ikili -
sol
sola
=
/=
<
>
<=
>=
sol sol
sol
sol
sol
sol
sol
və sonra sol
sola
və ya başqa xor
 
sol
sol
sol
nəzərdə tutur sol

Qeyd : Eiffel tərtibatçılarının aşağıdakı kod parçasını rədd etmələrinin səbəbi:

foo := 1 < 2 < 3

ona görə deyil ki, müqayisə operatorları assosiativ deyil. Bu operatorlar həqiqətən assosiativ olaraq qalırlar. Yuxarıdakı kod sintaktik cəhətdən düzgündür, lakin sadəcə rədd edilir, çünki ' 1 < 2 ' BOOLEAN tiplidir və heç bir xüsusiyyət yoxdur:

infiks "<" ( i : INTEGER ): SOME_TYPE

BOOLEAN sinfində .


Nöqtəli vergül
Nöqtəli vergüllər Index_list və ya Compound kimi siyahılarda ayırıcı kimi istifadə olunur . Əksər yerlərdə nöqtəli vergül isteğe bağlıdır. Bununla belə, onlar bəzi hallarda Təsdiq və Mürəkkəblikdə qeyri-müəyyənlikləri aradan qaldırmaq üçün tələb olunur . Qeyri-müəyyənlik aşağıdakı kod parçasında görünür:
foo ( ifadə ). bar
burada bu, " arqument ifadəsi ilə foo funksiyasının nəticəsinə tətbiq olunan bar " və ya " foo -ya zəng və ifadəyə tətbiq olunan bar " kimi tanınmaq olar . Bu qeyri-müəyyənliyi həll etmək üçün qayda ' foo ' və ' expr ) arasında nöqtəli vergül qoymaqdır bar ' ikinci şərhi almaq və ya birincisini almaq üçün olduğu kimi buraxmaq.

Qeyd : Bəzi konstruksiyalar üçün bəzi Eiffel tərtibçiləri nöqtəli vergülləri terminator kimi qəbul edəcək, onları məcburi hesab edəcək və ya çatışmazlıq olduqda sadəcə xəbərdarlıq edəcək.

Qeyd : Bu Şərhin rəsmi təsviri deyil.şərhdə faiz simvoluna ( % ) niyə açıq formada icazə verilmədiyini (yəni Xüsusi_xarakterin bir hissəsi deyil ) görə bilmədim

Qeyd : Şərhlərin iki növü var: pulsuz şərhlər və gözlənilən şərhlər. Pulsuz şərhlər bəzi alətlər tərəfindən ləğv edilə bilər. Bununla belə, gözlənilən şərhlər dörd konstruktun bir hissəsi kimi görünür: Rutin , Təsdiq_bəndi , Yaradılma_bəndi və Xüsusiyyət_bəndi və qısa köməkçi proqram kimi alətlər tərəfindən işlənməlidir. Baxmayaraq ki, Routine , Creation_clause və Feature_clause , başlıq şərhi isteğe bağlıdır və çox zərər vermədən nəzərə alınmasa da, Assertion_clause- da bu məcburidirvə ona məhəl qoymamaq sintaksis xətası olardı. Bu gözlənilən şərhləri həyata keçirmək üçün həll yolu leksik bağlardan istifadə etmək ola bilər.

Qeyd : TowerEiffel Features konstruksiyasında xüsusiyyət açar sözü ilə isteğe bağlı Müştərilər arasında şərh görünəndə səhvən sintaksis xətası verir. Bu, yəqin ki, yuxarıda təklif olunan leksik birləşmələrin istifadəsinin ikinci dərəcəli təsiridir.

Qeyd : Aşağıdakı Rutin bəyannamədə:

foodur 
        -- Bu ilk şərhdir.

        -- Bu ikinci şərhdir.

        -- Bu üçüncü şərhdir.
    et
        ...
    son

üç şərhdən hansının gözlənilən Header_comment və digər iki pulsuz şərhin hansı olduğu aydın deyil . TowerEiffel başlıq şərhi olmaq üçün ilk şərhi seçdi. ISE Eiffel, Halstenbach və Visual Eiffel kimi bəzi digər tərtibçilər əslində üç şərhi başlıq şərhinə çevrilən birinə birləşdirirlər.

Qeyd : Bəzi Eiffel tərtibçiləri ' -- |'başlıq şərhlərində sadəcə ' -- ' əvəzinə