Dilbilgisi (Language Grammar)

parser grammar SolidityParser

Solidity, Ethereum platformunda akıllı sözleşmelerin uygulanması için statik olarak yazılan, sözleşme odaklı, yüksek seviyeli bir programlama dilidir.

rule source-unit

Solidity en üst seviyede pragmalara, import direktiflerine ve sözleşmelerin, arayüzlerin, kütüphanelerin, structların, enumların ve constantların tanımlanmasına izin verir.

pragmapragma-token;import-directiveusing-directivecontract-definitioninterface-definitionlibrary-definitionfunction-definitionconstant-variable-declarationstruct-definitionenum-definitionuser-defined-value-type-definitionerror-definitioneof

rule import-directive

İçe aktarma direktifleri farklı dosyalardan tanımlayıcıları içe aktarır.

importpathasidentifiersymbol-aliasesfrompath*asidentifierfrompath;

rule path

İçeri aktarılacak dosyanın yolu.

non-empty-string-literal

rule symbol-aliases

İçe aktarılacak semboller için takma adların listesi.

{identifierasidentifier,}

rule contract-definition

Bir sözleşmenin en üst düzey tanımı.

abstractcontractidentifierisinheritance-specifier,{contract-body-element}

rule interface-definition

Bir arayüzün en üst düzey tanımı.

interfaceidentifierisinheritance-specifier,{contract-body-element}

rule library-definition

Bir kütüphanenin en üst düzey tanımı.

libraryidentifier{contract-body-element}

rule inheritance-specifier

Sözleşmeler ve arayüzler için kalıtım belirleyicisi. İsteğe bağlı olarak temel constructor argümanları sağlayabilir.

identifier-pathcall-argument-list

rule contract-body-element

Sözleşmelerde, arayüzlerde ve kütüphanelerde kullanılabilen tanımlamalar.

Arayüzlerin ve kütüphanelerin constructor, arayüzlerin durum değişkenleri ve kütüphanelerin fallback, receive fonksiyonları veya sabit olmayan durum değişkenleri içermeyebileceğini unutmayın.

constructor-definitionfunction-definitionmodifier-definitionfallback-function-definitionreceive-function-definitionstruct-definitionenum-definitionuser-defined-value-type-definitionstate-variable-declarationevent-definitionerror-definitionusing-directive

rule call-argument-list

Bir fonksiyonu veya benzer bir çağrılabilir nesneyi çağırırken mevcut olan argümanlar. Bağımsız değişkenler ya virgülle ayrılmış liste olarak ya da adlandırılmış bağımsız değişkenlerin haritası olarak verilir.

(expression,{identifier:expression,})

rule identifier-path

Nitelikli isim.

identifier.

rule modifier-invocation

Bir modifier’a çağrı yapın. Modifier hiçbir argüman almazsa, argüman listesi tamamen atlanabilir (açılış ve kapanış parantezleri dahil).

identifier-pathcall-argument-list

rule visibility

Fonksiyonlar ve fonksiyon türleri için görünürlük.

internalexternalprivatepublic

rule parameter-list

Fonksiyon argümanları veya dönüş değerleri gibi parametrelerin bir listesi.

type-namedata-locationidentifier,

rule constructor-definition

Constructor’ın tanımı: Her zaman bir uygulama sağlamalıdır. Internal veya Public görünürlük belirtmenin kullanımdan kaldırıldığını unutmayın.

constructor(parameter-list)modifier-invocationpayableinternalpublicblock

rule state-mutability

Fonksiyon tipleri için durum değiştirilebilirliği. Herhangi bir değişebilirlik belirtilmezse varsayılan değişebilirlik ‘non-payable’ olarak kabul edilir.

pureviewpayable

rule override-specifier

Fonksiyonlar, modifier’lar veya durum değişkenleri için kullanılan bir geçersiz kılma belirteci. Geçersiz kılınan birden fazla temel sözleşmede belirsiz tanımlamalar olduğu durumlarda, temel sözleşmelerin tam bir listesi verilmelidir.

override(identifier-path,)

rule function-definition

Sözleşme, kütüphane ve arayüz fonksiyonlarının tanımı. Fonksiyonun tanımlandığı bağlama bağlı olarak, başka kısıtlamalar da uygulanabilir; örneğin, arayüzlerdeki fonksiyonlar uygulanmamış olmalıdır, yani bir gövde bloğu içermemelidir.

