#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int EOF;
int getchar();
int /*<<< orphan*/ printf(char *, int);
int main(void) {
  int ch = 0, prev = 0, codes = 0, in_parentheses = 0, in_braces = 0,
      in_brackets = 0, in_comment = 0, in_string = 0, in_single_quotes = 0,
      pairs[1024];
  while ((ch = getchar()) != EOF) {
    if ((ch == '*') && (prev == '/') && !in_comment && !in_string) {
      in_comment = 1;
      pairs[codes++] = 2;
    } else if ((ch == '/') && (prev == '*') && in_comment) {
      in_comment = 0;
    } else if ((ch == '\"') && (prev != '\\') && !in_comment &&
               !in_single_quotes) {
      in_string = (in_string ? 0 : 1);
      pairs[codes++] = 3;
    } else if ((ch == '\'') && (prev != '\\') && !in_comment && !in_string) {
      in_single_quotes = (in_single_quotes ? 0 : 1);
      pairs[codes++] = 4;
    } else if (!in_comment && !in_string && !in_single_quotes) {
      if (ch == '(') {
        --in_parentheses;
        pairs[codes++] = 5;
      }
      in_parentheses += (ch == ')');
      if (ch == '{') {
        --in_braces;
        pairs[codes++] = 6;
      }
      in_braces += (ch == '}');
      if (ch == '[') {
        --in_brackets;
        pairs[codes++] = 7;
      }
      in_brackets += (ch == ']');
    }
    prev = ch;
  }
  for (int code = 0; code < codes; ++code) {
    if ((pairs[code] == 2) && in_comment)
      printf("%d. Unclosed comment\n", code + 1);
    else if ((pairs[code] == 3) && in_string)
      printf("%d. Unbalanced double quotes\n", code + 1);
    else if ((pairs[code] == 4) && in_single_quotes)
      printf("%d. Unbalanced single quotes\n", code + 1);
    else if ((pairs[code] == 5) && in_parentheses)
      printf("%d. Unbalanced parentheses\n", code + 1);
    else if ((pairs[code] == 6) && in_braces)
      printf("%d. Unbalanced braces\n", code + 1);
    else
      printf("%d. Unbalanced brackets\n", code + 1);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1040,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %eax,-0x8(%rbp)
mov    0x2e66(%rip),%rcx
cmp    (%rcx),%eax
je     13a4 <main+0x284>
cmpl   $0x2a,-0x8(%rbp)
jne    11d6 <main+0xb6>
cmpl   $0x2f,-0xc(%rbp)
jne    11d6 <main+0xb6>
cmpl   $0x0,-0x20(%rbp)
jne    11d6 <main+0xb6>
cmpl   $0x0,-0x24(%rbp)
jne    11d6 <main+0xb6>
movl   $0x1,-0x20(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x10(%rbp)
cltq
movl   $0x2,-0x1030(%rbp,%rax,4)
jmp    1399 <main+0x279>
cmpl   $0x2f,-0x8(%rbp)
jne    1200 <main+0xe0>
cmpl   $0x2a,-0xc(%rbp)
jne    1200 <main+0xe0>
cmpl   $0x0,-0x20(%rbp)
je     1200 <main+0xe0>
movl   $0x0,-0x20(%rbp)
jmp    1394 <main+0x274>
cmpl   $0x22,-0x8(%rbp)
jne    1258 <main+0x138>
cmpl   $0x5c,-0xc(%rbp)
je     1258 <main+0x138>
cmpl   $0x0,-0x20(%rbp)
jne    1258 <main+0x138>
cmpl   $0x0,-0x28(%rbp)
jne    1258 <main+0x138>
mov    -0x24(%rbp),%edx
mov    $0x1,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x10(%rbp)
cltq
movl   $0x3,-0x1030(%rbp,%rax,4)
jmp    138f <main+0x26f>
cmpl   $0x27,-0x8(%rbp)
jne    12b0 <main+0x190>
cmpl   $0x5c,-0xc(%rbp)
je     12b0 <main+0x190>
cmpl   $0x0,-0x20(%rbp)
jne    12b0 <main+0x190>
cmpl   $0x0,-0x24(%rbp)
jne    12b0 <main+0x190>
mov    -0x28(%rbp),%edx
mov    $0x1,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x10(%rbp)
cltq
movl   $0x4,-0x1030(%rbp,%rax,4)
jmp    138a <main+0x26a>
cmpl   $0x0,-0x20(%rbp)
jne    1385 <main+0x265>
cmpl   $0x0,-0x24(%rbp)
jne    1385 <main+0x265>
cmpl   $0x0,-0x28(%rbp)
jne    1385 <main+0x265>
cmpl   $0x28,-0x8(%rbp)
jne    12f9 <main+0x1d9>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x10(%rbp)
cltq
movl   $0x5,-0x1030(%rbp,%rax,4)
cmpl   $0x29,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x7b,-0x8(%rbp)
jne    1336 <main+0x216>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x10(%rbp)
cltq
movl   $0x6,-0x1030(%rbp,%rax,4)
cmpl   $0x7d,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x5b,-0x8(%rbp)
jne    1373 <main+0x253>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x10(%rbp)
cltq
movl   $0x7,-0x1030(%rbp,%rax,4)
cmpl   $0x5d,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    138a <main+0x26a>
jmp    138f <main+0x26f>
jmp    1394 <main+0x274>
jmp    1399 <main+0x279>
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1171 <main+0x51>
movl   $0x0,-0x1034(%rbp)
mov    -0x1034(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    151c <main+0x3fc>
movslq -0x1034(%rbp),%rax
cmpl   $0x2,-0x1030(%rbp,%rax,4)
02
jne    13f6 <main+0x2d6>
cmpl   $0x0,-0x20(%rbp)
je     13f6 <main+0x2d6>
mov    -0x1034(%rbp),%esi
add    $0x1,%esi
lea    0xc14(%rip),%rdi
call   1030 <printf@plt>
jmp    1503 <main+0x3e3>
movslq -0x1034(%rbp),%rax
cmpl   $0x3,-0x1030(%rbp,%rax,4)
03
jne    142f <main+0x30f>
cmpl   $0x0,-0x24(%rbp)
je     142f <main+0x30f>
mov    -0x1034(%rbp),%esi
add    $0x1,%esi
lea    0xbf1(%rip),%rdi
call   1030 <printf@plt>
jmp    14fe <main+0x3de>
movslq -0x1034(%rbp),%rax
cmpl   $0x4,-0x1030(%rbp,%rax,4)
04
jne    1468 <main+0x348>
cmpl   $0x0,-0x28(%rbp)
je     1468 <main+0x348>
mov    -0x1034(%rbp),%esi
add    $0x1,%esi
lea    0xbd6(%rip),%rdi
call   1030 <printf@plt>
jmp    14f9 <main+0x3d9>
movslq -0x1034(%rbp),%rax
cmpl   $0x5,-0x1030(%rbp,%rax,4)
05
jne    14a1 <main+0x381>
cmpl   $0x0,-0x14(%rbp)
je     14a1 <main+0x381>
mov    -0x1034(%rbp),%esi
add    $0x1,%esi
lea    0xbbb(%rip),%rdi
call   1030 <printf@plt>
jmp    14f4 <main+0x3d4>
movslq -0x1034(%rbp),%rax
cmpl   $0x6,-0x1030(%rbp,%rax,4)
06
jne    14da <main+0x3ba>
cmpl   $0x0,-0x18(%rbp)
je     14da <main+0x3ba>
mov    -0x1034(%rbp),%esi
add    $0x1,%esi
lea    0xb9e(%rip),%rdi
call   1030 <printf@plt>
jmp    14ef <main+0x3cf>
mov    -0x1034(%rbp),%esi
add    $0x1,%esi
lea    0xb9b(%rip),%rdi
call   1030 <printf@plt>
jmp    14f4 <main+0x3d4>
jmp    14f9 <main+0x3d9>
jmp    14fe <main+0x3de>
jmp    1503 <main+0x3e3>
jmp    1508 <main+0x3e8>
mov    -0x1034(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1034(%rbp)
jmp    13ae <main+0x28e>
xor    %eax,%eax
add    $0x1040,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1018,%rsp
xor    %eax,%eax
call   1040 <getchar@plt>
mov    0x2ea9(%rip),%r14
cmp    (%r14),%eax
je     1368 <main+0x248>
xor    %r12d,%r12d
xor    %r13d,%r13d
xor    %ebp,%ebp
movl   $0x0,0x8(%rsp)
movl   $0x0,0xc(%rsp)
xor    %r15d,%r15d
xor    %ebx,%ebx
jmp    1197 <main+0x77>
nopw   0x0(%rax,%rax,1)
movslq %r15d,%rax
add    $0x1,%r15d
movl   $0x2,0x10(%rsp,%rax,4)
xor    %r13d,%r13d
mov    $0x1,%ebp
xor    %eax,%eax
call   1040 <getchar@plt>
cmp    (%r14),%eax
je     12aa <main+0x18a>
mov    %ebx,%ecx
mov    %eax,%ebx
cmp    $0x2f,%ecx
jne    11ae <main+0x8e>
cmp    $0x2a,%ebx
jne    11ae <main+0x8e>
test   %ebp,%ebp
jne    11ae <main+0x8e>
test   %r13d,%r13d
je     1170 <main+0x50>
cmp    $0x2a,%ecx
jne    11c0 <main+0xa0>
cmp    $0x2f,%ebx
jne    11c0 <main+0xa0>
test   %ebp,%ebp
je     11c0 <main+0xa0>
xor    %ebp,%ebp
jmp    1187 <main+0x67>
cmp    $0x5c,%ecx
je     11f4 <main+0xd4>
cmp    $0x22,%ebx
jne    11f4 <main+0xd4>
test   %ebp,%ebp
jne    11f4 <main+0xd4>
test   %r12d,%r12d
jne    11f4 <main+0xd4>
xor    %eax,%eax
test   %r13d,%r13d
sete   %al
movslq %r15d,%rcx
add    $0x1,%r15d
movl   $0x3,0x10(%rsp,%rcx,4)
xor    %ebp,%ebp
mov    %eax,%r13d
xor    %r12d,%r12d
jmp    1187 <main+0x67>
cmp    $0x5c,%ecx
je     122b <main+0x10b>
cmp    $0x27,%ebx
jne    122b <main+0x10b>
test   %ebp,%ebp
jne    122b <main+0x10b>
test   %r13d,%r13d
jne    122b <main+0x10b>
xor    %eax,%eax
test   %r12d,%r12d
sete   %al
movslq %r15d,%rcx
add    $0x1,%r15d
movl   $0x4,0x10(%rsp,%rcx,4)
xor    %ebp,%ebp
xor    %r13d,%r13d
mov    %eax,%r12d
jmp    1187 <main+0x67>
test   %ebp,%ebp
jne    1187 <main+0x67>
test   %r13d,%r13d
jne    1187 <main+0x67>
test   %r12d,%r12d
jne    1187 <main+0x67>
cmp    $0x28,%ebx
jne    1256 <main+0x136>
addl   $0xffffffff,0xc(%rsp)
mov    $0x5,%eax
jmp    1271 <main+0x151>
xor    %eax,%eax
cmp    $0x29,%ebx
sete   %al
add    %eax,0xc(%rsp)
cmp    $0x7b,%ebx
jne    1286 <main+0x166>
addl   $0xffffffff,0x8(%rsp)
mov    $0x6,%eax
movslq %r15d,%rcx
mov    %eax,0x10(%rsp,%rcx,4)
add    $0x1,%r15d
xor    %ebp,%ebp
xor    %r13d,%r13d
jmp    11ef <main+0xcf>
xor    %eax,%eax
cmp    $0x7d,%ebx
sete   %al
add    %eax,0x8(%rsp)
xor    %ebp,%ebp
cmp    $0x5b,%ebx
jne    127e <main+0x15e>
movslq %r15d,%rax
add    $0x1,%r15d
movl   $0x7,0x10(%rsp,%rax,4)
jmp    127e <main+0x15e>
test   %r15d,%r15d
jle    1368 <main+0x248>
mov    %r15d,%r15d
xor    %ebx,%ebx
lea    0xd41(%rip),%r14
jmp    12e7 <main+0x1c7>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbx
mov    %r14,%rdi
mov    %ebx,%esi
call   1030 <printf@plt>
cmp    %r15,%rbx
je     1368 <main+0x248>
mov    0x10(%rsp,%rbx,4),%eax
cmp    $0x2,%eax
jne    12f4 <main+0x1d4>
test   %ebp,%ebp
jne    12d0 <main+0x1b0>
cmp    $0x3,%eax
jne    1310 <main+0x1f0>
test   %r13d,%r13d
je     1310 <main+0x1f0>
add    $0x1,%rbx
lea    0xd0d(%rip),%rdi
jmp    12d7 <main+0x1b7>
nopl   0x0(%rax,%rax,1)
cmp    $0x4,%eax
jne    1327 <main+0x207>
test   %r12d,%r12d
je     1327 <main+0x207>
add    $0x1,%rbx
lea    0xd0f(%rip),%rdi
jmp    12d7 <main+0x1b7>
cmp    $0x5,%eax
jne    1340 <main+0x220>
cmpl   $0x0,0xc(%rsp)
je     1340 <main+0x220>
add    $0x1,%rbx
lea    0xd14(%rip),%rdi
jmp    12d7 <main+0x1b7>
add    $0x1,%rbx
cmp    $0x6,%eax
jne    135c <main+0x23c>
cmpl   $0x0,0x8(%rsp)
je     135c <main+0x23c>
lea    0xd17(%rip),%rdi
jmp    12d7 <main+0x1b7>
lea    0xd22(%rip),%rdi
jmp    12d7 <main+0x1b7>
xor    %eax,%eax
add    $0x1018,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@EOF = global i32 0
@.str = [22 x i8] c"%d. Unclosed comment\0A\00"
@.str.1 = [30 x i8] c"%d. Unbalanced double quotes\0A\00"
@.str.2 = [30 x i8] c"%d. Unbalanced single quotes\0A\00"
@.str.3 = [28 x i8] c"%d. Unbalanced parentheses\0A\00"
@.str.4 = [23 x i8] c"%d. Unbalanced braces\0A\00"
@.str.5 = [25 x i8] c"%d. Unbalanced brackets\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca [1024 x i32]
%12 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %3
store i32 0, i32* %4
store i32 0, i32* %5
store i32 0, i32* %6
store i32 0, i32* %7
store i32 0, i32* %8
store i32 0, i32* %9
store i32 0, i32* %10
br label %13
13: ; preds = %145, %0
%14 = call i32 (...) @getchar()
store i32 %14, i32* %2
%15 = load i32, i32* @EOF
%16 = icmp ne i32 %14, %15
br i1 %16, label %17, label %147
17: ; preds = %13
%18 = load i32, i32* %2
%19 = icmp eq i32 %18, 42
br i1 %19, label %20, label %34
20: ; preds = %17
%21 = load i32, i32* %3
%22 = icmp eq i32 %21, 47
br i1 %22, label %23, label %34
23: ; preds = %20
%24 = load i32, i32* %8
%25 = icmp ne i32 %24, 0
br i1 %25, label %34, label %26
26: ; preds = %23
%27 = load i32, i32* %9
%28 = icmp ne i32 %27, 0
br i1 %28, label %34, label %29
29: ; preds = %26
store i32 1, i32* %8
%30 = load i32, i32* %4
%31 = add nsw i32 %30, 1
store i32 %31, i32* %4
%32 = sext i32 %30 to i64
%33 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %32
store i32 2, i32* %33
br label %145
34: ; preds = %26, %23, %20, %17
%35 = load i32, i32* %2
%36 = icmp eq i32 %35, 47
br i1 %36, label %37, label %44
37: ; preds = %34
%38 = load i32, i32* %3
%39 = icmp eq i32 %38, 42
br i1 %39, label %40, label %44
40: ; preds = %37
%41 = load i32, i32* %8
%42 = icmp ne i32 %41, 0
br i1 %42, label %43, label %44
43: ; preds = %40
store i32 0, i32* %8
br label %144
44: ; preds = %40, %37, %34
%45 = load i32, i32* %2
%46 = icmp eq i32 %45, 34
br i1 %46, label %47, label %65
47: ; preds = %44
%48 = load i32, i32* %3
%49 = icmp ne i32 %48, 92
br i1 %49, label %50, label %65
50: ; preds = %47
%51 = load i32, i32* %8
%52 = icmp ne i32 %51, 0
br i1 %52, label %65, label %53
53: ; preds = %50
%54 = load i32, i32* %10
%55 = icmp ne i32 %54, 0
br i1 %55, label %65, label %56
56: ; preds = %53
%57 = load i32, i32* %9
%58 = icmp ne i32 %57, 0
%59 = zext i1 %58 to i64
%60 = select i1 %58, i32 0, i32 1
store i32 %60, i32* %9
%61 = load i32, i32* %4
%62 = add nsw i32 %61, 1
store i32 %62, i32* %4
%63 = sext i32 %61 to i64
%64 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %63
store i32 3, i32* %64
br label %143
65: ; preds = %53, %50, %47, %44
%66 = load i32, i32* %2
%67 = icmp eq i32 %66, 39
br i1 %67, label %68, label %86
68: ; preds = %65
%69 = load i32, i32* %3
%70 = icmp ne i32 %69, 92
br i1 %70, label %71, label %86
71: ; preds = %68
%72 = load i32, i32* %8
%73 = icmp ne i32 %72, 0
br i1 %73, label %86, label %74
74: ; preds = %71
%75 = load i32, i32* %9
%76 = icmp ne i32 %75, 0
br i1 %76, label %86, label %77
77: ; preds = %74
%78 = load i32, i32* %10
%79 = icmp ne i32 %78, 0
%80 = zext i1 %79 to i64
%81 = select i1 %79, i32 0, i32 1
store i32 %81, i32* %10
%82 = load i32, i32* %4
%83 = add nsw i32 %82, 1
store i32 %83, i32* %4
%84 = sext i32 %82 to i64
%85 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %84
store i32 4, i32* %85
br label %142
86: ; preds = %74, %71, %68, %65
%87 = load i32, i32* %8
%88 = icmp ne i32 %87, 0
br i1 %88, label %141, label %89
89: ; preds = %86
%90 = load i32, i32* %9
%91 = icmp ne i32 %90, 0
br i1 %91, label %141, label %92
92: ; preds = %89
%93 = load i32, i32* %10
%94 = icmp ne i32 %93, 0
br i1 %94, label %141, label %95
95: ; preds = %92
%96 = load i32, i32* %2
%97 = icmp eq i32 %96, 40
br i1 %97, label %98, label %105
98: ; preds = %95
%99 = load i32, i32* %5
%100 = add nsw i32 %99, -1
store i32 %100, i32* %5
%101 = load i32, i32* %4
%102 = add nsw i32 %101, 1
store i32 %102, i32* %4
%103 = sext i32 %101 to i64
%104 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %103
store i32 5, i32* %104
br label %105
105: ; preds = %98, %95
%106 = load i32, i32* %2
%107 = icmp eq i32 %106, 41
%108 = zext i1 %107 to i32
%109 = load i32, i32* %5
%110 = add nsw i32 %109, %108
store i32 %110, i32* %5
%111 = load i32, i32* %2
%112 = icmp eq i32 %111, 123
br i1 %112, label %113, label %120
113: ; preds = %105
%114 = load i32, i32* %6
%115 = add nsw i32 %114, -1
store i32 %115, i32* %6
%116 = load i32, i32* %4
%117 = add nsw i32 %116, 1
store i32 %117, i32* %4
%118 = sext i32 %116 to i64
%119 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %118
store i32 6, i32* %119
br label %120
120: ; preds = %113, %105
%121 = load i32, i32* %2
%122 = icmp eq i32 %121, 125
%123 = zext i1 %122 to i32
%124 = load i32, i32* %6
%125 = add nsw i32 %124, %123
store i32 %125, i32* %6
%126 = load i32, i32* %2
%127 = icmp eq i32 %126, 91
br i1 %127, label %128, label %135
128: ; preds = %120
%129 = load i32, i32* %7
%130 = add nsw i32 %129, -1
store i32 %130, i32* %7
%131 = load i32, i32* %4
%132 = add nsw i32 %131, 1
store i32 %132, i32* %4
%133 = sext i32 %131 to i64
%134 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %133
store i32 7, i32* %134
br label %135
135: ; preds = %128, %120
%136 = load i32, i32* %2
%137 = icmp eq i32 %136, 93
%138 = zext i1 %137 to i32
%139 = load i32, i32* %7
%140 = add nsw i32 %139, %138
store i32 %140, i32* %7
br label %141
141: ; preds = %135, %92, %89, %86
br label %142
142: ; preds = %141, %77
br label %143
143: ; preds = %142, %56
br label %144
144: ; preds = %143, %43
br label %145
145: ; preds = %144, %29
%146 = load i32, i32* %2
store i32 %146, i32* %3
br label %13
147: ; preds = %13
store i32 0, i32* %12
br label %148
148: ; preds = %226, %147
%149 = load i32, i32* %12
%150 = load i32, i32* %4
%151 = icmp slt i32 %149, %150
br i1 %151, label %152, label %229
152: ; preds = %148
%153 = load i32, i32* %12
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %154
%156 = load i32, i32* %155
%157 = icmp eq i32 %156, 2
br i1 %157, label %158, label %165
158: ; preds = %152
%159 = load i32, i32* %8
%160 = icmp ne i32 %159, 0
br i1 %160, label %161, label %165
161: ; preds = %158
%162 = load i32, i32* %12
%163 = add nsw i32 %162, 1
%164 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), i32 %163)
br label %225
165: ; preds = %158, %152
%166 = load i32, i32* %12
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %167
%169 = load i32, i32* %168
%170 = icmp eq i32 %169, 3
br i1 %170, label %171, label %178
171: ; preds = %165
%172 = load i32, i32* %9
%173 = icmp ne i32 %172, 0
br i1 %173, label %174, label %178
174: ; preds = %171
%175 = load i32, i32* %12
%176 = add nsw i32 %175, 1
%177 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.1, i64 0, i64 0), i32 %176)
br label %224
178: ; preds = %171, %165
%179 = load i32, i32* %12
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %180
%182 = load i32, i32* %181
%183 = icmp eq i32 %182, 4
br i1 %183, label %184, label %191
184: ; preds = %178
%185 = load i32, i32* %10
%186 = icmp ne i32 %185, 0
br i1 %186, label %187, label %191
187: ; preds = %184
%188 = load i32, i32* %12
%189 = add nsw i32 %188, 1
%190 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.2, i64 0, i64 0), i32 %189)
br label %223
191: ; preds = %184, %178
%192 = load i32, i32* %12
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %193
%195 = load i32, i32* %194
%196 = icmp eq i32 %195, 5
br i1 %196, label %197, label %204
197: ; preds = %191
%198 = load i32, i32* %5
%199 = icmp ne i32 %198, 0
br i1 %199, label %200, label %204
200: ; preds = %197
%201 = load i32, i32* %12
%202 = add nsw i32 %201, 1
%203 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %202)
br label %222
204: ; preds = %197, %191
%205 = load i32, i32* %12
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [1024 x i32], [1024 x i32]* %11, i64 0, i64 %206
%208 = load i32, i32* %207
%209 = icmp eq i32 %208, 6
br i1 %209, label %210, label %217
210: ; preds = %204
%211 = load i32, i32* %6
%212 = icmp ne i32 %211, 0
br i1 %212, label %213, label %217
213: ; preds = %210
%214 = load i32, i32* %12
%215 = add nsw i32 %214, 1
%216 = call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.4, i64 0, i64 0), i32 %215)
br label %221
217: ; preds = %210, %204
%218 = load i32, i32* %12
%219 = add nsw i32 %218, 1
%220 = call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.5, i64 0, i64 0), i32 %219)
br label %221
221: ; preds = %217, %213
br label %222
222: ; preds = %221, %200
br label %223
223: ; preds = %222, %187
br label %224
224: ; preds = %223, %174
br label %225
225: ; preds = %224, %161
br label %226
226: ; preds = %225
%227 = load i32, i32* %12
%228 = add nsw i32 %227, 1
store i32 %228, i32* %12
br label %148
229: ; preds = %148
ret i32 0
}

