================================================================================
Comment kinds and structured parameter fields
================================================================================
#!/usr/bin/env too
# Plain.
#@ Module.
##! Important item documentation.
## Item.
## @param _ Input.
##@param style Preferred style.
agic(_: Text, style?: Text):
  pass

---

(program
  (shebang_comment)
  (plain_comment)
  (program_doc
    (text))
  (item_doc
    (text))
  (item_doc
    (text))
  (param_doc
    (param_name)
    (text))
  (param_doc
    (param_name)
    (text))
  (agic
    (params
      (param
        (param_name)
        (type
          (builtin_type)))
      (param
        (param_name)
        (type
          (builtin_type))))
    (newline)
    (agic_body
      (newline))))

================================================================================
Empty docs and non-reserved parameter-like prose
================================================================================
##
#@
##!
## @parameter Text.
## Use @param in prose.
#@ @param _ Plain program text.
flow:
  pass

---

(program
  (item_doc)
  (program_doc)
  (item_doc
    (text))
  (item_doc
    (text))
  (item_doc
    (text))
  (program_doc
    (text))
  (flow
    (newline)
    (flow_body
      (newline))))

================================================================================
Indented documentation, inline comments and literal markers
================================================================================
flow work: #@ Inline plain.
  ##! Important nested comment.
  run:
    #@ Literal program marker.
    ## @param _ Literal tag.
    ##! Literal punctuation.
#@ Next program contribution.
flow next:
  pass

---

(program
  (flow
    (runnable_name)
    (plain_comment)
    (newline)
    (flow_body
      (item_doc
        (text))
      (run_statement
        (inline_agic
          (newline)
          (content
            (text)
            (newline)
            (text)
            (newline)
            (text)
            (newline))))))
  (program_doc
    (text))
  (flow
    (runnable_name)
    (newline)
    (flow_body
      (newline))))

================================================================================
Malformed parameter tag preserves following declaration
================================================================================
## @param name? Invalid optional marker.
flow next:
  pass

---

(program
  (ERROR
    (param_name))
  (blank_line)
  (flow
    (runnable_name)
    (newline)
    (flow_body
      (newline))))
