Errors that can occur when generating source code from an ASN.1 source specification take two forms: syntax errors and semantics errors.
Syntax errors are errors in the ASN.1 source specification itself. These occur when the rules specified in the ASN.1 grammar are not followed. ASN1C will flag these types of errors with the error message ‘Syntax Error’ and abort compilation on the source file. The offending line number will be provided. The user can re-run the compilation with the ‘-l’ flag specified to see the lines listed as they are parsed. This can be quite helpful in tracking down a syntax error.
The most common types of syntax errors are as follows:
Invalid case on identifiers: module name must begin with an uppercase letter, productions (types) must begin with an uppercase letter, and element names within constructors (SEQUENCE, SET, CHOICE) must begin with lowercase letters.
Elements within constructors not properly delimited with commas: either a comma is omitted at the end of an element declaration, or an extra comma is added at the end of an element declaration before the closing brace.
Invalid special characters: only letters, numbers, and the hyphen (-) character are allowed. The use of the underscore character (_) in identifiers is not allowed in ASN.1, but is allowed in C. Since C does not allow hyphens in identifiers, ASN1C converts all hyphens in an ASN.1 specification to underscore characters in the generated code.
Semantics errors occur on the compiler back-end as the code is being generated. In this case, parsing was successful, but the compiler does not know how to generate the code. These errors are flagged by embedding error messages directly in the generated code. The error messages always begin with an identifier with the prefix ‘%ASN-’, so a search can be done for this string in order to find the locations of the errors. A single error message is output to stderr after compilation on the unit is complete to indicate error conditions exist.