functionidentifierfallbackreceive(parameter-list)visibilitystate-mutabilitymodifier-invocationvirtualoverride-specifierreturns(parameter-list);block

rule modifier-definition

Bir modifier’ın tanımı. Bir modifier’ın gövde bloğu içinde, alt çizginin tanımlayıcı olarak kullanılamayacağını, ancak modifier’ın uygulandığı bir fonksiyonun gövdesi için yer tutucu ifade olarak kullanıldığını unutmayın.

modifieridentifier(parameter-list)virtualoverride-specifier;block

rule fallback-function-definition

Özel fallback fonksiyonunun tanımı.

fallback(parameter-list)externalstate-mutabilitymodifier-invocationvirtualoverride-specifierreturns(parameter-list);block

rule receive-function-definition

Özel receive fonksiyonunun tanımı.

receive()externalpayablemodifier-invocationvirtualoverride-specifier;block

rule struct-definition

Bir struct’ın tanımı. Bir kaynak birimin içinde üst seviyede veya bir sözleşme, kütüphane veya arayüz içinde oluşabilir.

structidentifier{struct-member}

rule struct-member

Adlandırılmış bir struct üyesinin tanımı.

type-nameidentifier;

rule enum-definition

Bir enum tanımı. Bir kaynak birim içinde üst seviyede veya bir sözleşme, kütüphane veya arayüz içinde oluşabilir.

enumidentifier{identifier,}

rule user-defined-value-type-definition

Kullanıcı tanımlı bir değer türünün tanımı. Bir kaynak birim içinde üst seviyede veya bir sözleşme, kütüphane veya arayüz içinde oluşabilir.

typeidentifieriselementary-type-name;

rule state-variable-declaration

Bir durum değişkeninin tanımı.

type-namepublicprivateinternalconstantoverride-specifierimmutableidentifier=expression;

rule constant-variable-declaration

Sabit bir değişkenin tanımı.

type-nameconstantidentifier=expression;

rule event-parameter

Bir eventin parametresi.

type-nameindexedidentifier

rule event-definition

Bir event tanımı. Sözleşmelerde, kütüphanelerde veya arayüzlerde meydana gelebilir.

eventidentifier(event-parameter,)anonymous;

rule error-parameter

Error parametresi.

type-nameidentifier

rule error-definition

Bir error tanımı.

erroridentifier(error-parameter,);

rule using-directive

Kütüphane işlevlerini ve serbest işlevleri türlere bağlamak için yönerge kullanma. Sözleşmeler ve kütüphaneler içinde ve dosya düzeyinde meydana gelebilir.

usingidentifier-path{identifier-path,}for*type-nameglobal;

rule type-name

Bir türün adı, temel tür, fonksiyon türü, mapping türü, kullanıcı tanımlı tür olabilir. (örneğin bir sözleşme veya struct) veya bir dizi türü.

elementary-type-namefunction-type-namemapping-typeidentifier-pathtype-name[expression]

rule elementary-type-name

addressaddresspayableboolstringbytessigned-integer-typeunsigned-integer-typefixed-bytesfixedufixed

rule function-type-name

function(parameter-list)visibilitystate-mutabilityreturns(parameter-list)

rule variable-declaration

Tek bir değişkenin tanımı.

type-namedata-locationidentifier

rule data-location

memorystoragecalldata

rule expression

Karmaşık bir ifade. Bir dizin erişimi, bir dizin aralığı erişimi, bir üye erişimi, bir fonksiyon çağrısı (isteğe bağlı fonksiyon çağrısı seçenekleriyle), bir tür dönüştürme, bir tekli veya ikili ifade, bir karşılaştırma veya atama, bir üçlü ifade, bir yeni ifade (yani bir sözleşme oluşturma veya bir dinamik bellek dizisinin tahsisi), bir tuple, bir inline dizi veya bir birincil ifade (yani bir tanımlayıcı, literal veya tür adı) olabilir.

expression[expression]expression[expression:expression]expression.identifieraddressexpression{identifier:expression,}expressioncall-argument-listpayablecall-argument-listtype(type-name)++--!~delete-expressionexpression++--expression**expressionexpression*/%expressionexpression+-expressionexpression<<>>>>>expressionexpression&expressionexpression^expressionexpression|expressionexpression<><=>=expressionexpression==!=expressionexpression&&expressionexpression||expressionexpression?expression:expressionexpression=|=^=&=<<=>>=>>>=+=-=*=/=%=expressionnewtype-nametuple-expressioninline-array-expressionidentifierliteralelementary-type-name