LLVM IR (-O2):
@EOF = global i32 0
@.str = [22 x i8] c"%d. Unclosed comment\0A\00"
@.str.1 = [30 x i8] c"%d. Unbalanced double quotes\0A\00"
@.str.2 = [30 x i8] c"%d. Unbalanced single quotes\0A\00"
@.str.3 = [28 x i8] c"%d. Unbalanced parentheses\0A\00"
@.str.4 = [23 x i8] c"%d. Unbalanced braces\0A\00"
@.str.5 = [25 x i8] c"%d. Unbalanced brackets\0A\00"
define i32 @main() {
%1 = alloca [1024 x i32]
%2 = bitcast [1024 x i32]* %1 to i8*
%3 = tail call i32 (...) @getchar()
%4 = load i32, i32* @EOF
%5 = icmp eq i32 %3, %4
br i1 %5, label %106, label %15
6: ; preds = %96
%7 = icmp sgt i32 %97, 0
br i1 %7, label %8, label %106
8: ; preds = %6
%9 = icmp ne i32 %100, 0
%10 = icmp ne i32 %101, 0
%11 = icmp ne i32 %102, 0
%12 = icmp ne i32 %98, 0
%13 = icmp ne i32 %99, 0
%14 = zext i32 %97 to i64
br label %107
15: ; preds = %0, %96
%16 = phi i32 [ %103, %96 ], [ %3, %0 ]
%17 = phi i32 [ %102, %96 ], [ 0, %0 ]
%18 = phi i32 [ %101, %96 ], [ 0, %0 ]
%19 = phi i32 [ %100, %96 ], [ 0, %0 ]
%20 = phi i32 [ %99, %96 ], [ 0, %0 ]
%21 = phi i32 [ %98, %96 ], [ 0, %0 ]
%22 = phi i32 [ %97, %96 ], [ 0, %0 ]
%23 = phi i32 [ %16, %96 ], [ 0, %0 ]
%24 = icmp ne i32 %16, 42
%25 = icmp ne i32 %23, 47
%26 = or i1 %25, %24
%27 = icmp ne i32 %19, 0
%28 = select i1 %26, i1 true, i1 %27
%29 = icmp ne i32 %18, 0
%30 = select i1 %28, i1 true, i1 %29
br i1 %30, label %35, label %31
31: ; preds = %15
%32 = add nsw i32 %22, 1
%33 = sext i32 %22 to i64
%34 = getelementptr inbounds [1024 x i32], [1024 x i32]* %1, i64 0, i64 %33
store i32 2, i32* %34
br label %96
35: ; preds = %15
%36 = icmp eq i32 %16, 47
%37 = icmp eq i32 %23, 42
%38 = and i1 %37, %36
%39 = select i1 %38, i1 %27, i1 false
br i1 %39, label %96, label %40
40: ; preds = %35
%41 = icmp eq i32 %16, 34
%42 = icmp ne i32 %23, 92
%43 = and i1 %42, %41
%44 = xor i1 %43, true
%45 = select i1 %44, i1 true, i1 %27
%46 = icmp ne i32 %17, 0
%47 = select i1 %45, i1 true, i1 %46
br i1 %47, label %54, label %48
48: ; preds = %40
%49 = xor i1 %29, true
%50 = zext i1 %49 to i32
%51 = add nsw i32 %22, 1
%52 = sext i32 %22 to i64
%53 = getelementptr inbounds [1024 x i32], [1024 x i32]* %1, i64 0, i64 %52
store i32 3, i32* %53
br label %96
54: ; preds = %40
%55 = icmp eq i32 %16, 39
%56 = and i1 %42, %55
%57 = xor i1 %56, true
%58 = select i1 %57, i1 true, i1 %27
%59 = select i1 %58, i1 true, i1 %29
br i1 %59, label %66, label %60
60: ; preds = %54
%61 = xor i1 %46, true
%62 = zext i1 %61 to i32
%63 = add nsw i32 %22, 1
%64 = sext i32 %22 to i64
%65 = getelementptr inbounds [1024 x i32], [1024 x i32]* %1, i64 0, i64 %64
store i32 4, i32* %65
br label %96
66: ; preds = %54
%67 = select i1 %27, i1 true, i1 %29
%68 = select i1 %67, i1 true, i1 %46
br i1 %68, label %96, label %69
69: ; preds = %66
%70 = icmp eq i32 %16, 40
br i1 %70, label %71, label %73
71: ; preds = %69
%72 = add nsw i32 %21, -1
br label %80
73: ; preds = %69
%74 = icmp eq i32 %16, 41
%75 = zext i1 %74 to i32
%76 = add nsw i32 %21, %75
%77 = icmp eq i32 %16, 123
br i1 %77, label %78, label %87
78: ; preds = %73
%79 = add nsw i32 %20, -1
br label %80
80: ; preds = %71, %78
%81 = phi i32 [ 5, %71 ], [ 6, %78 ]
%82 = phi i32 [ %72, %71 ], [ %76, %78 ]
%83 = phi i32 [ %20, %71 ], [ %79, %78 ]
%84 = sext i32 %22 to i64
%85 = getelementptr inbounds [1024 x i32], [1024 x i32]* %1, i64 0, i64 %84
store i32 %81, i32* %85
%86 = add nsw i32 %22, 1
br label %96
87: ; preds = %73
%88 = icmp eq i32 %16, 125
%89 = zext i1 %88 to i32
%90 = add nsw i32 %20, %89
%91 = icmp eq i32 %16, 91
br i1 %91, label %92, label %96
92: ; preds = %87
%93 = add nsw i32 %22, 1
%94 = sext i32 %22 to i64
%95 = getelementptr inbounds [1024 x i32], [1024 x i32]* %1, i64 0, i64 %94
store i32 7, i32* %95
br label %96
96: ; preds = %87, %92, %80, %35, %60, %66, %48, %31
%97 = phi i32 [ %22, %66 ], [ %63, %60 ], [ %51, %48 ], [ %32, %31 ], [ %22, %35 ], [ %93, %92 ], [ %22, %87 ], [ %86, %80 ]
%98 = phi i32 [ %21, %66 ], [ %21, %60 ], [ %21, %48 ], [ %21, %31 ], [ %21, %35 ], [ %76, %92 ], [ %76, %87 ], [ %82, %80 ]
%99 = phi i32 [ %20, %66 ], [ %20, %60 ], [ %20, %48 ], [ %20, %31 ], [ %20, %35 ], [ %90, %92 ], [ %90, %87 ], [ %83, %80 ]
%100 = phi i32 [ %19, %66 ], [ 0, %60 ], [ 0, %48 ], [ 1, %31 ], [ 0, %35 ], [ 0, %92 ], [ 0, %87 ], [ 0, %80 ]
%101 = phi i32 [ %18, %66 ], [ 0, %60 ], [ %50, %48 ], [ 0, %31 ], [ %18, %35 ], [ 0, %92 ], [ 0, %87 ], [ 0, %80 ]
%102 = phi i32 [ %17, %66 ], [ %62, %60 ], [ 0, %48 ], [ %17, %31 ], [ %17, %35 ], [ 0, %92 ], [ 0, %87 ], [ 0, %80 ]
%103 = tail call i32 (...) @getchar()
%104 = load i32, i32* @EOF
%105 = icmp eq i32 %103, %104
br i1 %105, label %6, label %15
106: ; preds = %147, %0, %6
ret i32 0
107: ; preds = %8, %147
%108 = phi i64 [ 0, %8 ], [ %148, %147 ]
%109 = getelementptr inbounds [1024 x i32], [1024 x i32]* %1, i64 0, i64 %108
%110 = load i32, i32* %109
%111 = icmp eq i32 %110, 2
%112 = select i1 %111, i1 %9, i1 false
br i1 %112, label %113, label %117
113: ; preds = %107
%114 = add nuw nsw i64 %108, 1
%115 = trunc i64 %114 to i32
%116 = tail call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), i32 %115)
br label %147
117: ; preds = %107
%118 = icmp eq i32 %110, 3
%119 = select i1 %118, i1 %10, i1 false
br i1 %119, label %120, label %124
120: ; preds = %117
%121 = add nuw nsw i64 %108, 1
%122 = trunc i64 %121 to i32
%123 = tail call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.1, i64 0, i64 0), i32 %122)
br label %147
124: ; preds = %117
%125 = icmp eq i32 %110, 4
%126 = select i1 %125, i1 %11, i1 false
br i1 %126, label %127, label %131
127: ; preds = %124
%128 = add nuw nsw i64 %108, 1
%129 = trunc i64 %128 to i32
%130 = tail call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.2, i64 0, i64 0), i32 %129)
br label %147
131: ; preds = %124
%132 = icmp eq i32 %110, 5
%133 = select i1 %132, i1 %12, i1 false
br i1 %133, label %134, label %138
134: ; preds = %131
%135 = add nuw nsw i64 %108, 1
%136 = trunc i64 %135 to i32
%137 = tail call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %136)
br label %147
138: ; preds = %131
%139 = icmp eq i32 %110, 6
%140 = select i1 %139, i1 %13, i1 false
%141 = add nuw nsw i64 %108, 1
%142 = trunc i64 %141 to i32
br i1 %140, label %143, label %145
143: ; preds = %138
%144 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.4, i64 0, i64 0), i32 %142)
br label %147
145: ; preds = %138
%146 = tail call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.5, i64 0, i64 0), i32 %142)
br label %147
147: ; preds = %113, %127, %143, %145, %134, %120
%148 = phi i64 [ %114, %113 ], [ %128, %127 ], [ %141, %143 ], [ %141, %145 ], [ %135, %134 ], [ %121, %120 ]
%149 = icmp eq i64 %148, %14
br i1 %149, label %106, label %107
}