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";