In the design of ENIGMA's compiler, the parser is the collection of sources responsible for translating EDL into C++. For efficiency reasons, the parser is divided into four segments that are unidirectionally dependent.
|C Parser||Reads C headers to determine available functions, types, and macros. This parser has no dependencies.|
|Type resolver||A stack-based parser meant to determine the type of a given expression based on the results of the C parser.|
|Syntax checker||A lexless pass that reads over code to find simple syntax errors. It cannot determine errors in types due to ENIGMA's lax typing system, but by using results from the C parser, it can determine which statements are declarations and which functions are passed the correct number of parameters.|
|Formatter||A parser/lexer designed to add missing marks of punctuation, including parentheses around control statements, missing semicolons, missing colons (after case labels and in ternary operators), and in some cases, spacing.|