rule tuple-expression

(expression,)

rule inline-array-expression

Inline dizi ifadesi, içerdiği ifadelerin ortak türünde statik olarak boyutlandırılmış bir diziyi belirtir.

[expression,]

rule identifier

Normal anahtar kelime olmayan Tanımlayıcıların yanı sıra, ‘from’ ve ‘error’ gibi bazı anahtar kelimeler de tanımlayıcı olarak kullanılabilir.

identifierfromerrorrevertglobal

rule literal

string-literalnumber-literalboolean-literalhex-string-literalunicode-string-literal

rule boolean-literal

truefalse

rule string-literal

Tam bir dize literali, bir veya birkaç ardışık alıntılanmış dizeden oluşur.

non-empty-string-literalempty-string-literal

rule hex-string-literal

Bir veya birkaç ardışık onaltılık dizeden oluşan tam onaltılık dize literali.

hex-string

rule unicode-string-literal

Bir veya birkaç ardışık unicode string’den oluşan tam bir unicode string literal.

unicode-string-literal

rule number-literal

Sayı literalleri isteğe bağlı bir birimle birlikte ondalık veya onaltılık sayılar olabilir.

decimal-numberhex-numbernumber-unit

rule block

Kıvrımlı parantezli ifadeler bloğu. Kendi kapsamını açar.

{statementunchecked-block}

rule unchecked-block

uncheckedblock

rule statement

blockvariable-declaration-statementexpression-statementif-statementfor-statementwhile-statementdo-while-statementcontinue-statementbreak-statementtry-statementreturn-statementemit-statementrevert-statementassembly-statement

rule if-statement

İsteğe bağlı olarak “else” kısmı olan if ifadesi.

if(expression)statementelsestatement

rule for-statement

İsteğe bağlı init, condition ve post-loop kısmı olan for ifadesi.

for(variable-declaration-statementexpression-statement;expression-statement;expression)statement

rule while-statement

while(expression)statement

rule do-while-statement

dostatementwhile(expression);

rule continue-statement

Bir devam ifadesi. Yalnızca for, while veya do-while döngüleri içinde izin verilir.

continue;

rule break-statement

Bir break ifadesi. Yalnızca for, while veya do-while döngüleri içinde izin verilir.

break;

rule try-statement

Bir try ifadesi. İçerilen ifadenin harici bir işlev çağrısı veya bir sözleşme oluşturma olması gerekir.

tryexpressionreturns(parameter-list)blockcatch-clause

rule catch-clause

Bir try ifadesinin catch cümlesi.

catchidentifier(parameter-list)block

rule return-statement

returnexpression;

rule emit-statement

Bir emit ifadesi. İçerilen ifadenin bir event’e referans vermesi gerekir.

emitexpressioncall-argument-list;

rule revert-statement

Bir revert ifadesi. İçerilen ifadenin bir error’e referans vermesi gerekir.

revertexpressioncall-argument-list;

rule assembly-statement

Bir inline assembly bloğu. Inline assembly bloğunun içeriği ayrı bir tarayıcı/lexer kullanır, yani bir inline assembly bloğunun içinde anahtar sözcükler ve izin verilen tanımlayıcılar kümesi farklıdır.

assembly'"evmasm"'assembly-flags{yul-statement}

rule assembly-flags

Assembly bayrakları. Bayrak olarak çift tırnaklı stringlerin virgülle ayrılmış listesi.

(assembly-flag-string,)

rule variable-declaration-tuple

Değişken tanımlamalarında kullanılacak bir dizi değişken adı. Boş alanlar içerebilir.

(,variable-declaration,variable-declaration)

rule variable-declaration-statement

Bir değişken tanımlama ifadesi. Tek bir değişken başlangıç değeri olmadan tanımlanabilirken, değişken çiftleri yalnızca başlangıç değeriyle tanımlanabilir.

variable-declaration=expressionvariable-declaration-tuple=expression;

rule expression-statement

expression;

rule mapping-type

mapping(mapping-key-type=>type-name)

rule mapping-key-type

Eşleme anahtarları olarak yalnızca temel tipler veya kullanıcı tanımlı tipler kullanılabilir.

elementary-type-nameidentifier-path

rule yul-statement

