// -*- coding: utf-8; indent-tabs-mode: nil -*-
\PROGRAM {The Pseudocode Lexer} \IS

  /*
   * The program is here, but it also could be an \ALGORITHM
   *
   * /* YES! Nested multi-line comments work! */
   */

  \PROC {A Procedure name} \IS
    \TBLOCK {A text block 1}
    \TBLOCK {A text block 2 with a nested expression: \expr{flag is FALSE}}
    \BLOCK {
        \REMARK  A remark on its own line within a "BLOCK"
    }
  \END-PROC {A Procedure name}

  \FUNCTION{A Function with {escaped\} text} \IS
    a and b xor (c in d)      \rem this is another remark
    \block {foo bar}

    \IF a is nil \THEN
      \text{Set something}
    \ELSEIF
      \text{Set some other thing}
    \END-IF
  \END FUNCTION{A Function with {escaped\} text}

  \CLASS{A Class} \IS
    // This is a one-line comment
    a and b xor (c in d)      \rem this is another remark

    # This is another one-line comment

    (* Here is a "block" of expressions.
       A block has a leading symbol. *)
    \block {foo
      bar}
    \block{a 1.2 {x in X\} c}
    (* Analogous there is a variant that is in text-mode by default.
       It has an other leading symbol. *)
    \tstate{We will compute next \expr{a xor b or (\text{set} X is Empty)} \rem without c!
      or multiply it the other way round}

    \tstate{foo bar     \rem A remark within a text statement until LF!
      nextfoo nextbar
      nextnextfoo nextnextbar}
  \ENDCLASS{A Class}

  @A_XXX
  FOO BAR
\ENDPROG
