formal syntax
cifFile = {{blank} [command] semi} endCmd {blank}.
command = primCmd | defDeleteCmd |
defStartCmd semi {{blank} [primCmd] semi} defFinishCmd.
primCmd = polygonCmd | boxCmd | roundFlashCmd | wireCmd
| layerCmd | callCmd | userExtensionCmd | commentCmd.
polygonCmd = "P" path.
boxCmd = "B" integer sep integer sep point [sep point].
roundFlashCmd = "R" integer sep point.
wireCmd = "W" integer sep path.
layerCmd = "L" {blank} shortname.
defStartCmd = "D" {blank} "S" integer [sep integer sep integer].
defFinishCmd = "D" {blank} "F".
defDeleteCmd = "D" {blank} "D" integer.
callCmd = "C" integer transformation.
userExtensionCmd= digit userText.
commentCmd = "(" commentText ")".
endCommand = "E".
transformation = {{blank} (
"T" point | "M" {blank} "X" | "M" {blank} "Y" | "R" point)}.
path = point {sep point}.
point = sInteger sep sInteger.
sInteger = {sep} ["-"] integerD.
integer = {sep} integerD.
integerD = digit {digit}.
shortname = c[c][c][c].
c = digit | upperChar
userText = {userChar}.
commentText = {commentChar} | commentText "(" commentText ")" commentText.
semi = {blank} ";" {blank}.
sep = upperChar | blank.
digit = "0" | .. | "9".
upperChar = "A" | .. | "Z".
blank = any ASCII char except digit, upperChar, "-", "(", ")", or ";".
userChar = any ASCII char except ";".
commentChar = any ASCII char except "(", or ")".