Skip to main content

Compact grammar

Compact 언어 버전 0.22.0.

표기법: 아래 문법에서 키워드와 구두점은 고정폭 글꼴로, 터미널 및 비터미널 이름은 강조 글꼴로 표기합니다. 대안은 수직 막대(|)로, 선택 항목은 위첨자 opt로 나타냅니다. 반복은 줄임표로 표현하며, XX(여기서 X는 문법 기호)는 X가 0회 이상 나타남을 의미합니다. X ,, X(여기서 X는 문법 기호, ,는 리터럴 쉼표)는 쉼표로 구분된 X의 0회 이상 발생을 의미합니다. 줄임표에 위첨자 1이 붙으면 최소 하나의 X가 필요합니다. 이러한 시퀀스 뒤에 ,opt가 오면, X가 하나 이상일 때만 후행 쉼표가 허용됩니다. 예를 들어, idid는 0개 이상의 id를, expr , ⋯¹, expr ,opt는 하나 이상의 쉼표로 구분된 expr에 선택적 후행 쉼표가 올 수 있음을 나타냅니다. 쉼표 관련 규칙은 세미콜론에도 동일하게 적용됩니다.

identifier

id, module-name, function-name, struct-name, enum-name, contract-name, tvar-name, type-name

식별자 구문은 TypeScript 식별자와 동일합니다.

field-literal

nat

필드 리터럴은 0이거나 1-9로 시작하는 숫자열로 구성된 자연수(예: 723)이며, 최대 필드 값을 초과할 수 없습니다.

string-literal

str, file

문자열 리터럴 구문은 TypeScript 문자열과 동일합니다.

version-literal

version

버전 리터럴은 메이저 및 마이너 버전을 나타내는 nat.nat 형식 또는 메이저, 마이너 및 버그픽스 버전을 나타내는 nat.nat.nat 형식입니다. 버전 리터럴이 허용되는 곳에서는 메이저 버전만 나타내는 일반 nat도 허용됩니다.

Compact

Program-element

Pragma

pragma-formpragma id version-expr ;

Version-expression

Version-expression0

Version-Term

Version-atom

version-atomnat
|version

Include

include-forminclude file ;

Module-definition

module-definitionexportopt module module-name gparamsopt { program-elementprogram-element }

Generic-parameter-list

gparams< generic-param ,, generic-param ,opt >

Generic-parameter

generic-param# tvar-name
|tvar-name

Import-declaration

import-formimport import-selectionopt import-name gargsopt import-prefixopt ;

Import-selection

import-selection{ import-element ,, import-element ,opt } from

Import-element

import-elementid
|id as id

Import-name

import-nameid
|file

Import-prefix

import-prefixprefix id

Generic-argument-list

gargs< garg ,, garg ,opt >

Generic-argument

gargnat
|type

Export-declaration

export-formexport { id ,, id ,opt } ;opt

Ledger-declaration

ledger-declarationexportopt sealedopt ledger id : type ;

Witness-declaration

witness-declarationexportopt witness id gparamsopt simple-parameter-list : type ;

Constructor

constructor-definitionconstructor pattern-parameter-list block

Circuit-definition

circuit-definitionexportopt pureopt circuit function-name gparamsopt pattern-parameter-list : type block

Structure-declaration

struct-declarationexportopt struct struct-name gparamsopt { typed-id ;; typed-id ;opt } ;opt
|exportopt struct struct-name gparamsopt { typed-id ,, typed-id ,opt } ;opt

Enum-declaration

enum-declarationexportopt enum enum-name { id , ⋯¹ , id ,opt } ;opt

External-contract-declaration

contract-declarationexportopt contract contract-name { circuit-declaration ;; circuit-declaration ;opt } ;opt
|exportopt contract contract-name { circuit-declaration ,, circuit-declaration ,opt } ;opt

External-contract-circuit

circuit-declarationpureopt circuit id simple-parameter-list : type

Type-declaration

type-alias-declarationexportopt newopt type type-name gparamsopt = type ;

Typed-identifier

typed-idid : type

Simple-parameter-list

simple-parameter-list( typed-id ,, typed-id ,opt )

Typed-pattern

typed-patternpattern : type

Pattern-parameter-list

pattern-parameter-list( typed-pattern ,, typed-pattern ,opt )

Type

typetref
|Boolean
|Field
|Uint < tsize >
|Uint < tsize .. tsize >
|Bytes < tsize >
|Opaque < str >
|Vector < tsize , type >
|[ type ,, type ,opt ]

Type-reference

trefid gargsopt

Type-size

tsizenat
|id

Block

block{ stmtstmt }

Statement

stmtif ( expr-seq ) stmt
|stmt0

Statement0

stmt0expr-seq ;
|const cbinding , ⋯¹ , cbinding ;
|if ( expr-seq ) stmt0 else stmt
|for ( const id of nat .. nat ) stmt
|for ( const id of expr-seq ) stmt
|return expr-seq ;
|return ;
|block

Pattern

patternid
|[ patternopt ,, patternopt ,opt ]
|{ pattern-struct-elt ,, pattern-struct-elt ,opt }

Pattern-struct-element

pattern-struct-eltid
|id : pattern

Expression-sequence

expr-seqexpr
|expr , ⋯¹ , expr , expr

Expression

Expression0

expr0expr0 || expr1
|expr1

Expression1

expr1expr1 && expr2
|expr2

Expression2

expr2expr2 == expr3
|expr2 != expr3
|expr3

Expression3

Expression4

expr4expr4 as type
|expr5

Expression5

Expression6

expr6expr6 * expr7
|expr7

Expression7

expr7! expr7
|expr8

Expression8

expr8expr8 [ expr ]
|expr8 . id
|expr8 . id ( expr ,, expr ,opt )
|expr9

Expression9

expr9fun ( expr ,, expr ,opt )
|map ( fun , expr , ⋯¹ , expr ,opt )
|fold ( fun , expr , expr , ⋯¹ , expr ,opt )
|slice < tsize > ( expr , expr )
|[ tuple-arg ,, tuple-arg ,opt ]
|Bytes [ bytes-arg ,, bytes-arg ,opt ]
|tref { struct-arg ,, struct-arg ,opt }
|assert ( expr , str )
|disclose ( expr )
|term

Term

termid
|true
|false
|nat
|str
|pad ( nat , str )
|default < type >
|( expr-seq )

Tuple-argument

tuple-argexpr
|... expr
bytes-argtuple-arg

Structure-argument

struct-argexpr
|id : expr
|... expr

Function

Return-type

return-type: type

Optionally-typed-pattern

optionally-typed-patternpattern
|typed-pattern

Const-Binding

Arrow-parameter-list

arrow-parameter-list( optionally-typed-pattern ,, optionally-typed-pattern ,opt )