<< Ignore Symbols
pragma :=
'<*' pragmaBody '*>'
;
pragmaBody :=
ctMsgPragma | condCompPragma | procDeclAttrPragma | promiseToWritePragma |
forwardDeclPragma | charEncodingPragma | memAlignmentPragma |
bitPaddingPragma | purityAttrPragma | varDeclAttrPragma | deprecationPragma |
genTimestampPragma | memMappingPragma | ffiPragma | ffidentPragma |
implDefinedPragma
;
#2 Body Of Compile Time Message Pragma syntax diagram
ctMsgPragma :=
MSG '=' ctMsgMode ':' ctMsgComponentList
;
ctMsgMode :=
INFO | WARN | ERROR | FATAL
;
ctMsgComponentList :=
ctMsgComponent ( ',' ctMsgComponent )*
;
ctMsgComponent :=
StringLiteral | constQualident | '?' valuePragma
;
#2.4 Constant Qualified Identifier syntax diagram
constQualident := qualident ;
valuePragma :=
ALIGN | ENCODING | valuePragmaSymbol
;
valuePragmaSymbol := PragmaSymbol ;
PragmaSymbol :=
Letter+
;
#3 Body Of Conditional Compilation Pragma syntax diagram
condCompPragma :=
( IF | ELSIF ) inPragmaExpression | ELSE | END
;
#4 Body Of Procedure Declaration Attribute Pragma syntax diagram
procDeclAttrPragma :=
INLINE | NOINLINE | BLOCKING | NORETURN
;
#5 Body Of Promise-To-Write Pragma syntax diagram
promiseToWritePragma :=
OUT
;
#6 Body Of Forward Declaration Pragma syntax diagram
forwardDeclPragma :=
FORWARD ( TYPE identList | procedureHeader )
;
#7 Body Of Character Encoding Pragma syntax diagram
charEncodingPragma :=
ENCODING '=' StringLiteral /* "ASCII" or "UTF8" */
( ':' codePointSampleList )?
;
#7.1a Code Point Sample List syntax diagram
codePointSampleList :=
codePointSample ( ',' codePointSample )*
;
#7.1b Code Point Sample
codePointSample :=
quotedCharacter '=' charCodeLiteral
;
quotedCharacter := StringLiteral ; /* single character only */
charCodeLiteral := NumberLiteral ; /* whole number only */
#8 Body Of Memory Alignment Pragma syntax diagram
memAlignmentPragma :=
ALIGN '=' inPragmaExpr
;
#9 Body Of Bit Padding Pragma syntax diagram
bitPaddingPragma :=
PADBITS '=' inPragmaExpr
;
#10 Body Of Purity Attribute Pragma syntax diagram
purityAttrPragma :=
PURITY '=' inPragmaExpr /* values 0 .. 3 */
;
#11 Body Of Variable Declaration Attribute Pragma syntax diagram
varDeclAttrPragma :=
SINGLEASSIGN | LOWLATENCY | VOLATILE
;
#12 Body Of Deprecation Pragma syntax diagram
deprecationPragma :=
DEPRECATED
;
#13 Body Of Library Generation Timestamp Pragma syntax diagram
genTimestampPragma :=
GENERATED template ',' datestamp ',' timestamp
;
datestamp :=
year '-' month '-' day
;
timestamp :=
hours ':' minutes ':' seconds utcOffset?
;
#13.3 Year, Month, Day, Hours, Minutes, Seconds syntax diagram
year := wholeNumber ;
month := wholeNumber ;
day := wholeNumber ;
hours := wholeNumber ;
minutes := wholeNumber ;
seconds := wholeNumber ;
utcOffset :=
( '+' | '-' ) wholeNumber
;
#14 Body Of Memory Mapping Pragma syntax diagram
memMappingPragma :=
ADDR '=' inPragmaExpr
;
#15 Body Of Foreign Function Interface Pragma syntax diagram
ffiPragma :=
FFI '=' StringLiteral /* "C", "Fortran", "CLR" or "JVM" */
;
#16 Body Of Foreign Function Identifier Mapping Pragma syntax diagram
ffidentPragma :=
FFIDENT '=' StringLiteral /* foreign library identifier */
;
#17 Body Of Implementation Defined Pragma syntax diagram
implDefinedPragma :=
( implPrefix '.' )? PragmaSymbol ( '=' inPragmaExpr )? '|' ctMsgMode
;
implPrefix :=
Letter LetterOrDigit+
;
inPragmaExpr :=
inPragmaSimpleExpr ( inPragmaOperL1 inPragmaSimpleExpr )?
;
#18.1 In-Pragma Level-1 Operator syntax diagram
inPragmaOperL1 :=
'=' | '#' | '<' | '<=' | '>' | '>='
;
#19 In-Pragma Simple Expression syntax diagram
inPragmaSimpleExpr :=
inPragmaTerm ( inPragmaOperL2 inPragmaTerm )* | '-' inPragmaFactor
;
#19.1 In-Pragma Level-2 Operator syntax diagram
inPragmaOperL2 :=
'+' | '-' | OR
;
inPragmaTerm :=
inPragmaSimpleTerm ( inPragmaOperL3 inPragmaSimpleTerm )*
;
#20.1 In-Pragma Level-3 Operator syntax diagram
inPragmaOperL3 :=
'*' | DIV | MOD | AND
;
inPragmaSimpleTerm :=
NOT? inPragmaFactor
;
inPragmaFactor :=
WholeNumber |
/* constQualident is covered by inPragmaCtFunctionCall */
'(' inPragmaExpr ')' | inPragmaCtFunctionCall
;
#23 In-Pragma Compile Time Function Call syntax diagram
inPragmaCtFunctionCall :=
qualident ( '(' inPragmaExpr ( ',' inPragmaExpr )* ')' )?
;