.cfg Files

This page describes technical information about the structure and syntax of configuration files (.cfg files) under legoHDL.

legoHDL stores and retrieves data from files with a .cfg extension. This file structure has been pre-existing and loosely defined here on wikipedia. Some differences/unique features will be highlighted on this page relating to how legoHDL interprets these file types.

Syntax

  • Keys and sections are case-insensitive.
  • leading and trailing whitespace is trimmed from keys and regular values (indentation is ignored).

Grammar

  • Sections must be on their own line (ignoring leading whitespace).
  • A key declaration must be the beginning of a line (ignoring leading whitespace).

Structure

There are 4 components to legoHDL cfg files:

  • comments
  • sections
  • keys
  • values

Comments

Single-line comments are supported and must begin with a ;.

; a comment!

Sections

Sections are enclosed with [ ]. Sections must be defined on their own line. Sections can be nested up to 2 levels; begin a section with [. instead of [ to signify this section is nested within the immediately previously declared section.

[workspace]


[.lab] ; flattens out to section "workspace.lab"

Keys

Keys must be the first thing on a new line and followed by a =. Keys must be a single word wihout spaces. Keys are used to define values.

public-key = 42942

secret-key = 30

Values

Values are WYSIWYG. There are three types of value intpretations: basic literals, string literals, and lists.

Basic literals

A basic literal evaluates as a string and is not encapsulated by any delimiters. Leading and trailing whitespace is trimmed. A new-line within a basic literal is converted into a space. This design implementation allows for neater formatting, increasing user readability.

basic-key = What you see is what you get!

summary = This is a long block of text. In order to keep readability a priority, 
          newlines will be treated as a space and the leading whitespace for
          each line will be ignored.

String literals

A string literal evaluates as a string and allows for any character to be stored within the string except the delimiting character (").

; a key that captures the ';' character
true-key = "Do not touch; this is important!"

; a key that captures the '=' character
question = "Does P = NP ?"

Lists

A list evaulates each item as either a string literal or basic literal. The value must begin with a ( character and end with a ) character. Items are separated by a , character.

; this key lists items of basic literals
list-key = (item1, item2, item3)

; this stores a combination of string literals and basic literals
combo-key = (
    "0",
    200,
    "1",
    300
)