Skip to content

1.2. Pragma Directives#


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

Pragma = (* variant: *) AbicoderPragma
| (* variant: *) ExperimentalPragma
| (* variant: *) VersionPragma;

AbicoderPragma = (* abicoder_keyword: *) ABICODER_KEYWORD
(* version: *) IDENTIFIER;

ExperimentalPragma = (* experimental_keyword: *) EXPERIMENTAL_KEYWORD
(* feature: *) ExperimentalFeature;

ExperimentalFeature = (* variant: *) IDENTIFIER
| (* 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" | "*")+;

(* Never reserved *)
ABICODER_KEYWORD = "abicoder";

(* Never reserved *)
EXPERIMENTAL_KEYWORD = "experimental";

(* Never reserved *)
SOLIDITY_KEYWORD = "solidity";