#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*/ putchar(int);
main() {
  int c, state;
  int slc;
  char quote;
  slc = 1;
  state = 0;
  while ((c = getchar()) != EOF) {
    if (state == 0) {
      if (c == '/') {
        state = 3;
      } else {
        if (c == '\'' || c == '"') {
          state = 1;
          quote = c;
        }
        putchar(c);
      }
    } else if (state == 1) {
      if (c == '\\')
        state = 2;
      else if (c == quote)
        state = 0;
      putchar(c);
    } else if (state == 2) {
      putchar(c);
      state = 1;
    } else if (state == 3) {
      if (c == '*' || c == '/') {
        state = 5;
        if (c == '*')
          slc = 0;
        else if (c == '/')
          slc = 1;
      } else {
        putchar('/');
        putchar(c);
        state = 0;
      }
    } else if (state == 4) {
      if (c == '/') {
        state = 0;
      } else if (c != '*')
        state = 5;
    } else if (state == 5) {
      if (c == '\n' && slc) {
        putchar(c);
        state = 0;
      } else if (c == '*' && slc == 0) {
        state = 4;
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %eax,-0x8(%rbp)
mov    0x2e9a(%rip),%rcx
cmp    (%rcx),%eax
je     132e <main+0x20e>
cmpl   $0x0,-0xc(%rbp)
jne    11a4 <main+0x84>
cmpl   $0x2f,-0x8(%rbp)
jne    1176 <main+0x56>
movl   $0x3,-0xc(%rbp)
jmp    119f <main+0x7f>
cmpl   $0x27,-0x8(%rbp)
je     118a <main+0x6a>
cmpl   $0x22,-0x8(%rbp)
jne    1197 <main+0x77>
movl   $0x1,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    %al,-0x11(%rbp)
mov    -0x8(%rbp),%edi
call   1030 <putchar@plt>
jmp    1329 <main+0x209>
cmpl   $0x1,-0xc(%rbp)
jne    11ec <main+0xcc>
cmpl   $0x5c,-0x8(%rbp)
jne    11c4 <main+0xa4>
movl   $0x2,-0xc(%rbp)
jmp    11df <main+0xbf>
mov    -0x8(%rbp),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
jne    11da <main+0xba>
movl   $0x0,-0xc(%rbp)
jmp    11df <main+0xbf>
mov    -0x8(%rbp),%edi
call   1030 <putchar@plt>
jmp    1324 <main+0x204>
cmpl   $0x2,-0xc(%rbp)
jne    120a <main+0xea>
mov    -0x8(%rbp),%edi
call   1030 <putchar@plt>
movl   $0x1,-0xc(%rbp)
jmp    131f <main+0x1ff>
cmpl   $0x3,-0xc(%rbp)
jne    127e <main+0x15e>
cmpl   $0x2a,-0x8(%rbp)
je     1228 <main+0x108>
cmpl   $0x2f,-0x8(%rbp)
jne    1260 <main+0x140>
movl   $0x5,-0xc(%rbp)
cmpl   $0x2a,-0x8(%rbp)
jne    1245 <main+0x125>
movl   $0x0,-0x10(%rbp)
jmp    125b <main+0x13b>
cmpl   $0x2f,-0x8(%rbp)
jne    1256 <main+0x136>
movl   $0x1,-0x10(%rbp)
jmp    125b <main+0x13b>
jmp    1279 <main+0x159>
mov    $0x2f,%edi
call   1030 <putchar@plt>
mov    -0x8(%rbp),%edi
call   1030 <putchar@plt>
movl   $0x0,-0xc(%rbp)
jmp    131a <main+0x1fa>
cmpl   $0x4,-0xc(%rbp)
jne    12b9 <main+0x199>
cmpl   $0x2f,-0x8(%rbp)
jne    129e <main+0x17e>
movl   $0x0,-0xc(%rbp)
jmp    12b4 <main+0x194>
cmpl   $0x2a,-0x8(%rbp)
je     12af <main+0x18f>
movl   $0x5,-0xc(%rbp)
jmp    12b4 <main+0x194>
jmp    1315 <main+0x1f5>
cmpl   $0x5,-0xc(%rbp)
jne    1310 <main+0x1f0>
cmpl   $0xa,-0x8(%rbp)
jne    12eb <main+0x1cb>
cmpl   $0x0,-0x10(%rbp)
je     12eb <main+0x1cb>
mov    -0x8(%rbp),%edi
call   1030 <putchar@plt>
movl   $0x0,-0xc(%rbp)
jmp    130b <main+0x1eb>
cmpl   $0x2a,-0x8(%rbp)
jne    1306 <main+0x1e6>
cmpl   $0x0,-0x10(%rbp)
jne    1306 <main+0x1e6>
movl   $0x4,-0xc(%rbp)
jmp    130b <main+0x1eb>
jmp    1310 <main+0x1f0>
jmp    1315 <main+0x1f5>
jmp    131a <main+0x1fa>
jmp    131f <main+0x1ff>
jmp    1324 <main+0x204>
jmp    1329 <main+0x209>
jmp    113d <main+0x1d>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %eax,%eax
call   1040 <getchar@plt>
mov    0x2eaf(%rip),%r15
cmp    (%r15),%eax
jne    114f <main+0x2f>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %eax,%ebx
mov    $0x1,%r13d
lea    0xea2(%rip),%rbp
xor    %r12d,%r12d
jmp    117e <main+0x5e>
mov    %ebx,%edi
call   1030 <putchar@plt>
mov    $0x1,%r12d
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%ebx
cmp    (%r15),%eax
je     113e <main+0x1e>
cmp    $0x5,%r12d
ja     1170 <main+0x50>
mov    %r12d,%eax
movslq 0x0(%rbp,%rax,4),%rax
add    %rbp,%rax
jmp    *%rax
cmp    $0x22,%ebx
je     11a7 <main+0x87>
cmp    $0x2f,%ebx
je     1275 <main+0x155>
xor    %r12d,%r12d
cmp    $0x27,%ebx
jne    11cb <main+0xab>
mov    $0x1,%r12d
mov    %ebx,%r14d
jmp    11cb <main+0xab>
movsbl %r14b,%eax
xor    %r12d,%r12d
cmp    %eax,%ebx
setne  %r12b
cmp    $0x5c,%ebx
mov    $0x2,%eax
cmove  %eax,%r12d
mov    %ebx,%edi
call   1030 <putchar@plt>
jmp    1170 <main+0x50>
mov    $0x5,%r12d
cmp    $0x2a,%ebx
je     1249 <main+0x129>
cmp    $0x2f,%ebx
jne    1251 <main+0x131>
mov    $0x1,%r13d
jmp    1170 <main+0x50>
cmp    $0x2a,%ebx
je     126a <main+0x14a>
xor    %r12d,%r12d
cmp    $0x2f,%ebx
je     1170 <main+0x50>
mov    $0x5,%r12d
jmp    1170 <main+0x50>
cmp    $0xa,%ebx
jne    122a <main+0x10a>
test   %r13d,%r13d
je     122a <main+0x10a>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0x1,%r13d
xor    %r12d,%r12d
jmp    1170 <main+0x50>
xor    $0x2a,%ebx
xor    %r12d,%r12d
or     %r13d,%ebx
sete   %r12b
mov    $0x0,%eax
cmove  %eax,%r13d
xor    $0x5,%r12d
jmp    1170 <main+0x50>
xor    %r13d,%r13d
jmp    1170 <main+0x50>
mov    $0x2f,%edi
call   1030 <putchar@plt>
mov    %ebx,%edi
call   1030 <putchar@plt>
xor    %r12d,%r12d
jmp    1170 <main+0x50>
mov    $0x4,%r12d
jmp    1170 <main+0x50>
mov    $0x3,%r12d
jmp    1170 <main+0x50>

LLVM IR (-O0):
@EOF = global i32 0
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8
store i32 0, i32* %1
store i32 1, i32* %4
store i32 0, i32* %3
br label %6
6: ; preds = %116, %0
%7 = call i32 (...) @getchar()
store i32 %7, i32* %2
%8 = load i32, i32* @EOF
%9 = icmp ne i32 %7, %8
br i1 %9, label %10, label %117
10: ; preds = %6
%11 = load i32, i32* %3
%12 = icmp eq i32 %11, 0
br i1 %12, label %13, label %30
13: ; preds = %10
%14 = load i32, i32* %2
%15 = icmp eq i32 %14, 47
br i1 %15, label %16, label %17
16: ; preds = %13
store i32 3, i32* %3
br label %29
17: ; preds = %13
%18 = load i32, i32* %2
%19 = icmp eq i32 %18, 39
br i1 %19, label %23, label %20
20: ; preds = %17
%21 = load i32, i32* %2
%22 = icmp eq i32 %21, 34
br i1 %22, label %23, label %26
23: ; preds = %20, %17
store i32 1, i32* %3
%24 = load i32, i32* %2
%25 = trunc i32 %24 to i8
store i8 %25, i8* %5
br label %26
26: ; preds = %23, %20
%27 = load i32, i32* %2
%28 = call i32 @putchar(i32 %27)
br label %29
29: ; preds = %26, %16
br label %116
30: ; preds = %10
%31 = load i32, i32* %3
%32 = icmp eq i32 %31, 1
br i1 %32, label %33, label %47
33: ; preds = %30
%34 = load i32, i32* %2
%35 = icmp eq i32 %34, 92
br i1 %35, label %36, label %37
36: ; preds = %33
store i32 2, i32* %3
br label %44
37: ; preds = %33
%38 = load i32, i32* %2
%39 = load i8, i8* %5
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %38, %40
br i1 %41, label %42, label %43
42: ; preds = %37
store i32 0, i32* %3
br label %43
43: ; preds = %42, %37
br label %44
44: ; preds = %43, %36
%45 = load i32, i32* %2
%46 = call i32 @putchar(i32 %45)
br label %115
47: ; preds = %30
%48 = load i32, i32* %3
%49 = icmp eq i32 %48, 2
br i1 %49, label %50, label %53
50: ; preds = %47
%51 = load i32, i32* %2
%52 = call i32 @putchar(i32 %51)
store i32 1, i32* %3
br label %114
53: ; preds = %47
%54 = load i32, i32* %3
%55 = icmp eq i32 %54, 3
br i1 %55, label %56, label %77
56: ; preds = %53
%57 = load i32, i32* %2
%58 = icmp eq i32 %57, 42
br i1 %58, label %62, label %59
59: ; preds = %56
%60 = load i32, i32* %2
%61 = icmp eq i32 %60, 47
br i1 %61, label %62, label %72
62: ; preds = %59, %56
store i32 5, i32* %3
%63 = load i32, i32* %2
%64 = icmp eq i32 %63, 42
br i1 %64, label %65, label %66
65: ; preds = %62
store i32 0, i32* %4
br label %71
66: ; preds = %62
%67 = load i32, i32* %2
%68 = icmp eq i32 %67, 47
br i1 %68, label %69, label %70
69: ; preds = %66
store i32 1, i32* %4
br label %70
70: ; preds = %69, %66
br label %71
71: ; preds = %70, %65
br label %76
72: ; preds = %59
%73 = call i32 @putchar(i32 47)
%74 = load i32, i32* %2
%75 = call i32 @putchar(i32 %74)
store i32 0, i32* %3
br label %76
76: ; preds = %72, %71
br label %113
77: ; preds = %53
%78 = load i32, i32* %3
%79 = icmp eq i32 %78, 4
br i1 %79, label %80, label %90
80: ; preds = %77
%81 = load i32, i32* %2
%82 = icmp eq i32 %81, 47
br i1 %82, label %83, label %84
83: ; preds = %80
store i32 0, i32* %3
br label %89
84: ; preds = %80
%85 = load i32, i32* %2
%86 = icmp ne i32 %85, 42
br i1 %86, label %87, label %88
87: ; preds = %84
store i32 5, i32* %3
br label %88
88: ; preds = %87, %84
br label %89
89: ; preds = %88, %83
br label %112
90: ; preds = %77
%91 = load i32, i32* %3
%92 = icmp eq i32 %91, 5
br i1 %92, label %93, label %111
93: ; preds = %90
%94 = load i32, i32* %2
%95 = icmp eq i32 %94, 10
br i1 %95, label %96, label %102
96: ; preds = %93
%97 = load i32, i32* %4
%98 = icmp ne i32 %97, 0
br i1 %98, label %99, label %102
99: ; preds = %96
%100 = load i32, i32* %2
%101 = call i32 @putchar(i32 %100)
store i32 0, i32* %3
br label %110
102: ; preds = %96, %93
%103 = load i32, i32* %2
%104 = icmp eq i32 %103, 42
br i1 %104, label %105, label %109
105: ; preds = %102
%106 = load i32, i32* %4
%107 = icmp eq i32 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %105
store i32 4, i32* %3
br label %109
109: ; preds = %108, %105, %102
br label %110
110: ; preds = %109, %99
br label %111
111: ; preds = %110, %90
br label %112
112: ; preds = %111, %89
br label %113
113: ; preds = %112, %76
br label %114
114: ; preds = %113, %50
br label %115
115: ; preds = %114, %44
br label %116
116: ; preds = %115, %29
br label %6
117: ; preds = %6
ret i32 0
}

LLVM IR (-O2):
@EOF = global i32 0
define i32 @main() {
%1 = tail call i32 (...) @getchar()
%2 = load i32, i32* @EOF
%3 = icmp eq i32 %1, %2
br i1 %3, label %52, label %4
4: ; preds = %0, %45
%5 = phi i32 [ %49, %45 ], [ %1, %0 ]
%6 = phi i8 [ %48, %45 ], [ undef, %0 ]
%7 = phi i32 [ %47, %45 ], [ 1, %0 ]
%8 = phi i32 [ %46, %45 ], [ 0, %0 ]
switch i32 %8, label %45 [
i32 0, label %9
i32 1, label %16
i32 2, label %23
i32 3, label %25
i32 4, label %30
i32 5, label %32
]
9: ; preds = %4
switch i32 %5, label %12 [
i32 47, label %45
i32 39, label %10
i32 34, label %10
]
10: ; preds = %9, %9
%11 = trunc i32 %5 to i8
br label %12
12: ; preds = %9, %10
%13 = phi i32 [ 1, %10 ], [ 0, %9 ]
%14 = phi i8 [ %11, %10 ], [ %6, %9 ]
%15 = tail call i32 @putchar(i32 %5)
br label %45
16: ; preds = %4
%17 = icmp eq i32 %5, 92
%18 = sext i8 %6 to i32
%19 = icmp ne i32 %5, %18
%20 = zext i1 %19 to i32
%21 = select i1 %17, i32 2, i32 %20
%22 = tail call i32 @putchar(i32 %5)
br label %45
23: ; preds = %4
%24 = tail call i32 @putchar(i32 %5)
br label %45
25: ; preds = %4
switch i32 %5, label %27 [
i32 42, label %45
i32 47, label %26
]
26: ; preds = %25
br label %45
27: ; preds = %25
%28 = tail call i32 @putchar(i32 47)
%29 = tail call i32 @putchar(i32 %5)
br label %45
30: ; preds = %4
switch i32 %5, label %31 [
i32 47, label %45
i32 42, label %44
]
31: ; preds = %30
br label %45
32: ; preds = %4
%33 = icmp eq i32 %5, 10
%34 = icmp ne i32 %7, 0
%35 = select i1 %33, i1 %34, i1 false
br i1 %35, label %36, label %38
36: ; preds = %32
%37 = tail call i32 @putchar(i32 10)
br label %45
38: ; preds = %32
%39 = icmp eq i32 %5, 42
%40 = icmp eq i32 %7, 0
%41 = select i1 %39, i1 %40, i1 false
%42 = select i1 %41, i32 4, i32 5
%43 = select i1 %41, i32 0, i32 %7
br label %45
44: ; preds = %30
br label %45
45: ; preds = %38, %9, %4, %30, %44, %25, %16, %26, %27, %36, %31, %23, %12
%46 = phi i32 [ %13, %12 ], [ %21, %16 ], [ 1, %23 ], [ 5, %26 ], [ 0, %27 ], [ 5, %31 ], [ 0, %36 ], [ 3, %9 ], [ 5, %25 ], [ 0, %30 ], [ 4, %44 ], [ %8, %4 ], [ %42, %38 ]
%47 = phi i32 [ %7, %12 ], [ %7, %16 ], [ %7, %23 ], [ 1, %26 ], [ %7, %27 ], [ %7, %31 ], [ 1, %36 ], [ %7, %9 ], [ 0, %25 ], [ %7, %30 ], [ %7, %44 ], [ %7, %4 ], [ %43, %38 ]
%48 = phi i8 [ %14, %12 ], [ %6, %16 ], [ %6, %23 ], [ %6, %26 ], [ %6, %27 ], [ %6, %31 ], [ %6, %36 ], [ %6, %9 ], [ %6, %25 ], [ %6, %30 ], [ %6, %44 ], [ %6, %4 ], [ %6, %38 ]
%49 = tail call i32 (...) @getchar()
%50 = load i32, i32* @EOF
%51 = icmp eq i32 %49, %50
br i1 %51, label %52, label %4
52: ; preds = %45, %0
ret i32 0
}