Inline assembly bloğu içinde bir Yul ifadesi. continue ve break ifadeleri yalnızca for döngüleri içinde geçerlidir. leave ifadeleri yalnızca fonksiyon gövdeleri içinde geçerlidir.

yul-blockyul-variable-declarationyul-assignmentyul-function-callyul-if-statementyul-for-statementyul-switch-statementleavebreakcontinueyul-function-definition

rule yul-block

{yul-statement}

rule yul-variable-declaration

İsteğe bağlı başlangıç değerine sahip bir veya daha fazla Yul değişkeninin tanımlanması. Birden fazla değişken tanımlanmışsa, yalnızca bir fonksiyon çağrısı geçerli bir başlangıç değeridir.

letyul-identifier:=yul-expressionletyul-identifier,:=yul-function-call

rule yul-assignment

Herhangi bir ifade tek bir Yul değişkenine atanabilirken, çoklu atamalar için bir yandan bir fonksiyon çağrısı yapılması gerekir.

yul-path:=yul-expressionyul-path,yul-path:=yul-function-call

rule yul-if-statement

ifyul-expressionyul-block

rule yul-for-statement

foryul-blockyul-expressionyul-blockyul-block

rule yul-switch-statement

Bir Yul switch ifadesi yalnızca bir varsayılan durumdan (kullanımdan kaldırılmıştır) veya isteğe bağlı olarak bir varsayılan durum tarafından takip edilen bir veya daha fazla varsayılan olmayan durumdan oluşabilir.

switchyul-expressioncaseyul-literalyul-blockdefaultyul-blockdefaultyul-block

rule yul-function-definition

functionyul-identifier(yul-identifier,)->yul-identifier,yul-block

rule yul-path

Inline assembly içinde yalnızca noktasız tanımlayıcılar bildirilebilirken, nokta içeren yollar inline assembly bloğunun dışındaki bildirimlere başvurabilir.

yul-identifier.yul-identifieryul-evm-builtin

rule yul-function-call

Dönüş değerlerine sahip bir fonksiyon çağrısı yalnızca bir atama veya değişken bildiriminin sağ tarafı olarak gerçekleşebilir.

yul-identifieryul-evm-builtin(yul-expression,)

rule yul-boolean

truefalse

rule yul-literal

yul-decimal-numberyul-string-literalyul-hex-numberyul-booleanhex-string

rule yul-expression

yul-pathyul-function-callyul-literal

lexer grammar SolidityLexer
rule fixed-bytes

Sabit uzunluktaki bayt tipleri.

'bytes1''bytes2''bytes3''bytes4''bytes5''bytes6''bytes7''bytes8''bytes9''bytes10''bytes11''bytes12''bytes13''bytes14''bytes15''bytes16''bytes17''bytes18''bytes19''bytes20''bytes21''bytes22''bytes23''bytes24''bytes25''bytes26''bytes27''bytes28''bytes29''bytes30''bytes31''bytes32'

rule number-unit

Sayılar için birim gösterimi.

'wei''gwei''ether''seconds''minutes''hours''days''weeks''years'

rule signed-integer-type

Boyutlandırılmış işaretli tamsayı(int) türleri. int, int256’nın takma adıdır.

'int''int8''int16''int24''int32''int40''int48''int56''int64''int72''int80''int88''int96''int104''int112''int120''int128''int136''int144''int152''int160''int168''int176''int184''int192''int200''int208''int216''int224''int232''int240''int248''int256'

rule unsigned-integer-type

Boyutlandırılmış işaretsiz tamsayı(uint) türleri. uint, uint256’nın takma adıdır.

'uint''uint8''uint16''uint24''uint32''uint40''uint48''uint56''uint64''uint72''uint80''uint88''uint96''uint104''uint112''uint120''uint128''uint136''uint144''uint152''uint160''uint168''uint176''uint184''uint192''uint200''uint208''uint216''uint224''uint232''uint240''uint248''uint256'

rule non-empty-string-literal

Yazdırılabilir karakterlerle sınırlandırılmış, boş olmayan alıntılanmış bir string literali.

'"'double-quoted-printableescape-sequence'"''\''single-quoted-printableescape-sequence'\''

rule empty-string-literal

Boş bir string literali

'"''"''\'''\''

rule single-quoted-printable

Tek tırnak veya ters eğik çizgi dışında yazdırılabilir herhangi bir karakter.

[\u0020-\u0026\u0028-\u005B\u005D-\u007E]

rule double-quoted-printable

