Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
109 lines (83 sloc) 3.18 KB
module languages/ansi-c/syntax/Declarations
%% The syntax of abstract declarators and declarators is so similar, that
%% we could make a parameterized module for them:
imports languages/ansi-c/syntax/Declarators[Declarator Identifier]
imports languages/ansi-c/syntax/Declarators[AbstractDeclarator AnonymousIdentifier]
imports languages/ansi-c/syntax/Identifiers
imports languages/ansi-c/syntax/Expressions
exports
sorts Declaration InitDeclarator Specifier StructDeclaration StructDeclarator Parameters MoreParameters
sorts Initializer TypeName Pointer Enumerator AbstractDeclarator Declarator Parameter
context-free syntax
Specifier+ {InitDeclarator ","}+ ";" -> Declaration
Specifier+ ";" -> Declaration {avoid}
context-free syntax
Declarator -> InitDeclarator
Declarator "=" Initializer -> InitDeclarator
context-free syntax
Identifier -> Specifier
"typedef" -> Specifier
"extern" -> Specifier
"static" -> Specifier
"auto" -> Specifier
"register" -> Specifier
"void" -> Specifier
"char" -> Specifier
"short" -> Specifier
"int" -> Specifier
"long" -> Specifier
"float" -> Specifier
"double" -> Specifier
"signed" -> Specifier
"unsigned" -> Specifier
"const" -> Specifier
"volatile" -> Specifier
context-free syntax
"struct"|"union" Identifier "{" StructDeclaration+ "}" -> Specifier
"struct"|"union" "{" StructDeclaration+ "}" -> Specifier
"struct"|"union" Identifier -> Specifier
context-free syntax
"enum" "{" {Enumerator ","}+ "}" -> Specifier
"enum" Identifier "{" {Enumerator ","}+ "}" -> Specifier
"enum" Identifier -> Specifier
lexical restrictions
"return" -/- [0-9a-zA-Z\_]
"enum" -/- [0-9a-zA-Z\_]
"struct" | "union" -/- [0-9a-zA-Z\_]
context-free syntax
Specifier+ {StructDeclarator ","}+ ";" -> StructDeclaration
context-free syntax
Declarator -> StructDeclarator
":" Expression -> StructDeclarator
Declarator ":" Expression -> StructDeclarator
context-free syntax
Identifier -> Enumerator
Identifier "=" Expression -> Enumerator
context-free syntax
("*" Specifier*)+ -> Pointer
context-free syntax
{Parameter ","}+ MoreParameters? -> Parameters
context-free syntax
"," "..." -> MoreParameters
context-free syntax
Specifier+ Declarator -> Parameter
Specifier+ AbstractDeclarator -> Parameter
context-free syntax
Specifier+ AbstractDeclarator -> TypeName
context-free syntax
Expression -> Initializer
"{" {Initializer ","}+ ","? "}" -> Initializer
%% The , needs some extra attention, in order to give the initializer
%% separator and actual argument separator a higher priority than the
%% left associative comma expression.
context-free syntax
%% for documentation purposes we repeat here a production that is
%% otherwise also generated by the normalizer from {Expression ","}+
Expression -> {Expression ","}+
context-free priorities
Expression -> Initializer >
Expression "," Expression -> Expression,
Expression -> {Expression ","}+ >
Expression "," Expression -> Expression,
Identifier "=" Expression -> Enumerator >
Expression "," Expression -> Expression