FiM++ Wiki

Reports are collections of code in FiM++. A report contains all the code that will be run, as well as basic information about the program.


A report must have the following:

  • A name
  • A addressee (another report from which it gets basic paragraphs)
  • A beginning
  • An end
  • The programmer's name

Related Phrases[]

  • Addressee specification
    • Dear
  • Interface listing
    • and
  • Report Ending
    • Your faithful student



Each report name has the following restrictions:


Each report name also has the following freedoms:

  • There is no hard limit on the length
  • May have any whitespace character in them
  • May contain literals, as long as they are not at the beginning of the name
  • May contain apostrophes
  • Encoded in UTF-8


Here are some examples of good report names:

  • Princess Celestia
  • Fancy Mathematics
    • Report names don't have to start with "Princess", or even be a character's name.
  • Applejack's Drinking Song
    • Even though ' is used to declare character literals, it is used in the middle of a name, so it is okay.
  • True Facts
    • Even though true is a literal, FiM++ is case-sensitive, so True is valid for report naming.
  • Lesson 0
    • Even though 0 is always a literal, it is not the at the beginning of the name, so it's okay.

Here are some examples of bad report names:

  • A story I learned
    • I learned is always a keyword, so this will not compile.
    • The compiler sees that a keyword has been used and ends the report name, then does not see a punctuation mark and, furthermore, does not know what to do with the I learned phrase.
    • The compiler would throw an Unexpected Token Error
  • Hay, Celly!
    • compiler thinks "," is the end of the report name "Hay", and doesn't know what to do with the word "Celly"
    • The compiler would throw a Malformed Sentence Error, because "Celly" is not a complete sentence
  • 'Sup
    • ' is used to start a character literal, so the compiler sees this as an unclosed character literal.
    • The compiler would throw both an Unexpected Token Error an Unclosed Character Literal Error
  • 99 Jugs of Cider
    • 99 is always a literal, so it cannot be the beginning of a report name.
    • The compiler would throw an Unexpected Token Error

The Addressee[]

Every report must have an addressee. If a report does not explicitly define an addressee, then it will not compile. The only report that does not have an addressee is the base report Princess Celestia. If you don't want to define a new addressee, use Princess Celestia.


Reports must be written in the following structure:

(Optional imports; any number)
Addressee specification; exactly one
(Optional interfaces)
Report declaration; exactly one
(Optional paragraphs; any amount)
Report closing; exactly one
Author name comment; exactly one


Icon Info.png
Mane article: Imports



Global variables[]

Icon Info.png
Mane article: variables

Any variable declared inside the report that is not declared in a paragraph is a global variable. That is to say, it can be accessed from any report paragraph at any time


Icon Info.png
Mane article: Paragraphs

Paragraphs contain most of the code inside a report that runs


Reports must be closed using the text Your faithful student, followed by a punctuation, followed by the programmer's name, followed by another punctuation. The programmer's name is a special comment, in that it is automatically started, ended with punctuation, and can be inserted into the final compiled file unchanged.

Your faithful student<punctuation> Programmer's name<punctuation>

See Also[]