Çift tırnak veya ters eğik çizgi dışında yazdırılabilir herhangi bir karakter.

[\u0020-\u0021\u0023-\u005B\u005D-\u007E]

rule escape-sequence

Kaçış sırası. Yaygın tek karakterli kaçış sıralarının yanı sıra, satır sonları da kaçabilir ve dört onaltılık basamaklı unicode kaçışlarına \uXXXX ve iki basamaklı onaltılık kaçış sıralarına \xXX izin verilir.

'\\'['"\\nrt\n\r]'u'[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'x'[0-9A-Fa-f][0-9A-Fa-f]

rule unicode-string-literal

Rastgele unicode karakterlere izin veren tek tırnaklı bir string literal.

'unicode"'~["\r\n\\]escape-sequence'"''unicode\''~['\r\n\\]escape-sequence'\''

rule hex-string

Onaltılı dizelerin, alt çizgi kullanılarak gruplandırılabilen çift sayıda onaltılı rakamlardan oluşması gerekir.

'hex''"'[0-9A-Fa-f][0-9A-Fa-f]'_''"''\''[0-9A-Fa-f][0-9A-Fa-f]'_''\''

rule hex-number

Onaltılı sayılar bir önek ve alt çizgilerle sınırlandırılabilen rastgele sayıda onaltılı rakamlardan oluşur.

'0''x'[0-9A-Fa-f]'_'

rule decimal-number

Bir ondalık sayı literali, alt çizgilerle sınırlandırılabilen ondalık basamaklardan ve isteğe bağlı bir pozitif veya negatif üstel sayıdan oluşur. Rakamlar bir ondalık nokta içeriyorsa, literal sabit nokta tipine sahiptir.

[0-9]'_'[0-9]'_''.'[0-9]'_'[eE]'-'[0-9]'_'

rule identifier

Solidity’de bir tanımlayıcı bir harf, bir dolar işareti veya bir alt çizgi ile başlamalıdır ve ilk sembolden sonra ek olarak sayılar içerebilir.

[a-zA-Z$_][a-zA-Z0-9$_]

rule yul-evm-builtin

EVM Yul diyalektinde bulunan dahili fonksiyonlar.

'stop''add''sub''mul''div''sdiv''mod''smod''exp''not''lt''gt''slt''sgt''eq''iszero''and''or''xor''byte''shl''shr''sar''addmod''mulmod''signextend''keccak256''pop''mload''mstore''mstore8''sload''sstore''msize''gas''address''balance''selfbalance''caller''callvalue''calldataload''calldatasize''calldatacopy''extcodesize''extcodecopy''returndatasize''returndatacopy''extcodehash''create''create2''call''callcode''delegatecall''staticcall''return''revert''selfdestruct''invalid''log0''log1''log2''log3''log4''chainid''origin''gasprice''blockhash''coinbase''timestamp''number''difficulty''gaslimit''basefee'

rule yul-identifier

Yul tanımlayıcıları harflerden, dolar işaretlerinden, alt çizgilerden ve sayılardan oluşur, ancak bir sayı ile başlamayabilir. Satır içi assembly’de kullanıcı tanımlı tanımlayıcılarda nokta olamaz. Bunun yerine noktalı tanımlayıcılardan oluşan ifadeler için yulPath bölümüne bakın.

[a-zA-Z$_][a-zA-Z0-9$_]

rule yul-hex-number

Yul’daki onaltılık değişmezler bir önek ve bir veya daha fazla onaltılık basamaktan oluşur.

'0''x'[0-9a-fA-F]

rule yul-decimal-number

Yul’daki ondalık literaller sıfır veya başlarında sıfır olmayan herhangi bir ondalık basamak sırası olabilir.

'0'[1-9][0-9]

rule yul-string-literal

Yul’da bulunan string literalleri, kaçış sıralarını ve yazılmamış satır sonları veya kaçış sırasız çift tırnaklar veya tek tırnaklar dışındaki yazdırılabilir karakterleri içerebilen bir veya daha fazla çift tırnaklı veya tek tırnaklı stringlerden oluşur.

'"'double-quoted-printableescape-sequence'"''\''single-quoted-printableescape-sequence'\''

rule pragma-token

Pragma belirteci. Noktalı virgül hariç her türlü sembolü içerebilir. Şu andaki solidity çözümleyicisinin bunun yalnızca bir alt kümesine izin verdiğini unutmayın.