Skip to content

1.2. Pragma Directives#


PragmaDirective = (* pragma_keyword: *) PRAGMA_KEYWORD
(* pragma: *) Pragma
(* semicolon: *) SEMICOLON;

Pragma = (* variant: *) VersionPragma
| (* variant: *) AbicoderPragma (* Introduced in 0.7.5 *)
| (* variant: *) ExperimentalPragma; (* Introduced in 0.4.16 *)

(* Introduced in 0.7.5 *)
AbicoderPragma = (* abicoder_keyword: *) ABICODER_KEYWORD
(* version: *) AbicoderVersion;

(* Introduced in 0.4.16 *)
ExperimentalPragma = (* experimental_keyword: *) EXPERIMENTAL_KEYWORD
(* feature: *) ExperimentalFeature;

(* Introduced in 0.7.5 *)
AbicoderVersion = (* variant: *) ABICODER_V1_KEYWORD
| (* variant: *) ABICODER_V2_KEYWORD;

(* Introduced in 0.4.16 *)
ExperimentalFeature = (* variant: *) ABI_ENCODER_V2_KEYWORD
| (* variant: *) SMT_CHECKER_KEYWORD
| (* variant: *) StringLiteral;

VersionPragma = (* solidity_keyword: *) SOLIDITY_KEYWORD
(* sets: *) VersionExpressionSets;

VersionExpressionSets = (* item: *) VersionExpressionSet ((* separator: *) BAR_BAR (* item: *) VersionExpressionSet)*;

VersionExpressionSet = (* item: *) VersionExpression+;

VersionExpression = (* variant: *) VersionRange
| (* variant: *) VersionTerm;

VersionRange = (* start: *) VersionLiteral
(* minus: *) MINUS
(* end: *) VersionLiteral;

VersionTerm = (* operator: *) VersionOperator?
(* literal: *) VersionLiteral;

VersionOperator = (* variant: *) CARET
| (* variant: *) TILDE
| (* variant: *) EQUAL
| (* variant: *) LESS_THAN
| (* variant: *) GREATER_THAN
| (* variant: *) LESS_THAN_EQUAL
| (* variant: *) GREATER_THAN_EQUAL;

VersionLiteral = (* variant: *) SimpleVersionLiteral
| (* variant: *) SINGLE_QUOTED_VERSION_LITERAL
| (* variant: *) DOUBLE_QUOTED_VERSION_LITERAL;

SimpleVersionLiteral = (* item: *) VERSION_SPECIFIER ((* separator: *) PERIOD (* item: *) VERSION_SPECIFIER)*;

VERSION_SPECIFIER = «VERSION_SPECIFIER_FRAGMENT»;

SINGLE_QUOTED_VERSION_LITERAL = "'" «VERSION_SPECIFIER_FRAGMENT» ("." «VERSION_SPECIFIER_FRAGMENT»)* "'";

DOUBLE_QUOTED_VERSION_LITERAL = '"' «VERSION_SPECIFIER_FRAGMENT» ("." «VERSION_SPECIFIER_FRAGMENT»)* '"';

«VERSION_SPECIFIER_FRAGMENT» = ("0""9" | "x" | "X" | "*")+;