glsl toolkit
1.0.0A library to parse and modify OpenGL Shader Language (GLSL) source code
About GLSL-Toolkit
This is a collection of tools written to allow you to wrangle OpenGL Shader Language (GLSL) source files. The library was written for GLSL4.5 sources, but should work with higher or lower versions as well.
How To
The primary functionality that this library gives you is parsing, serialising, and walking GLSL source code.
(glsl-toolkit:parse "int a = 0;
void main(){
int b = 1;
a = b;
}")
This will lex and parse the source into an AST. You can then turn the AST back into a code representation.
(glsl-toolkit:serialize *)
The library will take certain liberties at transforming the code while parsing and printing. This is done to normalise the code and make it easier to walk and change. The semantic meaning of the code should however be preserved verbatim. If this is not the case, please file an issue.
Aside from simply printing the source out again, you can also walk over it and transform it in a syntactically and semantically useful way. This way you can refactor the code. A simple example is in order.
(glsl-toolkit:serialize
(glsl-toolkit:walk **
(lambda (ast context environment)
(if (glsl-toolkit:global-identifier-p ast environment)
(format NIL "__~a" ast)
ast))))
The code walker provides access to a number of predicates that allow you to figure out properties of the current node and the lexical meaning of identifiers. Have a look at the symbol index for the various predicate functions.
Finally, the library provides a way to merge individual shader files together. It does so while attempting to either unify or rename global identifiers that might clash. This is useful when multiple shader effects need to be chained together in a single shader pass.
(glsl-toolkit:merge-shader-sources '("
out layout (location = 0) vec4 position;
void foo();
void main(){
position += vec4(1, 2, 3, 4);
}" "
out layout (location = 0) vec4 pos;
in layout (location = 0) vec4 col;
void foo(){
a();
}
void main(){
pos += col;
}"))
The merging does not come without its caveats. At times, it may be impossible to merge due to conflicting type declarations, and other times the system may not recognise a possible merge due to name or qualifier mismatch. While it should work for most cases, some exotic cases are likely to fail at may need manual intervention.
Some caveats exist in the parser as well. Since we cannot implement the behaviour of the preprocessor ourselves, we instead must opt for allowing preprocessor directives verbatim at certain points in the parse tree. We opt for allowing them at any point where a statement or declaration might occur, but not within expressions.
System Information
Definition Index
-
GLSL-TOOLKIT
- ORG.SHIRAKUMO.TRIAL.GLSL
No documentation provided.-
EXTERNAL SYMBOL-MACRO NO-VALUE
Evaluates to itself, namely the symbol NO-VALUE Represents the absence of a value in AST objects.
-
EXTERNAL SPECIAL-VARIABLE *GLSL-KEYWORD-SYMBOLS*
List to all the keywords in GLSL shader files but as interned and upcased keyword symbols. See *GLSL-KEYWORDS*
-
EXTERNAL SPECIAL-VARIABLE *GLSL-KEYWORDS*
List to all the keywords in GLSL shader files. This does not include terminals and other keywords such as {}/*+ etc.
-
EXTERNAL CLASS ENVIRONMENT
Struct to hold information about the lexical environment during code walking. See MAKE-ENVIRONMENT See ROOT See BINDINGS
-
EXTERNAL CONDITION CONDITION
No documentation provided. -
EXTERNAL FUNCTION ADVANCE
- &OPTIONAL
- OFFSET
Advances the current token index. See *TOKEN-INDEX* See BACKTRACK
-
EXTERNAL FUNCTION BACKTRACK
- &OPTIONAL
- OFFSET
Reduces the current token index. See *TOKEN-INDEX* See ADVANCE
-
EXTERNAL FUNCTION BINDING
- NAME
- ENVIRONMENT
Accessor to the binding in the environment for the given name. See BINDINGS See ENVIRONMENT
-
EXTERNAL FUNCTION (SETF BINDING)
- VALUE
- NAME
- ENVIRONMENT
No documentation provided. -
EXTERNAL FUNCTION BREAK
- &OPTIONAL
- DATUM
- &REST
- ARGUMENTS
Print a message and invoke the debugger without allowing any possibility of condition handling occurring.
-
EXTERNAL FUNCTION COMBINE-METHODS
- SHADERS
Performs method combination on the listed shader parts. Each shader in SHADERS may be a string, pathname, stream, or shader AST. The method combination replicates the CLOS standard method combination, including before/after/around, call-next-method, and next-method-p. Any standard function definition is assumed to be a primary method. Before, after, and around methods can be defined by suffixing the name with @before/@after/@around, respectively. Note that aside from the suffix the function signatures (including qualifiers, return type, and argument types, but not argument names) have to match exactly, as otherwise the functions are considered separate units. Within any primary or around method body, the variable next_method_p is statically replaced with 1 or 0 depending on whether a next method is available or not, and a call to call_next_method is replaced with a call to the next method function. If no arguments are passed to call_next_method, the arguments are copied automatically. You can also make use of maybe_call_next_method, which is semantically the same as if(next_method_p) call_next_method(...); If methods are defined without a single corresponding primary method, an error is signalled. The order of method definitions is relevant in the following way: - For @before, the later methods are called *first* - For @after, the later methods are called *last* - For @around, the later methods are called *first* - For @primary, the later methods are called *first* Example: void foo@after(int x){ 1; } int foo(int y){ return 2; } int foo(int z){ if(next_method_p) return call_next_method(); return -1; } void foo@before(int w){ 0; } See PARSE
-
EXTERNAL FUNCTION COMPILE-RULE
- RULE
Compile the rule s-expression. The following types are handled specially: - NULL NIL is returned - KEYWORD Attempts to match a token that is EQ to this keyword. On success returns the keyword. - SYMBOL Attempts to match the rule given named by the symbol. Returns whatever the rule returns. - CHARACTER Attempts to match a token that is EQL to this character. Returns the character on match. - STRING Attempts to match the string against the tokens. Returns the string on successful match. - CONS One of the following compound, identified by the first symbol. - AND Matches if all of the sub-rules match. Returns the last rule's return value on successful match. - OR Matches if any of the sub-rules match. Returns the first successful rule's return value. - NOTANY Matches if none of the choices match. Returns the token that did not match. - ANY Matches if any of the choices match. Returns the token that did match. - WHEN Performs all the other sub-rules only if the first sub-rule matches. Returns the last sub-rule's return value. - V Makes sure the result of the sub-rule is added to the values list if the sub-rule matches. Returns what the sub-rule returned. - * Repeatedly matches the sub-rule as many times as possible. Returns T. - + Attempts to match the sub-rule at least once. Returns T on success. - ? Attempts to match the sub-rule. If it does not match the secondary form is returned, or NO-VALUE. - ! Evaluates the sub-rule and returns its result, but always resets the token index to its initial value. - Otherwise the rule is returned unchanged. See CONSUME-STRING See CONSUME-ANY See CONSUME-NOTANY See DEFINE-RULE
-
EXTERNAL FUNCTION CONSTANT-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is a constant value.
-
EXTERNAL FUNCTION CONSUME
-
EXTERNAL FUNCTION CONSUME-ANY
- CHOICES
Consume any of the tokens in the choices sequence, if possible. If a token matches, it is returned. Otherwise NIL is returned instead. The index is only modified if a match occurs.
-
EXTERNAL FUNCTION CONSUME-NOTANY
- CHOICES
Consume any token that is not one of the tokens in the choices sequence. If a token matches, it is returned. Otherwise NIL is returned instead. The index is only modified if a match occurs.
-
EXTERNAL FUNCTION CONSUME-STRING
- STRING
Attempts to consume the given string from the token array. If the string matches, it is returned. Otherwise, NIL is returned instead. If the match succeeds, the token index is modified. Otherwise it is reset to the point where it was before the match was attempted.
-
EXTERNAL FUNCTION CONSUME-WHITESPACE
Consumes all spaces and newlines in the token array from the current position on.
-
EXTERNAL FUNCTION CONTINUE
- &OPTIONAL
- CONDITION
Transfer control to a restart named CONTINUE, or return NIL if none exists.
-
EXTERNAL FUNCTION CONTROL-FLOW-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is a control-flow instruction.
-
EXTERNAL FUNCTION DECLARATION-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is a declaration statement.
-
EXTERNAL FUNCTION END-OF-TOKENS-P
Returns true if the end of the token array has been reached. See *TOKEN-ARRAY* See *TOKEN-INDEX*
-
EXTERNAL FUNCTION EQUAL
- X
- Y
Return T if X and Y are EQL or if they are structured components whose elements are EQUAL. Strings and bit-vectors are EQUAL if they are the same length and have identical components. Other arrays must be EQ to be EQUAL.
-
EXTERNAL FUNCTION EXPRESSION-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is an expression.
-
EXTERNAL FUNCTION FUNCTION-IDENTIFIER-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is an identifier for a function.
-
EXTERNAL FUNCTION GLOBAL-IDENTIFIER-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is an identifier that refers to a global definition.
-
EXTERNAL FUNCTION IDENTIFIER-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node might be an identifier. This is not always accurate, as some identifiers can also be types at the same time. It thus depends on the context.
-
EXTERNAL FUNCTION INDENT
- &OPTIONAL
- OFFSET
Starts a fresh line and emits as many spaces as the *INDENT* variable dictates.
-
EXTERNAL FUNCTION KEYWORD-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is a GLSL keyword. See *GLSL-KEYWORD-SYMBOLS*
-
EXTERNAL FUNCTION LEX
- INPUT
- &OPTIONAL
- TOPLEVEL-RULE
Lex the input string into a token array for use in parsing. See NORMALIZE-SHADER-SOURCE See RULE See PARSE
-
EXTERNAL FUNCTION LOCAL-IDENTIFIER-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is an identifier that refers to a local definition.
-
EXTERNAL FUNCTION MAKE-ENVIRONMENT
- &OPTIONAL
- PARENT
Create a new environment object. If not parent environment is passed in, the environment is assumed to be a top-level root environment. See ENVIRONMENT
-
EXTERNAL FUNCTION MATCHING-DECLARATORS-P
- A
- B
Returns true if the two variable declarations are considered to match. This is true if: - The first of both lists (qualifiers) match by MATCHING-QUALIFIERS-P - The second of both lists (specifiers) match by MATCHING-SPECIFIERS-P - The fourth of both lists (array-identifiers) match by EQUAL The third of both lists (identifiers) must not match. The fifth of both lists (initializers) must not match.
-
EXTERNAL FUNCTION MATCHING-QUALIFIERS-P
- A
- B
Returns true if the two given qualifier lists are considered to match. The following qualifier parts are not considered: :HIGHP :MEDIUMP :LOWP :INVARIANT :PRECISE :SMOOTH :FLAT :NOPERSPECTIVE All other qualifiers must match by EQUAL, but don't have to be in the same order. See https://www.khronos.org/opengl/wiki/Shader_Compilation#Qualifier_matching
-
EXTERNAL FUNCTION MATCHING-SPECIFIERS-P
- A
- B
Returns true if the two given specifier lists are considered to match. In order to match, the two lists have to be EQUAL.
-
EXTERNAL FUNCTION MERGE-SHADER-SOURCES
- SOURCES
- &KEY
- TO
- MIN-VERSION
- PROFILE
Convenience function to merge the sources of multiple shaders into a single one. Each source may be a string, pathname, or shader AST. See PARSE See MERGE-SHADERS See SERIALIZE
-
EXTERNAL FUNCTION MERGE-SHADERS
- SHADERS
- &KEY
- MIN-VERSION
- PROFILE
Merge the given shader ASTs into a single AST. The top-level AST nodes must be AST objects of type SHADER. The merging will attempt to conflate declarations where possible and rename variables where necessary, in order to create a single shader that is internally consistent. It also emits a single main function at the end, which does nothing but call the main function of each sub-shader in the sequence that the shaders were passed. See HANDLE-DECLARATION See HANDLE-IDENTIFIER See WALK See MERGE-SHADER-SOURCES
-
EXTERNAL FUNCTION NORMALIZE-SHADER-SOURCE
- INPUT
Attempts to normalise the shader source code. This does the following: - Removes any and all comments from the code - Handles the backslash-before-newline trick to get multiple lines to act as one. - Converts CRLF/LFCR/LFLF/CRCR into NEWLINE - Converts TAB to SPACE - Converts consecutive whitespace into singular whitespace while preserving newlines. The input may be one of the following types: - PATHNAME - STRING - STREAM See NEWLINE-P
-
EXTERNAL FUNCTION PARSE
- INPUT
- &OPTIONAL
- TOPLEVEL-RULE
-
EXTERNAL FUNCTION PEEK
- &OPTIONAL
- OFFSET
Returns the token at the index relative to the current position. See *TOKEN-ARRAY* See *TOKEN-INDEX*
-
EXTERNAL FUNCTION PREPROCESS
- SOURCE
- &KEY
- INCLUDE-RESOLUTION
No documentation provided. -
EXTERNAL FUNCTION PREPROCESSOR-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is a preprocessor instruction.
-
EXTERNAL FUNCTION REMOVE-RULE
- NAME
Removes the parsing rule of the given name.
-
EXTERNAL FUNCTION REMOVE-SERIALIZER
- TYPE
Removes the serializer function for AST objects of the given type. See *SERIALIZERS* See SERIALIZER
-
EXTERNAL FUNCTION REMOVE-WALKER
- TYPE
-
EXTERNAL FUNCTION ROOT-ENVIRONMENT-P
- ENVIRONMENT
Returns T if the environment is a top-level root environment. See ENVIRONMENT See ROOT
-
EXTERNAL FUNCTION RULE
- NAME
Returns the symbol that identifies the parsing rule of the given name. This is a place that can be set with the function object that should be used to parse the rule of the given name. If no such rule exists, an error is signalled.
-
EXTERNAL FUNCTION (SETF RULE)
- PARSER
- NAME
No documentation provided. -
EXTERNAL FUNCTION SERIALIZE
- PART
- &OPTIONAL
- TO
Serializes the AST part to shader source. TO may be one of the following: - NULL The output is gathered into a string and returned. - T The output is sent to *STANDARD-OUTPUT*. - STREAM The output is sent to this stream. - PATHNAME The output is written to the file. If the file already exists, an error is signalled. See *SERIALIZE-STREAM* See SERIALIZE-PART
-
EXTERNAL FUNCTION SERIALIZE-PART
- PART
Serializes the AST part. This appropriately handles all values that can be contained in the AST. For AST objects, an appropriate serializer function is called if possible. Should an unknown AST object occur, an error is signalled. See SERIALIZER
-
EXTERNAL FUNCTION SERIALIZER
- TYPE
Accessor to the serializing function for AST objects of the given type. See *SERIALIZERS* See DEFINE-SERIALIZER See REMOVE-SERIALIZER
-
EXTERNAL FUNCTION (SETF SERIALIZER)
- FUNCTION
- TYPE
No documentation provided. -
EXTERNAL FUNCTION SFORMAT
- STRING
- &REST
- ARGS
Convenience function used to format to the serializing stream. A special format directive ~O is provided as well, which causes SERIALIZE-PART to be called on the respective object.
-
EXTERNAL FUNCTION STATEMENT-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is a statement. See DECLARATION-P See EXPRESSION-P See CONTROL-FLOW-P
-
EXTERNAL FUNCTION TRACE-PARSE
Cause all parse rule functions to emit tracing information. See UNTRACE-PARSE See TRACE-PARSE-FUNC
-
EXTERNAL FUNCTION TRANSFORM
- SOURCE
- PROFILE
- VERSION
No documentation provided. -
EXTERNAL FUNCTION UNIQUIFY
- TABLE
- &OPTIONAL
- NAME
Create a (hopefully) unique identifier for the given name. The returned name is prefixed by two underscores. Identifiers like that are reserved for use by the underlying library or framework (us), so there should not be any clash with user identifiers unless the shader is not conforming to begin with. See *UNIQUE-COUNTER*
-
EXTERNAL FUNCTION UNTRACE-PARSE
Make all parse rule functions cease to emit tracing information. See TRACE-PARSE See UNTRACE-PARSE-FUNC
-
EXTERNAL FUNCTION VARIABLE-IDENTIFIER-P
- VALUE
- ENVIRONMENT
Returns T if the given AST node is an identifier for a variable.
-
EXTERNAL FUNCTION WALK
- AST
- FUNCTION
- &OPTIONAL
- ENVIRONMENT
Walk over the AST, calling FUNCTION on each interesting node. Returns a fresh AST that was constructed by the function. The function will be called with three arguments: - The AST node at the current point - The surrounding context in which the AST node is - The environment object that maintains lexical information The function should return a single value, which is the value that should be put into a fresh AST in place of the original node. Note that calling any of the environment inspection functions on an identifier in a lower level than the current AST node that the function received is not going to work. The lexical information is only guaranteed to be ready by the time the function is called with the identifier itself. See ROOT-ENVIRONMENT-P See PREPROCESSOR-P See CONSTANT-P See DECLARATION-P See EXPRESSION-P See CONTROL-FLOW-P See KEYWORD-P See STATEMENT-P See IDENTIFIER-P See GLOBAL-IDENTIFIER-P See LOCAL-IDENTIFIER-P See VARIABLE-IDENTIFIER-P See FUNCTION-IDENTIFIER-P See ENVIRONMENT See WALK-PART
-
EXTERNAL FUNCTION WALK-PART
- AST
- CONTEXT
- FUNCTION
- ENVIRONMENT
Walk over the given AST node. On AST objects, this will call out to the respective walker function. See WALKER
-
EXTERNAL FUNCTION WALKER
- TYPE
Accessor to the walker function for AST objects of the given type. See *WALKERS* See REMOVE-WALKER See DEFINE-WALKER
-
EXTERNAL FUNCTION (SETF WALKER)
- FUNCTION
- TYPE
No documentation provided. -
EXTERNAL MACRO DEFINE-BINARY-OP-WALKER
- TYPE
Define a walker for a binary AST object. This walker recurses over the left and right nodes in the object and returns a fresh value constructed from them.
-
EXTERNAL MACRO DEFINE-EMPTY-OP-WALKER
- TYPE
Define a walker for an empty AST object. This walker function does nothing but construct a fresh return value.
-
EXTERNAL MACRO DEFINE-OBJECT
- NAME
- RULE
- &BODY
- TRANSFORM
Defines a parsing object. The RULE should be a parsing rule to match against. It should probably contain calls to the V rule in order to populate the V values list. This list is used to store the return values of the object. TRANSFORM is an optional list of forms to be evaluated to transform the values list on a successful match. It acts as an implicit PROGN and the last value is returned as the value of the rule. If no TRANSFORM is given, the return value is the V values list prepended with the name of the rule. See DEFINE-RULE
-
EXTERNAL MACRO DEFINE-REFERENCE
- NAME
- &BODY
- RULES
Defines a reference parsing rule. The body should be a number of sub-rules that may be matched in order to match this rule. Either the value stored in V by the V function, or the return value of the first matching sub-rule is returned. See DEFINE-RULE
-
EXTERNAL MACRO DEFINE-RULE
- NAME
- &BODY
- BODY
Defines a new parsing rule of the given name. This will create a function definition in the ORG.SHIRAKUMO.TRIAL.GLSL.RULES package by re-interning the symbol in that package. A default lexical binding named V is provided. See DEFINE-REFERENCE See DEFINE-OBJECT
-
EXTERNAL MACRO DEFINE-SERIALIZATION
- TYPE
- ARGS
- &BODY
- BODY
Convenience function to define the serialization of AST objects of the given type. ARGS must be a lambda-list to destructure the contents of the AST object. See SERIALIZER
-
EXTERNAL MACRO DEFINE-SERIALIZER
- TYPE
- OBJECT
- &BODY
- BODY
Convenience function to define a serializer function for AST objects of the given type. See SERIALIZER
-
EXTERNAL MACRO DEFINE-UNARY-OP-WALKER
- TYPE
Define a walker for a unary AST object. This walker recurses over the single node in the object and returns a fresh value constructed from it.
-
EXTERNAL MACRO DEFINE-WALKER
- TYPE
- AST
- FUNC
- ENV
- &BODY
- BODY
Define a new walker function that is responsible for walking over a particular type of AST object node. See *WALKERS* See WALKER See DEFINE-WALKING-BODY
-
EXTERNAL MACRO DEFINE-WALKING-BODY
- TYPE
- ARGS
- &BODY
- BODY
Convenience definition macro. The ARGS should be a destructuring-bind lambda-list to destructure the contents of the object. The body should be forms that provide the values to use in the resulting AST object. The last value should be the tail of the object's list. Thus this is about equivalent to (define-walker type (o) (destructuring-bind .. (o) (list* 'type body))) Within the body the WALK function is rebound to one that can be conveniently used to recursively walk the AST. It only needs the new node to walk over. It optionally takes a new environment to supply. You can reach the other function values like the full AST, the walk function, and the environment by changing the type to a list and providing the binding symbols as keyword arguments in it with :KEY :FUNC and :ENV. See DEFINE-WALKER
-
EXTERNAL MACRO RETURN
- &OPTIONAL
- VALUE
No documentation provided. -
EXTERNAL MACRO WITH-INDENTATION
- &OPTIONAL
- STEP
- &BODY
- BODY
-
EXTERNAL MACRO WITH-TOKEN-INPUT
- VECTOR
- &BODY
- BODY
Readies the environment for token parsing. This binds *TOKEN-ARRAY* to the given vector and binds *TOKEN-INDEX* to 0. See *TOKEN-ARRAY* See *TOKEN-INDEX*
-
EXTERNAL OPTIMIZER EQUAL
No documentation provided. -
EXTERNAL TRANSFORM EQUAL
No documentation provided. -
EXTERNAL VOP RETURN
No documentation provided.
-
GLSL-PARSER-RULES
- ORG.SHIRAKUMO.TRIAL.GLSL.PARSER.RULES
No documentation provided.-
EXTERNAL FUNCTION !
No documentation provided. -
EXTERNAL FUNCTION !=
No documentation provided. -
EXTERNAL FUNCTION %
No documentation provided. -
EXTERNAL FUNCTION %=
No documentation provided. -
EXTERNAL FUNCTION &
No documentation provided. -
EXTERNAL FUNCTION &&
No documentation provided. -
EXTERNAL FUNCTION &=
No documentation provided. -
EXTERNAL FUNCTION (
No documentation provided. -
EXTERNAL FUNCTION )
No documentation provided. -
EXTERNAL FUNCTION *
No documentation provided. -
EXTERNAL FUNCTION *=
No documentation provided. -
EXTERNAL FUNCTION +
No documentation provided. -
EXTERNAL FUNCTION ++
No documentation provided. -
EXTERNAL FUNCTION +=
No documentation provided. -
EXTERNAL FUNCTION ,
No documentation provided. -
EXTERNAL FUNCTION -
No documentation provided. -
EXTERNAL FUNCTION --
No documentation provided. -
EXTERNAL FUNCTION -=
No documentation provided. -
EXTERNAL FUNCTION .
No documentation provided. -
EXTERNAL FUNCTION /
No documentation provided. -
EXTERNAL FUNCTION /=
No documentation provided. -
EXTERNAL FUNCTION :
No documentation provided. -
EXTERNAL FUNCTION ;
No documentation provided. -
EXTERNAL FUNCTION <
No documentation provided. -
EXTERNAL FUNCTION <<
No documentation provided. -
EXTERNAL FUNCTION <<=
No documentation provided. -
EXTERNAL FUNCTION <=
No documentation provided. -
EXTERNAL FUNCTION =
No documentation provided. -
EXTERNAL FUNCTION ==
No documentation provided. -
EXTERNAL FUNCTION >
No documentation provided. -
EXTERNAL FUNCTION >=
No documentation provided. -
EXTERNAL FUNCTION >>
No documentation provided. -
EXTERNAL FUNCTION >>=
No documentation provided. -
EXTERNAL FUNCTION ?
No documentation provided. -
EXTERNAL FUNCTION ADDITION
No documentation provided. -
EXTERNAL FUNCTION ARRAY-INITIALIZER
No documentation provided. -
EXTERNAL FUNCTION ARRAY-MODIFIER
No documentation provided. -
EXTERNAL FUNCTION ARRAY-SPECIFIER
No documentation provided. -
EXTERNAL FUNCTION ASSIGNMENT
No documentation provided. -
EXTERNAL FUNCTION ASSIGNMENT-EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION BASIC-TYPE
No documentation provided. -
EXTERNAL FUNCTION BIT-INVERSION
No documentation provided. -
EXTERNAL FUNCTION BITWISE-AND
No documentation provided. -
EXTERNAL FUNCTION BOOLEAN-CONSTANT
No documentation provided. -
EXTERNAL FUNCTION BREAK
No documentation provided. -
EXTERNAL FUNCTION CALL-MODIFIER
No documentation provided. -
EXTERNAL FUNCTION CASE-LABEL
No documentation provided. -
EXTERNAL FUNCTION COMPOUND-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION CONDITION
No documentation provided. -
EXTERNAL FUNCTION CONDITION-DECLARATOR
No documentation provided. -
EXTERNAL FUNCTION CONDITIONAL
No documentation provided. -
EXTERNAL FUNCTION CONDITIONAL-EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION CONSTANT-EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION CONTINUE
No documentation provided. -
EXTERNAL FUNCTION DECIMAL-TOKEN
No documentation provided. -
EXTERNAL FUNCTION DECLARATION
No documentation provided. -
EXTERNAL FUNCTION DECREMENT-MODIFIER
No documentation provided. -
EXTERNAL FUNCTION DISCARD
No documentation provided. -
EXTERNAL FUNCTION DIVISION
No documentation provided. -
EXTERNAL FUNCTION DO-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION EQUAL
No documentation provided. -
EXTERNAL FUNCTION EXCLUSIVE-OR
No documentation provided. -
EXTERNAL FUNCTION EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION EXPRESSION-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION FIELD-MODIFIER
No documentation provided. -
EXTERNAL FUNCTION FLOAT-CONSTANT
No documentation provided. -
EXTERNAL FUNCTION FLOAT-TOKEN
No documentation provided. -
EXTERNAL FUNCTION FOR-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION FUNCTION-DECLARATION
No documentation provided. -
EXTERNAL FUNCTION FUNCTION-DEFINITION
No documentation provided. -
EXTERNAL FUNCTION FUNCTION-PROTOTYPE
No documentation provided. -
EXTERNAL FUNCTION GREATER-EQUAL-THAN
No documentation provided. -
EXTERNAL FUNCTION GREATER-THAN
No documentation provided. -
EXTERNAL FUNCTION HEXADECIMAL-TOKEN
No documentation provided. -
EXTERNAL FUNCTION IDENTIFIER
No documentation provided. -
EXTERNAL FUNCTION IDENTIFIER-TOKEN
No documentation provided. -
EXTERNAL FUNCTION INCLUSIVE-OR
No documentation provided. -
EXTERNAL FUNCTION INCREMENT-MODIFIER
No documentation provided. -
EXTERNAL FUNCTION INITIALIZER
No documentation provided. -
EXTERNAL FUNCTION INSTANCE-NAME
No documentation provided. -
EXTERNAL FUNCTION INTEGER-CONSTANT
No documentation provided. -
EXTERNAL FUNCTION INTEGER-TOKEN
No documentation provided. -
EXTERNAL FUNCTION INTERFACE-DECLARATION
No documentation provided. -
EXTERNAL FUNCTION INTERPOLATION-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION INVARIANT-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION INVERSION
No documentation provided. -
EXTERNAL FUNCTION ITERATION-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION JUMP-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION KEYWORD-TOKEN
No documentation provided. -
EXTERNAL FUNCTION LAYOUT-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION LAYOUT-QUALIFIER-ID
No documentation provided. -
EXTERNAL FUNCTION LEFT-SHIFT
No documentation provided. -
EXTERNAL FUNCTION LESS-EQUAL-THAN
No documentation provided. -
EXTERNAL FUNCTION LESS-THAN
No documentation provided. -
EXTERNAL FUNCTION LOGICAL-AND
No documentation provided. -
EXTERNAL FUNCTION LOGICAL-OR
No documentation provided. -
EXTERNAL FUNCTION LOGICAL-XOR
No documentation provided. -
EXTERNAL FUNCTION MODIFIED-REFERENCE
No documentation provided. -
EXTERNAL FUNCTION MODULUS
No documentation provided. -
EXTERNAL FUNCTION MULTIPLE-EXPRESSIONS
No documentation provided. -
EXTERNAL FUNCTION MULTIPLICATION
No documentation provided. -
EXTERNAL FUNCTION NEGATION
No documentation provided. -
EXTERNAL FUNCTION NOT-EQUAL
No documentation provided. -
EXTERNAL FUNCTION OCTAL-TOKEN
No documentation provided. -
EXTERNAL FUNCTION OPERATOR
No documentation provided. -
EXTERNAL FUNCTION PARAMETER-DECLARATION
No documentation provided. -
EXTERNAL FUNCTION POSTFIX-EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION PRECISE-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION PRECISION-DECLARATION
No documentation provided. -
EXTERNAL FUNCTION PRECISION-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION PREFIX-DECREMENT
No documentation provided. -
EXTERNAL FUNCTION PREFIX-INCREMENT
No documentation provided. -
EXTERNAL FUNCTION PREPROCESSOR-DIRECTIVE
No documentation provided. -
EXTERNAL FUNCTION PREPROCESSOR-TOKEN
No documentation provided. -
EXTERNAL FUNCTION PRIMARY-EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION REFERENCE-MODIFIER
No documentation provided. -
EXTERNAL FUNCTION RETURN
No documentation provided. -
EXTERNAL FUNCTION RIGHT-SHIFT
No documentation provided. -
EXTERNAL FUNCTION SAME-+
No documentation provided. -
EXTERNAL FUNCTION SELECTION-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION SHADER
No documentation provided. -
EXTERNAL FUNCTION SIMPLE-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION STATEMENT
No documentation provided. -
EXTERNAL FUNCTION STORAGE-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION STRUCT-DECLARATION
No documentation provided. -
EXTERNAL FUNCTION STRUCT-DECLARATOR
No documentation provided. -
EXTERNAL FUNCTION STRUCT-FIELD-DECLARATOR
No documentation provided. -
EXTERNAL FUNCTION STRUCT-SPECIFIER
No documentation provided. -
EXTERNAL FUNCTION SUBROUTINE-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION SUBTRACTION
No documentation provided. -
EXTERNAL FUNCTION SWITCH-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION TOKEN
No documentation provided. -
EXTERNAL FUNCTION TOKENIZE
No documentation provided. -
EXTERNAL FUNCTION TYPE-NAME
No documentation provided. -
EXTERNAL FUNCTION TYPE-QUALIFIER
No documentation provided. -
EXTERNAL FUNCTION TYPE-SPECIFIER
No documentation provided. -
EXTERNAL FUNCTION TYPE-SPECIFIER-NONARRAY
No documentation provided. -
EXTERNAL FUNCTION UNARY-EXPRESSION
No documentation provided. -
EXTERNAL FUNCTION VARIABLE-DECLARATION
No documentation provided. -
EXTERNAL FUNCTION VARIABLE-INITIALIZER
No documentation provided. -
EXTERNAL FUNCTION WHILE-STATEMENT
No documentation provided. -
EXTERNAL FUNCTION WHITESPACE
No documentation provided. -
EXTERNAL FUNCTION [
No documentation provided. -
EXTERNAL FUNCTION ]
No documentation provided. -
EXTERNAL FUNCTION ^
No documentation provided. -
EXTERNAL FUNCTION ^=
No documentation provided. -
EXTERNAL FUNCTION ^^
No documentation provided. -
EXTERNAL FUNCTION {
No documentation provided. -
EXTERNAL FUNCTION |
No documentation provided. -
EXTERNAL FUNCTION |=
No documentation provided. -
EXTERNAL FUNCTION ||
No documentation provided. -
EXTERNAL FUNCTION }
No documentation provided.