Skip to content

Instantly share code, notes, and snippets.

@antonijn
Last active November 16, 2015 01:48
Show Gist options
  • Save antonijn/72c10eeecf6503b6b3f0 to your computer and use it in GitHub Desktop.
Save antonijn/72c10eeecf6503b6b3f0 to your computer and use it in GitHub Desktop.
The C language in a nutshell. Any questions?
element = declaration | "typedef", declaration | implementation
declaration = pending type, finisher, { ",", finisher }, ";"
implementation = pending type, finisher, "(", param list, ")", scope
pending type = primitive | structure | enumeration | defined type
finisher = ["*", finisher | "(", finisher, ")", "(", param list, ")" | identifier]
param list = ["void" | parameter, { ",", parameter }]
parameter = pending type, finisher
primitive = integer | floating
integer =
"long", integer | "short", integer | "unsigned", integer | "signed", integer |
"int" | "long" | "short" | "char"
floating = "float" | "double" | "long", "double"
structure = "struct", identifier | "struct", [identifier], "{", { field }, "}"
field = pending type, finisher, ";"
enumeration = "enum", identifier | "enum", [identifier], "{", { enumerator, "," }, [ enumerator ], "}"
enumerator = identifier, [ "=", expression ]
statement =
";" |
expression, ";" |
"do", statement, "while", "(", expression, ")", ";", |
"while", "(", expression, ")", statement |
"if", "(", expression, ")", statement, ["else", statement] |
"for", "(", expression, ";", expression, ";" expression, ")", statement |
"return", expression, ";" |
"return", ";" |
"break", ";" |
"continue", ";" |
scope
scope = "{", {declaration}, {statement}, "}"
expression =
literal |
identifier |
expression, ".", identifier |
expression, "->", identifier |
expression, "(", [expression, {",", expression}], ")" |
expression, operator, expression |
"(", expression, ")" |
"*", expression |
"&", expression
identifier = ('aA'..'zZ' | '_'), {'aA'..'zZ'|'_'|'0'..'9'}
literal =
"\"", { char }, "\"" |
"0", octchar, {octchar} |
"0x", hexchar, {hexchar} |
decchar, {decchar} |
"'", char, "'"
octchar = '0'..'7'
hexchar = '0'..'9' | 'aA'..'fF'
decchar = '0'..'9'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment