#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 getline(char *, int);
int /*<<< orphan*/ printf(char *);
main() {
  int i;
  int escape, comment, charconst, quoted, parenthese, bracket, brace;
  int len;
  char line[1000];
  escape = comment = charconst = quoted = parenthese = bracket = brace = 0;
  while ((len = getline(line, 1000)) > 0) {
    i = 0;
    while (line[i] != '\0') {
      if (line[i] == '\'') {
        if (charconst == 0 && quoted == 0 && comment == 0 && escape == 0)
          charconst = 1;
        else if (charconst && quoted == 0 && comment == 0 && escape == 0) {
          charconst = 0;
        }
      }
      if (line[i] == '\\') {
        if (charconst && quoted == 0 && comment == 0 && escape == 0)
          escape = 1;
        else if (charconst && escape)
          escape = 0;
      }
      if (line[i] != '\\' && charconst && escape)
        escape = 0;
      if (line[i] == '\"') {
        if (charconst == 0 && quoted == 0 && comment == 0)
          quoted = 1;
        else if (charconst == 0 && quoted && comment == 0)
          quoted = 0;
      }
      if (charconst == 0 && quoted == 0 && comment == 0 && line[i] == '/' &&
          line[i + 1] == '*')
        comment = 1;
      else if (comment && line[i] == '/' && line[i - 1] == '*') {
        comment = 0;
        ++i;
      } else if (quoted == 0 && charconst == 0 && comment == 0 && escape == 0) {
        if (line[i] == '[')
          ++bracket;
        if (line[i] == ']')
          --bracket;
        if (line[i] == '(')
          ++parenthese;
        if (line[i] == ')')
          --parenthese;
        if (line[i] == '{')
          ++brace;
        if (line[i] == '}')
          --brace;
      }
      ++i;
    }
  }
  if (brace != 0)
    printf("Unbalanced brace.\n");
  if (bracket != 0)
    printf("Unbalanced bracket.\n");
  if (parenthese != 0)
    printf("Unbalanced parenthese.\n");
  if (charconst != 0)
    printf("Unbalanced single quote\n");
  if (quoted != 0)
    printf("Unbalanced double quote\n");
  if (comment != 0)
    printf("Unbalanced comments\n");
  if (escape != 0)
    printf("Illegal escape sequence\n");
  if (brace == 0 && bracket == 0 && parenthese == 0 && charconst == 0 &&
      quoted == 0 && comment == 0 && escape == 0)
    printf("Syntax is OK.\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x410,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
lea    -0x410(%rbp),%rdi
mov    $0x3e8,%esi
call   1040 <getline@plt>
mov    %eax,-0x28(%rbp)
cmp    $0x0,%eax
jle    14cd <main+0x3ad>
movl   $0x0,-0x8(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     14c8 <main+0x3a8>
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x27,%eax
jne    121e <main+0xfe>
cmpl   $0x0,-0x14(%rbp)
jne    11e5 <main+0xc5>
cmpl   $0x0,-0x18(%rbp)
jne    11e5 <main+0xc5>
cmpl   $0x0,-0x10(%rbp)
jne    11e5 <main+0xc5>
cmpl   $0x0,-0xc(%rbp)
jne    11e5 <main+0xc5>
movl   $0x1,-0x14(%rbp)
jmp    1219 <main+0xf9>
cmpl   $0x0,-0x14(%rbp)
je     1214 <main+0xf4>
cmpl   $0x0,-0x18(%rbp)
jne    1214 <main+0xf4>
cmpl   $0x0,-0x10(%rbp)
jne    1214 <main+0xf4>
cmpl   $0x0,-0xc(%rbp)
jne    1214 <main+0xf4>
movl   $0x0,-0x14(%rbp)
jmp    1219 <main+0xf9>
jmp    121e <main+0xfe>
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x5c,%eax
jne    128c <main+0x16c>
cmpl   $0x0,-0x14(%rbp)
je     1267 <main+0x147>
cmpl   $0x0,-0x18(%rbp)
jne    1267 <main+0x147>
cmpl   $0x0,-0x10(%rbp)
jne    1267 <main+0x147>
cmpl   $0x0,-0xc(%rbp)
jne    1267 <main+0x147>
movl   $0x1,-0xc(%rbp)
jmp    1287 <main+0x167>
cmpl   $0x0,-0x14(%rbp)
je     1282 <main+0x162>
cmpl   $0x0,-0xc(%rbp)
je     1282 <main+0x162>
movl   $0x0,-0xc(%rbp)
jmp    1287 <main+0x167>
jmp    128c <main+0x16c>
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x5c,%eax
je     12bc <main+0x19c>
cmpl   $0x0,-0x14(%rbp)
je     12bc <main+0x19c>
cmpl   $0x0,-0xc(%rbp)
je     12bc <main+0x19c>
movl   $0x0,-0xc(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x22,%eax
jne    132a <main+0x20a>
cmpl   $0x0,-0x14(%rbp)
jne    12fb <main+0x1db>
cmpl   $0x0,-0x18(%rbp)
jne    12fb <main+0x1db>
cmpl   $0x0,-0x10(%rbp)
jne    12fb <main+0x1db>
movl   $0x1,-0x18(%rbp)
jmp    1325 <main+0x205>
cmpl   $0x0,-0x14(%rbp)
jne    1320 <main+0x200>
cmpl   $0x0,-0x18(%rbp)
je     1320 <main+0x200>
cmpl   $0x0,-0x10(%rbp)
jne    1320 <main+0x200>
movl   $0x0,-0x18(%rbp)
jmp    1325 <main+0x205>
jmp    132a <main+0x20a>
cmpl   $0x0,-0x14(%rbp)
jne    1382 <main+0x262>
cmpl   $0x0,-0x18(%rbp)
jne    1382 <main+0x262>
cmpl   $0x0,-0x10(%rbp)
jne    1382 <main+0x262>
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x2f,%eax
jne    1382 <main+0x262>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
cltq
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x2a,%eax
jne    1382 <main+0x262>
movl   $0x1,-0x10(%rbp)
jmp    14ba <main+0x39a>
cmpl   $0x0,-0x10(%rbp)
je     13cf <main+0x2af>
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x2f,%eax
jne    13cf <main+0x2af>
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cltq
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x2a,%eax
jne    13cf <main+0x2af>
movl   $0x0,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14b5 <main+0x395>
cmpl   $0x0,-0x18(%rbp)
jne    14b0 <main+0x390>
cmpl   $0x0,-0x14(%rbp)
jne    14b0 <main+0x390>
cmpl   $0x0,-0x10(%rbp)
jne    14b0 <main+0x390>
cmpl   $0x0,-0xc(%rbp)
jne    14b0 <main+0x390>
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x5b,%eax
jne    1415 <main+0x2f5>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x5d,%eax
jne    1433 <main+0x313>
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x28,%eax
jne    1451 <main+0x331>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x29,%eax
jne    146f <main+0x34f>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x7b,%eax
jne    148d <main+0x36d>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x410(%rbp,%rax,1),%eax
ff
cmp    $0x7d,%eax
jne    14ab <main+0x38b>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    14b0 <main+0x390>
jmp    14b5 <main+0x395>
jmp    14ba <main+0x39a>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1187 <main+0x67>
jmp    1163 <main+0x43>
cmpl   $0x0,-0x24(%rbp)
je     14e3 <main+0x3c3>
lea    0xb22(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0x20(%rbp)
je     14f9 <main+0x3d9>
lea    0xb1f(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0x1c(%rbp)
je     150f <main+0x3ef>
lea    0xb1e(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0x14(%rbp)
je     1525 <main+0x405>
lea    0xb20(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0x18(%rbp)
je     153b <main+0x41b>
lea    0xb23(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0x10(%rbp)
je     1551 <main+0x431>
lea    0xb26(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0xc(%rbp)
je     1567 <main+0x447>
lea    0xb25(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x0,-0x24(%rbp)
jne    15b9 <main+0x499>
cmpl   $0x0,-0x20(%rbp)
jne    15b9 <main+0x499>
cmpl   $0x0,-0x1c(%rbp)
jne    15b9 <main+0x499>
cmpl   $0x0,-0x14(%rbp)
jne    15b9 <main+0x499>
cmpl   $0x0,-0x18(%rbp)
jne    15b9 <main+0x499>
cmpl   $0x0,-0x10(%rbp)
jne    15b9 <main+0x499>
cmpl   $0x0,-0xc(%rbp)
jne    15b9 <main+0x499>
lea    0xaec(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x410,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x408,%rsp
lea    0x20(%rsp),%r12
mov    %r12,%rdi
mov    $0x3e8,%esi
call   1040 <getline@plt>
test   %eax,%eax
jle    1430 <main+0x310>
pxor   %xmm0,%xmm0
movdqa %xmm0,0x10(%rsp)
xor    %ebx,%ebx
movl   $0x0,0xc(%rsp)
xor    %r13d,%r13d
xor    %r14d,%r14d
xor    %r15d,%r15d
xor    %ebp,%ebp
xor    %ecx,%ecx
jmp    1187 <main+0x67>
xchg   %ax,%ax
mov    %r12,%rdi
mov    $0x3e8,%esi
call   1040 <getline@plt>
xor    %ecx,%ecx
test   %eax,%eax
jle    1382 <main+0x262>
movslq %ecx,%rdx
movzbl 0x20(%rsp,%rdx,1),%eax
test   %al,%al
je     1170 <main+0x50>
cmp    $0x5c,%al
je     11b8 <main+0x98>
cmp    $0x27,%al
jne    11f6 <main+0xd6>
test   %r14d,%r14d
jne    11d2 <main+0xb2>
test   %r13d,%r13d
jne    11d2 <main+0xb2>
test   %r15d,%r15d
jne    11d2 <main+0xb2>
test   %ebp,%ebp
jne    11d2 <main+0xb2>
xor    %ebp,%ebp
mov    $0x1,%r14d
jmp    11f6 <main+0xd6>
test   %r14d,%r14d
je     11e9 <main+0xc9>
test   %r13d,%r13d
jne    11e9 <main+0xc9>
test   %r15d,%r15d
jne    11e9 <main+0xc9>
test   %ebp,%ebp
jne    11e9 <main+0xc9>
mov    $0x1,%ebp
jmp    11f6 <main+0xd6>
mov    %r15d,%esi
or     %ebp,%esi
or     %r13d,%esi
mov    %r14d,%esi
cmove  %ebx,%esi
test   %r14d,%r14d
cmovne %esi,%r14d
jmp    11f6 <main+0xd6>
test   %ebp,%ebp
mov    %ebp,%esi
cmovne %ebx,%esi
test   %r14d,%r14d
cmovne %esi,%ebp
mov    %ebp,%edi
test   %ebp,%ebp
cmovne %ebx,%ebp
test   %r14d,%r14d
cmove  %edi,%ebp
sete   %r8b
cmp    $0x5c,%al
cmove  %edi,%ebp
mov    %r14d,%ebx
or     %r13d,%ebx
test   %r13d,%r13d
sete   %dil
or     %r15d,%ebx
sete   %bl
cmp    $0x22,%al
jne    123a <main+0x11a>
test   %bl,%bl
je     1294 <main+0x174>
xor    %r15d,%r15d
mov    $0x1,%r13d
xor    %ebx,%ebx
add    $0x1,%ecx
jmp    1187 <main+0x67>
test   %bl,%bl
je     126a <main+0x14a>
xor    %r13d,%r13d
cmp    $0x2f,%al
jne    126a <main+0x14a>
mov    $0x1,%r8b
mov    $0x1,%r15d
xor    %r13d,%r13d
cmpb   $0x2a,0x1(%rdx,%r12,1)
mov    $0x1,%dil
mov    $0x0,%ebx
jne    12ec <main+0x1cc>
jmp    1370 <main+0x250>
test   %r15d,%r15d
je     12ea <main+0x1ca>
cmp    $0x2f,%al
jne    1378 <main+0x258>
xor    %eax,%eax
cmpb   $0x2a,-0x1(%rdx,%r12,1)
sete   %al
mov    $0x0,%ebx
cmove  %ebx,%r15d
add    %eax,%edx
mov    %edx,%ecx
jmp    1370 <main+0x250>
test   %r15d,%r15d
mov    %r13d,%edx
cmove  %r15d,%edx
test   %r13d,%r13d
cmove  %r13d,%edx
test   %r14d,%r14d
sete   %r8b
cmovne %r13d,%edx
mov    %r14d,%esi
or     %edx,%esi
test   %edx,%edx
sete   %dil
mov    %esi,%ebx
or     %r15d,%ebx
sete   %bl
or     %bl,%r8b
or     %bl,%dil
or     %r15d,%esi
mov    %edx,%r13d
mov    $0x0,%ebx
cmove  %ebx,%r13d
je     12ec <main+0x1cc>
test   %r15d,%r15d
je     12ec <main+0x1cc>
mov    %edx,%r13d
add    $0x1,%ecx
jmp    1187 <main+0x67>
xor    %ebx,%ebx
xor    %r15d,%r15d
test   %dil,%dil
je     1370 <main+0x250>
test   %r8b,%r8b
je     1370 <main+0x250>
test   %ebp,%ebp
jne    1370 <main+0x250>
xor    %edx,%edx
cmp    $0x28,%al
sete   %dl
mov    0xc(%rsp),%esi
add    %edx,%esi
xor    %edx,%edx
cmp    $0x29,%al
sete   %dl
sub    %edx,%esi
mov    %esi,0xc(%rsp)
movzbl %al,%eax
movd   %eax,%xmm0
punpcklbw %xmm0,%xmm0
movdqa %xmm0,%xmm1
pcmpeqb 0xcd2(%rip),%xmm1
punpcklbw %xmm1,%xmm1
pshuflw $0xd4,%xmm1,%xmm1
pand   0xcd1(%rip),%xmm1
movdqa 0x10(%rsp),%xmm2
paddd  %xmm1,%xmm2
pcmpeqb 0xccf(%rip),%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
psrad  $0x18,%xmm0
paddd  %xmm0,%xmm2
movdqa %xmm2,0x10(%rsp)
add    $0x1,%ecx
jmp    1187 <main+0x67>
add    $0x1,%ecx
jmp    1187 <main+0x67>
xor    %ebx,%ebx
add    $0x1,%ecx
jmp    1187 <main+0x67>
pshufd $0x55,0x10(%rsp),%xmm0
movd   %xmm0,%eax
test   %eax,%eax
sete   0xb(%rsp)
je     13a2 <main+0x282>
lea    0xd28(%rip),%rdi
call   1030 <puts@plt>
movdqa 0x10(%rsp),%xmm0
movd   %xmm0,%eax
test   %eax,%eax
sete   0x10(%rsp)
je     13c1 <main+0x2a1>
lea    0xcf5(%rip),%rdi
call   1030 <puts@plt>
cmpl   $0x0,0xc(%rsp)
sete   0xc(%rsp)
je     13d9 <main+0x2b9>
lea    0xcc6(%rip),%rdi
call   1030 <puts@plt>
test   %r14d,%r14d
sete   %r12b
je     13ee <main+0x2ce>
lea    0xc99(%rip),%rdi
call   1030 <puts@plt>
test   %r13d,%r13d
sete   %r14b
je     1403 <main+0x2e3>
lea    0xc6c(%rip),%rdi
call   1030 <puts@plt>
test   %r15d,%r15d
sete   %bl
je     1417 <main+0x2f7>
lea    0xc44(%rip),%rdi
call   1030 <puts@plt>
test   %ebp,%ebp
mov    0xb(%rsp),%al
mov    0x10(%rsp),%cl
mov    0xc(%rsp),%dl
je     143e <main+0x31e>
lea    0xc10(%rip),%rdi
jmp    145f <main+0x33f>
mov    $0x1,%r14b
mov    $0x1,%dl
mov    $0x1,%al
mov    $0x1,%cl
mov    $0x1,%r12b
mov    $0x1,%bl
test   %al,%al
je     1464 <main+0x344>
test   %cl,%cl
je     1464 <main+0x344>
test   %dl,%dl
je     1464 <main+0x344>
test   %r12b,%r12b
je     1464 <main+0x344>
test   %r14b,%r14b
je     1464 <main+0x344>
test   %bl,%bl
je     1464 <main+0x344>
lea    0xbd1(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x408,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [19 x i8] c"Unbalanced brace.\0A\00"
@.str.1 = [21 x i8] c"Unbalanced bracket.\0A\00"
@.str.2 = [24 x i8] c"Unbalanced parenthese.\0A\00"
@.str.3 = [25 x i8] c"Unbalanced single quote\0A\00"
@.str.4 = [25 x i8] c"Unbalanced double quote\0A\00"
@.str.5 = [21 x i8] c"Unbalanced comments\0A\00"
@.str.6 = [25 x i8] c"Illegal escape sequence\0A\00"
@.str.7 = [15 x i8] c"Syntax is OK.\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 [1000 x i8]
store i32 0, i32* %1
store i32 0, i32* %9
store i32 0, i32* %8
store i32 0, i32* %7
store i32 0, i32* %6
store i32 0, i32* %5
store i32 0, i32* %4
store i32 0, i32* %3
br label %12
12: ; preds = %255, %0
%13 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 0
%14 = call i32 @getline(i8* %13, i32 1000)
store i32 %14, i32* %10
%15 = icmp sgt i32 %14, 0
br i1 %15, label %16, label %256
16: ; preds = %12
store i32 0, i32* %2
br label %17
17: ; preds = %252, %16
%18 = load i32, i32* %2
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %19
%21 = load i8, i8* %20
%22 = sext i8 %21 to i32
%23 = icmp ne i32 %22, 0
br i1 %23, label %24, label %255
24: ; preds = %17
%25 = load i32, i32* %2
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %26
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp eq i32 %29, 39
br i1 %30, label %31, label %59
31: ; preds = %24
%32 = load i32, i32* %5
%33 = icmp eq i32 %32, 0
br i1 %33, label %34, label %44
34: ; preds = %31
%35 = load i32, i32* %6
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %44
37: ; preds = %34
%38 = load i32, i32* %4
%39 = icmp eq i32 %38, 0
br i1 %39, label %40, label %44
40: ; preds = %37
%41 = load i32, i32* %3
%42 = icmp eq i32 %41, 0
br i1 %42, label %43, label %44
43: ; preds = %40
store i32 1, i32* %5
br label %58
44: ; preds = %40, %37, %34, %31
%45 = load i32, i32* %5
%46 = icmp ne i32 %45, 0
br i1 %46, label %47, label %57
47: ; preds = %44
%48 = load i32, i32* %6
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %57
50: ; preds = %47
%51 = load i32, i32* %4
%52 = icmp eq i32 %51, 0
br i1 %52, label %53, label %57
53: ; preds = %50
%54 = load i32, i32* %3
%55 = icmp eq i32 %54, 0
br i1 %55, label %56, label %57
56: ; preds = %53
store i32 0, i32* %5
br label %57
57: ; preds = %56, %53, %50, %47, %44
br label %58
58: ; preds = %57, %43
br label %59
59: ; preds = %58, %24
%60 = load i32, i32* %2
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %61
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 92
br i1 %65, label %66, label %88
66: ; preds = %59
%67 = load i32, i32* %5
%68 = icmp ne i32 %67, 0
br i1 %68, label %69, label %79
69: ; preds = %66
%70 = load i32, i32* %6
%71 = icmp eq i32 %70, 0
br i1 %71, label %72, label %79
72: ; preds = %69
%73 = load i32, i32* %4
%74 = icmp eq i32 %73, 0
br i1 %74, label %75, label %79
75: ; preds = %72
%76 = load i32, i32* %3
%77 = icmp eq i32 %76, 0
br i1 %77, label %78, label %79
78: ; preds = %75
store i32 1, i32* %3
br label %87
79: ; preds = %75, %72, %69, %66
%80 = load i32, i32* %5
%81 = icmp ne i32 %80, 0
br i1 %81, label %82, label %86
82: ; preds = %79
%83 = load i32, i32* %3
%84 = icmp ne i32 %83, 0
br i1 %84, label %85, label %86
85: ; preds = %82
store i32 0, i32* %3
br label %86
86: ; preds = %85, %82, %79
br label %87
87: ; preds = %86, %78
br label %88
88: ; preds = %87, %59
%89 = load i32, i32* %2
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %90
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = icmp ne i32 %93, 92
br i1 %94, label %95, label %102
95: ; preds = %88
%96 = load i32, i32* %5
%97 = icmp ne i32 %96, 0
br i1 %97, label %98, label %102
98: ; preds = %95
%99 = load i32, i32* %3
%100 = icmp ne i32 %99, 0
br i1 %100, label %101, label %102
101: ; preds = %98
store i32 0, i32* %3
br label %102
102: ; preds = %101, %98, %95, %88
%103 = load i32, i32* %2
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %104
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = icmp eq i32 %107, 34
br i1 %108, label %109, label %131
109: ; preds = %102
%110 = load i32, i32* %5
%111 = icmp eq i32 %110, 0
br i1 %111, label %112, label %119
112: ; preds = %109
%113 = load i32, i32* %6
%114 = icmp eq i32 %113, 0
br i1 %114, label %115, label %119
115: ; preds = %112
%116 = load i32, i32* %4
%117 = icmp eq i32 %116, 0
br i1 %117, label %118, label %119
118: ; preds = %115
store i32 1, i32* %6
br label %130
119: ; preds = %115, %112, %109
%120 = load i32, i32* %5
%121 = icmp eq i32 %120, 0
br i1 %121, label %122, label %129
122: ; preds = %119
%123 = load i32, i32* %6
%124 = icmp ne i32 %123, 0
br i1 %124, label %125, label %129
125: ; preds = %122
%126 = load i32, i32* %4
%127 = icmp eq i32 %126, 0
br i1 %127, label %128, label %129
128: ; preds = %125
store i32 0, i32* %6
br label %129
129: ; preds = %128, %125, %122, %119
br label %130
130: ; preds = %129, %118
br label %131
131: ; preds = %130, %102
%132 = load i32, i32* %5
%133 = icmp eq i32 %132, 0
br i1 %133, label %134, label %156
134: ; preds = %131
%135 = load i32, i32* %6
%136 = icmp eq i32 %135, 0
br i1 %136, label %137, label %156
137: ; preds = %134
%138 = load i32, i32* %4
%139 = icmp eq i32 %138, 0
br i1 %139, label %140, label %156
140: ; preds = %137
%141 = load i32, i32* %2
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %142
%144 = load i8, i8* %143
%145 = sext i8 %144 to i32
%146 = icmp eq i32 %145, 47
br i1 %146, label %147, label %156
147: ; preds = %140
%148 = load i32, i32* %2
%149 = add nsw i32 %148, 1
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %150
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = icmp eq i32 %153, 42
br i1 %154, label %155, label %156
155: ; preds = %147
store i32 1, i32* %4
br label %252
156: ; preds = %147, %140, %137, %134, %131
%157 = load i32, i32* %4
%158 = icmp ne i32 %157, 0
br i1 %158, label %159, label %177
159: ; preds = %156
%160 = load i32, i32* %2
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %161
%163 = load i8, i8* %162
%164 = sext i8 %163 to i32
%165 = icmp eq i32 %164, 47
br i1 %165, label %166, label %177
166: ; preds = %159
%167 = load i32, i32* %2
%168 = sub nsw i32 %167, 1
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %169
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = icmp eq i32 %172, 42
br i1 %173, label %174, label %177
174: ; preds = %166
store i32 0, i32* %4
%175 = load i32, i32* %2
%176 = add nsw i32 %175, 1
store i32 %176, i32* %2
br label %251
177: ; preds = %166, %159, %156
%178 = load i32, i32* %6
%179 = icmp eq i32 %178, 0
br i1 %179, label %180, label %250
180: ; preds = %177
%181 = load i32, i32* %5
%182 = icmp eq i32 %181, 0
br i1 %182, label %183, label %250
183: ; preds = %180
%184 = load i32, i32* %4
%185 = icmp eq i32 %184, 0
br i1 %185, label %186, label %250
186: ; preds = %183
%187 = load i32, i32* %3
%188 = icmp eq i32 %187, 0
br i1 %188, label %189, label %250
189: ; preds = %186
%190 = load i32, i32* %2
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %191
%193 = load i8, i8* %192
%194 = sext i8 %193 to i32
%195 = icmp eq i32 %194, 91
br i1 %195, label %196, label %199
196: ; preds = %189
%197 = load i32, i32* %8
%198 = add nsw i32 %197, 1
store i32 %198, i32* %8
br label %199
199: ; preds = %196, %189
%200 = load i32, i32* %2
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %201
%203 = load i8, i8* %202
%204 = sext i8 %203 to i32
%205 = icmp eq i32 %204, 93
br i1 %205, label %206, label %209
206: ; preds = %199
%207 = load i32, i32* %8
%208 = add nsw i32 %207, -1
store i32 %208, i32* %8
br label %209
209: ; preds = %206, %199
%210 = load i32, i32* %2
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %211
%213 = load i8, i8* %212
%214 = sext i8 %213 to i32
%215 = icmp eq i32 %214, 40
br i1 %215, label %216, label %219
216: ; preds = %209
%217 = load i32, i32* %7
%218 = add nsw i32 %217, 1
store i32 %218, i32* %7
br label %219
219: ; preds = %216, %209
%220 = load i32, i32* %2
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %221
%223 = load i8, i8* %222
%224 = sext i8 %223 to i32
%225 = icmp eq i32 %224, 41
br i1 %225, label %226, label %229
226: ; preds = %219
%227 = load i32, i32* %7
%228 = add nsw i32 %227, -1
store i32 %228, i32* %7
br label %229
229: ; preds = %226, %219
%230 = load i32, i32* %2
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %231
%233 = load i8, i8* %232
%234 = sext i8 %233 to i32
%235 = icmp eq i32 %234, 123
br i1 %235, label %236, label %239
236: ; preds = %229
%237 = load i32, i32* %9
%238 = add nsw i32 %237, 1
store i32 %238, i32* %9
br label %239
239: ; preds = %236, %229
%240 = load i32, i32* %2
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds [1000 x i8], [1000 x i8]* %11, i64 0, i64 %241
%243 = load i8, i8* %242
%244 = sext i8 %243 to i32
%245 = icmp eq i32 %244, 125
br i1 %245, label %246, label %249
246: ; preds = %239
%247 = load i32, i32* %9
%248 = add nsw i32 %247, -1
store i32 %248, i32* %9
br label %249
249: ; preds = %246, %239
br label %250
250: ; preds = %249, %186, %183, %180, %177
br label %251
251: ; preds = %250, %174
br label %252
252: ; preds = %251, %155
%253 = load i32, i32* %2
%254 = add nsw i32 %253, 1
store i32 %254, i32* %2
br label %17
255: ; preds = %17
br label %12
256: ; preds = %12
%257 = load i32, i32* %9
%258 = icmp ne i32 %257, 0
br i1 %258, label %259, label %261
259: ; preds = %256
%260 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
br label %261
261: ; preds = %259, %256
%262 = load i32, i32* %8
%263 = icmp ne i32 %262, 0
br i1 %263, label %264, label %266
264: ; preds = %261
%265 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
br label %266
266: ; preds = %264, %261
%267 = load i32, i32* %7
%268 = icmp ne i32 %267, 0
br i1 %268, label %269, label %271
269: ; preds = %266
%270 = call i32 @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.2, i64 0, i64 0))
br label %271
271: ; preds = %269, %266
%272 = load i32, i32* %5
%273 = icmp ne i32 %272, 0
br i1 %273, label %274, label %276
274: ; preds = %271
%275 = call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.3, i64 0, i64 0))
br label %276
276: ; preds = %274, %271
%277 = load i32, i32* %6
%278 = icmp ne i32 %277, 0
br i1 %278, label %279, label %281
279: ; preds = %276
%280 = call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.4, i64 0, i64 0))
br label %281
281: ; preds = %279, %276
%282 = load i32, i32* %4
%283 = icmp ne i32 %282, 0
br i1 %283, label %284, label %286
284: ; preds = %281
%285 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0))
br label %286
286: ; preds = %284, %281
%287 = load i32, i32* %3
%288 = icmp ne i32 %287, 0
br i1 %288, label %289, label %291
289: ; preds = %286
%290 = call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
br label %291
291: ; preds = %289, %286
%292 = load i32, i32* %9
%293 = icmp eq i32 %292, 0
br i1 %293, label %294, label %314
294: ; preds = %291
%295 = load i32, i32* %8
%296 = icmp eq i32 %295, 0
br i1 %296, label %297, label %314
297: ; preds = %294
%298 = load i32, i32* %7
%299 = icmp eq i32 %298, 0
br i1 %299, label %300, label %314
300: ; preds = %297
%301 = load i32, i32* %5
%302 = icmp eq i32 %301, 0
br i1 %302, label %303, label %314
303: ; preds = %300
%304 = load i32, i32* %6
%305 = icmp eq i32 %304, 0
br i1 %305, label %306, label %314
306: ; preds = %303
%307 = load i32, i32* %4
%308 = icmp eq i32 %307, 0
br i1 %308, label %309, label %314
309: ; preds = %306
%310 = load i32, i32* %3
%311 = icmp eq i32 %310, 0
br i1 %311, label %312, label %314
312: ; preds = %309
%313 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.7, i64 0, i64 0))
br label %314
314: ; preds = %312, %309, %306, %303, %300, %297, %294, %291
ret i32 0
}

LLVM IR (-O2):
@str = [14 x i8] c"Syntax is OK.\00"
@str.8 = [24 x i8] c"Illegal escape sequence\00"
@str.9 = [20 x i8] c"Unbalanced comments\00"
@str.10 = [24 x i8] c"Unbalanced double quote\00"
@str.11 = [24 x i8] c"Unbalanced single quote\00"
@str.12 = [23 x i8] c"Unbalanced parenthese.\00"
@str.13 = [20 x i8] c"Unbalanced bracket.\00"
@str.14 = [18 x i8] c"Unbalanced brace.\00"
define i32 @main() {
%1 = alloca [1000 x i8]
%2 = getelementptr inbounds [1000 x i8], [1000 x i8]* %1, i64 0, i64 0
%3 = call i32 @getline(i8* %2, i32 1000)
%4 = icmp sgt i32 %3, 0
br i1 %4, label %5, label %154
5: ; preds = %0, %119
%6 = phi i32 [ %55, %119 ], [ 0, %0 ]
%7 = phi i32 [ %121, %119 ], [ 0, %0 ]
%8 = phi i32 [ %48, %119 ], [ 0, %0 ]
%9 = phi i32 [ %120, %119 ], [ 0, %0 ]
%10 = phi i32 [ %122, %119 ], [ 0, %0 ]
%11 = phi i32 [ %125, %119 ], [ 0, %0 ]
%12 = phi <2 x i32> [ %124, %119 ], [ zeroinitializer, %0 ]
br label %16
13: ; preds = %16
%14 = call i32 @getline(i8* %2, i32 1000)
%15 = icmp sgt i32 %14, 0
br i1 %15, label %16, label %126
16: ; preds = %5, %13
%17 = phi i32 [ 0, %13 ], [ %11, %5 ]
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [1000 x i8], [1000 x i8]* %1, i64 0, i64 %18
%20 = load i8, i8* %19
switch i8 %20, label %47 [
i8 0, label %13
i8 39, label %21
i8 92, label %35
]
21: ; preds = %16
%22 = icmp eq i32 %8, 0
%23 = icmp eq i32 %9, 0
%24 = select i1 %22, i1 %23, i1 false
%25 = icmp eq i32 %7, 0
%26 = select i1 %24, i1 %25, i1 false
%27 = icmp eq i32 %6, 0
%28 = select i1 %26, i1 %27, i1 false
br i1 %28, label %47, label %29
29: ; preds = %21
%30 = icmp ne i32 %8, 0
%31 = select i1 %30, i1 %23, i1 false
%32 = select i1 %31, i1 %25, i1 false
%33 = select i1 %32, i1 %27, i1 false
%34 = select i1 %33, i32 0, i32 %8
br label %47
35: ; preds = %16
%36 = icmp ne i32 %8, 0
%37 = icmp eq i32 %9, 0
%38 = select i1 %36, i1 %37, i1 false
%39 = icmp eq i32 %7, 0
%40 = select i1 %38, i1 %39, i1 false
%41 = icmp eq i32 %6, 0
%42 = select i1 %40, i1 %41, i1 false
br i1 %42, label %47, label %43
43: ; preds = %35
%44 = icmp ne i32 %6, 0
%45 = select i1 %36, i1 %44, i1 false
%46 = select i1 %45, i32 0, i32 %6
br label %47
47: ; preds = %16, %21, %29, %35, %43
%48 = phi i32 [ %8, %43 ], [ %8, %35 ], [ %34, %29 ], [ 1, %21 ], [ %8, %16 ]
%49 = phi i32 [ %46, %43 ], [ 1, %35 ], [ %6, %29 ], [ 0, %21 ], [ %6, %16 ]
%50 = icmp ne i8 %20, 92
%51 = icmp ne i32 %48, 0
%52 = select i1 %50, i1 %51, i1 false
%53 = icmp ne i32 %49, 0
%54 = select i1 %52, i1 %53, i1 false
%55 = select i1 %54, i32 0, i32 %49
%56 = icmp eq i8 %20, 34
%57 = icmp eq i32 %48, 0
%58 = icmp eq i32 %9, 0
%59 = select i1 %57, i1 %58, i1 false
%60 = icmp eq i32 %7, 0
%61 = select i1 %59, i1 %60, i1 false
br i1 %56, label %62, label %63
62: ; preds = %47
br i1 %61, label %119, label %64
63: ; preds = %47
br i1 %61, label %76, label %84
64: ; preds = %62
%65 = icmp ne i32 %9, 0
%66 = select i1 %57, i1 %65, i1 false
%67 = select i1 %66, i1 %60, i1 false
%68 = select i1 %67, i32 0, i32 %9
%69 = icmp eq i32 %68, 0
%70 = select i1 %57, i1 %69, i1 false
%71 = select i1 %70, i1 %60, i1 false
%72 = select i1 %71, i1 true, i1 %60
%73 = select i1 %71, i32 0, i32 %68
%74 = or i1 %71, %57
%75 = select i1 %71, i1 true, i1 %69
br i1 %72, label %97, label %119
76: ; preds = %63
%77 = icmp eq i8 %20, 47
br i1 %77, label %78, label %84
78: ; preds = %76
%79 = add nsw i32 %17, 1
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [1000 x i8], [1000 x i8]* %1, i64 0, i64 %80
%82 = load i8, i8* %81
%83 = icmp eq i8 %82, 42
br i1 %83, label %119, label %97
84: ; preds = %76, %63
%85 = phi i32 [ 0, %76 ], [ %9, %63 ]
br i1 %60, label %97, label %86
86: ; preds = %84
%87 = icmp eq i8 %20, 47
br i1 %87, label %88, label %119
88: ; preds = %86
%89 = add nsw i32 %17, -1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [1000 x i8], [1000 x i8]* %1, i64 0, i64 %90
%92 = load i8, i8* %91
%93 = icmp eq i8 %92, 42
%94 = select i1 %93, i32 0, i32 %7
%95 = zext i1 %93 to i32
%96 = add nsw i32 %17, %95
br label %119
97: ; preds = %64, %78, %84
%98 = phi i32 [ %85, %84 ], [ %73, %64 ], [ 0, %78 ]
%99 = phi i1 [ %57, %84 ], [ %74, %64 ], [ true, %78 ]
%100 = phi i1 [ %58, %84 ], [ %75, %64 ], [ true, %78 ]
%101 = select i1 %100, i1 %99, i1 false
%102 = icmp eq i32 %55, 0
%103 = select i1 %101, i1 %102, i1 false
br i1 %103, label %104, label %119
104: ; preds = %97
%105 = icmp eq i8 %20, 40
%106 = zext i1 %105 to i32
%107 = add nsw i32 %10, %106
%108 = icmp eq i8 %20, 41
%109 = sext i1 %108 to i32
%110 = add nsw i32 %107, %109
%111 = insertelement <2 x i8> poison, i8 %20, i64 0
%112 = shufflevector <2 x i8> %111, <2 x i8> poison, <2 x i32> zeroinitializer
%113 = icmp eq <2 x i8> %112, <i8 91, i8 123>
%114 = zext <2 x i1> %113 to <2 x i32>
%115 = add nsw <2 x i32> %12, %114
%116 = icmp eq <2 x i8> %112, <i8 93, i8 125>
%117 = sext <2 x i1> %116 to <2 x i32>
%118 = add nsw <2 x i32> %115, %117
br label %119
119: ; preds = %64, %88, %62, %86, %104, %78, %97
%120 = phi i32 [ %98, %97 ], [ 0, %78 ], [ %98, %104 ], [ %85, %86 ], [ 1, %62 ], [ %85, %88 ], [ %68, %64 ]
%121 = phi i32 [ 0, %97 ], [ 1, %78 ], [ 0, %104 ], [ %7, %86 ], [ 0, %62 ], [ %94, %88 ], [ %7, %64 ]
%122 = phi i32 [ %10, %97 ], [ %10, %78 ], [ %110, %104 ], [ %10, %86 ], [ %10, %62 ], [ %10, %88 ], [ %10, %64 ]
%123 = phi i32 [ %17, %97 ], [ %17, %78 ], [ %17, %104 ], [ %17, %86 ], [ %17, %62 ], [ %96, %88 ], [ %17, %64 ]
%124 = phi <2 x i32> [ %12, %97 ], [ %12, %78 ], [ %118, %104 ], [ %12, %86 ], [ %12, %62 ], [ %12, %88 ], [ %12, %64 ]
%125 = add nsw i32 %123, 1
br label %5
126: ; preds = %13
%127 = extractelement <2 x i32> %12, i64 1
%128 = icmp eq i32 %127, 0
br i1 %128, label %131, label %129
129: ; preds = %126
%130 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.14, i64 0, i64 0))
br label %131
131: ; preds = %129, %126
%132 = extractelement <2 x i32> %12, i64 0
%133 = icmp eq i32 %132, 0
br i1 %133, label %136, label %134
134: ; preds = %131
%135 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.13, i64 0, i64 0))
br label %136
136: ; preds = %134, %131
%137 = icmp eq i32 %10, 0
br i1 %137, label %140, label %138
138: ; preds = %136
%139 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.12, i64 0, i64 0))
br label %140
140: ; preds = %138, %136
%141 = icmp eq i32 %8, 0
br i1 %141, label %144, label %142
142: ; preds = %140
%143 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.11, i64 0, i64 0))
br label %144
144: ; preds = %142, %140
%145 = icmp eq i32 %9, 0
br i1 %145, label %148, label %146
146: ; preds = %144
%147 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.10, i64 0, i64 0))
br label %148
148: ; preds = %146, %144
%149 = icmp eq i32 %7, 0
br i1 %149, label %152, label %150
150: ; preds = %148
%151 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.9, i64 0, i64 0))
br label %152
152: ; preds = %150, %148
%153 = icmp eq i32 %6, 0
br i1 %153, label %154, label %166
154: ; preds = %0, %152
%155 = phi i1 [ %145, %152 ], [ true, %0 ]
%156 = phi i1 [ %137, %152 ], [ true, %0 ]
%157 = phi i1 [ %128, %152 ], [ true, %0 ]
%158 = phi i1 [ %133, %152 ], [ true, %0 ]
%159 = phi i1 [ %141, %152 ], [ true, %0 ]
%160 = phi i1 [ %149, %152 ], [ true, %0 ]
%161 = and i1 %157, %158
%162 = and i1 %161, %156
%163 = and i1 %162, %159
%164 = and i1 %163, %155
%165 = and i1 %164, %160
br i1 %165, label %166, label %169
166: ; preds = %154, %152
%167 = phi i8* [ getelementptr inbounds ([24 x i8], [24 x i8]* @str.8, i64 0, i64 0), %152 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @str, i64 0, i64 0), %154 ]
%168 = call i32 @puts(i8* dereferenceable(1) %167)
br label %169
169: ; preds = %166, %154
ret i32 0
}