SHELL_SCRIPT
  PsiComment(Comment)('#error markers must be present, but the incomplete if should be parsed without remaining elements')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    FOR_COMMAND
      PsiElement(for)('for')
      PsiWhiteSpace(' ')
      FOR_CLAUSE
        PsiElement(word)('i')
        PsiWhiteSpace(' ')
        PsiElement(in)('in')
        PsiWhiteSpace(' ')
        NUMBER
          PsiElement(int)('1')
        PsiWhiteSpace(' ')
        NUMBER
          PsiElement(int)('2')
        PsiWhiteSpace(' ')
        NUMBER
          PsiElement(int)('3')
        PsiWhiteSpace(' ')
        NUMBER
          PsiElement(int)('4')
        PsiWhiteSpace(' ')
        NUMBER
          PsiElement(int)('5')
        LIST_TERMINATOR
          PsiElement(\n)('\n')
      DO_BLOCK
        PsiElement(do)('do')
        COMPOUND_LIST
          PsiElement(\n)('\n')
          PsiWhiteSpace('   ')
          SIMPLE_COMMAND
            GENERIC_COMMAND_DIRECTIVE
              LITERAL
                PsiElement(word)('echo')
            PsiWhiteSpace(' ')
            STRING
              PsiElement(OPEN_QUOTE)('"')
              PsiElement(STRING_CONTENT)('Welcome ')
              VARIABLE
                PsiElement(var)('$i')
              PsiElement(STRING_CONTENT)(' times')
              PsiElement(CLOSE_QUOTE)('"')
          PsiElement(\n)('\n')
        PsiElement(done)('done')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    FOR_COMMAND
      PsiElement(for)('for')
      PsiWhiteSpace(' ')
      FOR_CLAUSE
        PsiElement(word)('f')
        PsiWhiteSpace(' ')
        PsiElement(in)('in')
        PsiWhiteSpace(' ')
        PsiElement(word)('a')
        LIST_TERMINATOR
          PsiElement(;)(';')
      PsiWhiteSpace(' ')
      DO_BLOCK
        PsiElement(do)('do')
        COMPOUND_LIST
          PsiErrorElement:<pipeline command> or '\n' expected, got ';'
            PsiElement(;)(';')
        PsiWhiteSpace(' ')
        PsiElement(done)('done')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    IF_COMMAND
      PsiElement(if)('if')
      PsiWhiteSpace(' ')
      COMPOUND_LIST
        CONDITIONAL_COMMAND
          PsiElement([)('[')
          PsiWhiteSpace(' ')
          ASSIGNMENT_CONDITION
            LITERAL_CONDITION
              STRING
                PsiElement(OPEN_QUOTE)('"')
                PsiElement(STRING_CONTENT)('foo')
                PsiElement(CLOSE_QUOTE)('"')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LITERAL_CONDITION
              STRING
                PsiElement(OPEN_QUOTE)('"')
                PsiElement(STRING_CONTENT)('foo')
                PsiElement(CLOSE_QUOTE)('"')
          PsiWhiteSpace(' ')
          PsiElement(])(']')
        PsiElement(;)(';')
      PsiWhiteSpace(' ')
      THEN_CLAUSE
        PsiElement(then)('then')
        COMPOUND_LIST
          PsiElement(\n)('\n')
          PsiWhiteSpace('    ')
          SIMPLE_COMMAND
            GENERIC_COMMAND_DIRECTIVE
              LITERAL
                PsiElement(word)('echo')
            PsiWhiteSpace(' ')
            NUMBER
              PsiElement(int)('1')
          PsiElement(\n)('\n')
      PsiElement(fi)('fi')
    PsiElement(;)(';')