SHELL_SCRIPT
  PsiComment(Comment)('#the following code is invalid code, it is parsed completely though')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    WHILE_COMMAND
      PsiElement(while)('while')
      PsiWhiteSpace(' ')
      COMPOUND_LIST
        GENERIC_COMMAND_DIRECTIVE
          LITERAL
            PsiElement(word)('a')
        PsiElement(;)(';')
      PsiWhiteSpace(' ')
      DO_BLOCK
        PsiElement(do)('do')
        PsiWhiteSpace(' ')
        COMPOUND_LIST
          PsiErrorElement:<pipeline command> or '\n' expected, got ';'
            PsiElement(;)(';')
        PsiWhiteSpace(' ')
        PsiElement(done)('done')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    WHILE_COMMAND
      PsiElement(while)('while')
      PsiWhiteSpace(' ')
      COMPOUND_LIST
        PsiErrorElement:<pipeline command> or '\n' expected, got ';'
          PsiElement(;)(';')
      PsiWhiteSpace(' ')
      DO_BLOCK
        PsiElement(do)('do')
        PsiWhiteSpace(' ')
        COMPOUND_LIST
          PsiErrorElement:<pipeline command> or '\n' expected, got ';'
            PsiElement(;)(';')
        PsiWhiteSpace(' ')
        PsiElement(done)('done')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    SIMPLE_COMMAND
      GENERIC_COMMAND_DIRECTIVE
        LITERAL
          PsiElement(word)('echo')
      PsiWhiteSpace(' ')
      STRING
        PsiElement(OPEN_QUOTE)('"')
        PsiElement(STRING_CONTENT)('Example text')
        PsiElement(CLOSE_QUOTE)('"')
  PsiElement(\n)('\n')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    WHILE_COMMAND
      PsiElement(while)('while')
      PsiWhiteSpace(' ')
      COMPOUND_LIST
        GENERIC_COMMAND_DIRECTIVE
          LITERAL
            PsiElement(word)('a')
        PsiElement(;)(';')
      PsiWhiteSpace(' ')
      DO_BLOCK
        PsiElement(do)('do')
        PsiWhiteSpace(' ')
        COMPOUND_LIST
          GENERIC_COMMAND_DIRECTIVE
            LITERAL
              PsiElement(word)('b')
          PsiElement(;)(';')
        PsiWhiteSpace(' ')
        PsiElement(done)('done')