int check_bracket_open(char vet[], int i, char symbol[]) {
  int counter;
  char single_quote, double_quote, commentary;
  single_quote = double_quote = commentary = 1;
  for (counter = 0; i >= 0; --i) {
    if (vet[i] == '\'' && single_quote == 1)
      single_quote = 2;
    else if (vet[i] == '\'' && single_quote == 2)
      single_quote = 1;
    if (vet[i] == '"' && double_quote == 1)
      double_quote = 2;
    else if (vet[i] == '"' && double_quote == 2)
      double_quote = 1;
    if (vet[i] == '/' && vet[i - 1] == '*' && commentary == 1)
      commentary = 2;
    else if (vet[i] == '*' && vet[i - 1] == '/' && commentary == 2)
      commentary = 1;
    if (single_quote == 1 && double_quote == 1 && commentary == 1) {
      if (vet[i] == symbol[0])
        --counter;
      else if (vet[i] == symbol[1])
        ++counter;
      if (counter == 0)
        return 2;
    }
  }
  return 1;
}


x86 assembly (clang, -O0):
<check_bracket_open>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
movb   $0x1,-0x27(%rbp)
movb   $0x1,-0x26(%rbp)
movb   $0x1,-0x25(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     130a <check_bracket_open+0x20a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    1157 <check_bracket_open+0x57>
movsbl -0x25(%rbp),%eax
cmp    $0x1,%eax
jne    1157 <check_bracket_open+0x57>
movb   $0x2,-0x25(%rbp)
jmp    1182 <check_bracket_open+0x82>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    117d <check_bracket_open+0x7d>
movsbl -0x25(%rbp),%eax
cmp    $0x2,%eax
jne    117d <check_bracket_open+0x7d>
movb   $0x1,-0x25(%rbp)
jmp    1182 <check_bracket_open+0x82>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    11ad <check_bracket_open+0xad>
movsbl -0x26(%rbp),%eax
cmp    $0x1,%eax
jne    11ad <check_bracket_open+0xad>
movb   $0x2,-0x26(%rbp)
jmp    11d8 <check_bracket_open+0xd8>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    11d3 <check_bracket_open+0xd3>
movsbl -0x26(%rbp),%eax
cmp    $0x2,%eax
jne    11d3 <check_bracket_open+0xd3>
movb   $0x1,-0x26(%rbp)
jmp    11d8 <check_bracket_open+0xd8>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    121d <check_bracket_open+0x11d>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    121d <check_bracket_open+0x11d>
movsbl -0x27(%rbp),%eax
cmp    $0x1,%eax
jne    121d <check_bracket_open+0x11d>
movb   $0x2,-0x27(%rbp)
jmp    1262 <check_bracket_open+0x162>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    125d <check_bracket_open+0x15d>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    125d <check_bracket_open+0x15d>
movsbl -0x27(%rbp),%eax
cmp    $0x2,%eax
jne    125d <check_bracket_open+0x15d>
movb   $0x1,-0x27(%rbp)
jmp    1262 <check_bracket_open+0x162>
movsbl -0x25(%rbp),%eax
cmp    $0x1,%eax
jne    12f7 <check_bracket_open+0x1f7>
movsbl -0x26(%rbp),%eax
cmp    $0x1,%eax
jne    12f7 <check_bracket_open+0x1f7>
movsbl -0x27(%rbp),%eax
cmp    $0x1,%eax
jne    12f7 <check_bracket_open+0x1f7>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    12b2 <check_bracket_open+0x1b2>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    12dc <check_bracket_open+0x1dc>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jne    12d7 <check_bracket_open+0x1d7>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12dc <check_bracket_open+0x1dc>
cmpl   $0x0,-0x24(%rbp)
jne    12f2 <check_bracket_open+0x1f2>
movl   $0x2,-0x4(%rbp)
jmp    1311 <check_bracket_open+0x211>
jmp    12f7 <check_bracket_open+0x1f7>
jmp    12fc <check_bracket_open+0x1fc>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1122 <check_bracket_open+0x22>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_bracket_open>:
push   %rbp
push   %r14
push   %rbx
test   %esi,%esi
js     1203 <check_bracket_open+0x103>
mov    %esi,%eax
add    $0x1,%rax
xor    %r10d,%r10d
mov    $0x1,%r11b
mov    $0x1,%r9d
mov    $0x2,%r8d
mov    $0x1,%sil
mov    $0x1,%cl
jmp    1146 <check_bracket_open+0x46>
nopl   0x0(%rax,%rax,1)
mov    $0x1,%r11b
add    %ebp,%r10d
je     120d <check_bracket_open+0x10d>
add    $0xffffffffffffffff,%rax
jle    1203 <check_bracket_open+0x103>
cmp    $0x2,%sil
movzbl %sil,%esi
mov    %esi,%ebp
cmove  %r9d,%ebp
movzbl -0x1(%rdi,%rax,1),%ebx
cmp    $0x22,%bl
cmovne %esi,%ebp
cmp    $0x1,%sil
mov    %ebp,%esi
cmove  %r8d,%esi
cmp    $0x22,%bl
cmovne %ebp,%esi
cmp    $0x2,%cl
movzbl %cl,%ecx
mov    %ecx,%ebp
cmove  %r9d,%ebp
cmp    $0x27,%bl
cmovne %ecx,%ebp
cmp    $0x1,%cl
mov    %ebp,%ecx
cmove  %r8d,%ecx
cmp    $0x27,%bl
cmovne %ebp,%ecx
cmp    $0x2a,%bl
je     11b0 <check_bracket_open+0xb0>
cmp    $0x2f,%bl
jne    11cb <check_bracket_open+0xcb>
cmpb   $0x2a,-0x2(%rdi,%rax,1)
jne    11cb <check_bracket_open+0xcb>
cmp    $0x1,%r11b
jne    11cb <check_bracket_open+0xcb>
mov    $0x2,%r11b
jmp    113c <check_bracket_open+0x3c>
nopl   0x0(%rax)
movzbl -0x2(%rdi,%rax,1),%ebp
xor    $0x2f,%bpl
movzbl %r11b,%r14d
xor    $0x2,%r11b
or     %bpl,%r11b
cmove  %r9d,%r14d
mov    %r14d,%r11d
cmp    $0x1,%cl
jne    113c <check_bracket_open+0x3c>
cmp    $0x1,%sil
jne    113c <check_bracket_open+0x3c>
cmp    $0x1,%r11b
jne    113c <check_bracket_open+0x3c>
mov    $0xffffffff,%ebp
cmp    (%rdx),%bl
je     1130 <check_bracket_open+0x30>
xor    %ebp,%ebp
cmp    0x1(%rdx),%bl
sete   %bpl
jmp    1130 <check_bracket_open+0x30>
mov    $0x1,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    $0x2,%eax
jmp    1208 <check_bracket_open+0x108>

LLVM IR (-O0):
define i32 @check_bracket_open(i8* %0, i32 %1, i8* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i8
%10 = alloca i8
%11 = alloca i8
store i8* %0, i8** %5
store i32 %1, i32* %6
store i8* %2, i8** %7
store i8 1, i8* %11
store i8 1, i8* %10
store i8 1, i8* %9
store i32 0, i32* %8
br label %12
12: ; preds = %163, %3
%13 = load i32, i32* %6
%14 = icmp sge i32 %13, 0
br i1 %14, label %15, label %166
15: ; preds = %12
%16 = load i8*, i8** %5
%17 = load i32, i32* %6
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds i8, i8* %16, i64 %18
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, 39
br i1 %22, label %23, label %28
23: ; preds = %15
%24 = load i8, i8* %9
%25 = sext i8 %24 to i32
%26 = icmp eq i32 %25, 1
br i1 %26, label %27, label %28
27: ; preds = %23
store i8 2, i8* %9
br label %42
28: ; preds = %23, %15
%29 = load i8*, i8** %5
%30 = load i32, i32* %6
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %29, i64 %31
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp eq i32 %34, 39
br i1 %35, label %36, label %41
36: ; preds = %28
%37 = load i8, i8* %9
%38 = sext i8 %37 to i32
%39 = icmp eq i32 %38, 2
br i1 %39, label %40, label %41
40: ; preds = %36
store i8 1, i8* %9
br label %41
41: ; preds = %40, %36, %28
br label %42
42: ; preds = %41, %27
%43 = load i8*, i8** %5
%44 = load i32, i32* %6
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %43, i64 %45
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = icmp eq i32 %48, 34
br i1 %49, label %50, label %55
50: ; preds = %42
%51 = load i8, i8* %10
%52 = sext i8 %51 to i32
%53 = icmp eq i32 %52, 1
br i1 %53, label %54, label %55
54: ; preds = %50
store i8 2, i8* %10
br label %69
55: ; preds = %50, %42
%56 = load i8*, i8** %5
%57 = load i32, i32* %6
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 34
br i1 %62, label %63, label %68
63: ; preds = %55
%64 = load i8, i8* %10
%65 = sext i8 %64 to i32
%66 = icmp eq i32 %65, 2
br i1 %66, label %67, label %68
67: ; preds = %63
store i8 1, i8* %10
br label %68
68: ; preds = %67, %63, %55
br label %69
69: ; preds = %68, %54
%70 = load i8*, i8** %5
%71 = load i32, i32* %6
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %70, i64 %72
%74 = load i8, i8* %73
%75 = sext i8 %74 to i32
%76 = icmp eq i32 %75, 47
br i1 %76, label %77, label %91
77: ; preds = %69
%78 = load i8*, i8** %5
%79 = load i32, i32* %6
%80 = sub nsw i32 %79, 1
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %78, i64 %81
%83 = load i8, i8* %82
%84 = sext i8 %83 to i32
%85 = icmp eq i32 %84, 42
br i1 %85, label %86, label %91
86: ; preds = %77
%87 = load i8, i8* %11
%88 = sext i8 %87 to i32
%89 = icmp eq i32 %88, 1
br i1 %89, label %90, label %91
90: ; preds = %86
store i8 2, i8* %11
br label %114
91: ; preds = %86, %77, %69
%92 = load i8*, i8** %5
%93 = load i32, i32* %6
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8, i8* %92, i64 %94
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = icmp eq i32 %97, 42
br i1 %98, label %99, label %113
99: ; preds = %91
%100 = load i8*, i8** %5
%101 = load i32, i32* %6
%102 = sub nsw i32 %101, 1
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %100, i64 %103
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = icmp eq i32 %106, 47
br i1 %107, label %108, label %113
108: ; preds = %99
%109 = load i8, i8* %11
%110 = sext i8 %109 to i32
%111 = icmp eq i32 %110, 2
br i1 %111, label %112, label %113
112: ; preds = %108
store i8 1, i8* %11
br label %113
113: ; preds = %112, %108, %99, %91
br label %114
114: ; preds = %113, %90
%115 = load i8, i8* %9
%116 = sext i8 %115 to i32
%117 = icmp eq i32 %116, 1
br i1 %117, label %118, label %162
118: ; preds = %114
%119 = load i8, i8* %10
%120 = sext i8 %119 to i32
%121 = icmp eq i32 %120, 1
br i1 %121, label %122, label %162
122: ; preds = %118
%123 = load i8, i8* %11
%124 = sext i8 %123 to i32
%125 = icmp eq i32 %124, 1
br i1 %125, label %126, label %162
126: ; preds = %122
%127 = load i8*, i8** %5
%128 = load i32, i32* %6
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds i8, i8* %127, i64 %129
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = load i8*, i8** %7
%134 = getelementptr inbounds i8, i8* %133, i64 0
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
%137 = icmp eq i32 %132, %136
br i1 %137, label %138, label %141
138: ; preds = %126
%139 = load i32, i32* %8
%140 = add nsw i32 %139, -1
store i32 %140, i32* %8
br label %157
141: ; preds = %126
%142 = load i8*, i8** %5
%143 = load i32, i32* %6
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds i8, i8* %142, i64 %144
%146 = load i8, i8* %145
%147 = sext i8 %146 to i32
%148 = load i8*, i8** %7
%149 = getelementptr inbounds i8, i8* %148, i64 1
%150 = load i8, i8* %149
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %147, %151
br i1 %152, label %153, label %156
153: ; preds = %141
%154 = load i32, i32* %8
%155 = add nsw i32 %154, 1
store i32 %155, i32* %8
br label %156
156: ; preds = %153, %141
br label %157
157: ; preds = %156, %138
%158 = load i32, i32* %8
%159 = icmp eq i32 %158, 0
br i1 %159, label %160, label %161
160: ; preds = %157
store i32 2, i32* %4
br label %167
161: ; preds = %157
br label %162
162: ; preds = %161, %122, %118, %114
br label %163
163: ; preds = %162
%164 = load i32, i32* %6
%165 = add nsw i32 %164, -1
store i32 %165, i32* %6
br label %12
166: ; preds = %12
store i32 1, i32* %4
br label %167
167: ; preds = %166, %160
%168 = load i32, i32* %4
ret i32 %168
}

LLVM IR (-O2):
define i32 @check_bracket_open(i8* nocapture %0, i32 %1, i8* nocapture %2) {
%4 = icmp sgt i32 %1, -1
br i1 %4, label %5, label %68
5: ; preds = %3
%6 = getelementptr inbounds i8, i8* %2, i64 1
%7 = zext i32 %1 to i64
br label %8
8: ; preds = %5, %63
%9 = phi i64 [ %7, %5 ], [ %66, %63 ]
%10 = phi i8 [ 1, %5 ], [ %64, %63 ]
%11 = phi i8 [ 1, %5 ], [ %29, %63 ]
%12 = phi i8 [ 1, %5 ], [ %22, %63 ]
%13 = phi i32 [ 0, %5 ], [ %65, %63 ]
%14 = getelementptr inbounds i8, i8* %0, i64 %9
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 39
%17 = icmp eq i8 %12, 1
%18 = select i1 %16, i1 %17, i1 false
%19 = icmp eq i8 %12, 2
%20 = select i1 %16, i1 %19, i1 false
%21 = select i1 %20, i8 1, i8 %12
%22 = select i1 %18, i8 2, i8 %21
%23 = icmp eq i8 %15, 34
%24 = icmp eq i8 %11, 1
%25 = select i1 %23, i1 %24, i1 false
%26 = icmp eq i8 %11, 2
%27 = select i1 %23, i1 %26, i1 false
%28 = select i1 %27, i8 1, i8 %11
%29 = select i1 %25, i8 2, i8 %28
switch i8 %15, label %45 [
i8 47, label %30
i8 42, label %37
]
30: ; preds = %8
%31 = add nsw i64 %9, -1
%32 = getelementptr inbounds i8, i8* %0, i64 %31
%33 = load i8, i8* %32
%34 = icmp eq i8 %33, 42
%35 = icmp eq i8 %10, 1
%36 = select i1 %34, i1 %35, i1 false
br i1 %36, label %63, label %45
37: ; preds = %8
%38 = add nsw i64 %9, -1
%39 = getelementptr inbounds i8, i8* %0, i64 %38
%40 = load i8, i8* %39
%41 = icmp eq i8 %40, 47
%42 = icmp eq i8 %10, 2
%43 = select i1 %41, i1 %42, i1 false
%44 = select i1 %43, i8 1, i8 %10
br label %45
45: ; preds = %8, %30, %37
%46 = phi i8 [ %44, %37 ], [ %10, %30 ], [ %10, %8 ]
%47 = icmp eq i8 %22, 1
%48 = icmp eq i8 %29, 1
%49 = select i1 %47, i1 %48, i1 false
%50 = icmp eq i8 %46, 1
%51 = select i1 %49, i1 %50, i1 false
br i1 %51, label %52, label %63
52: ; preds = %45
%53 = load i8, i8* %2
%54 = icmp eq i8 %15, %53
br i1 %54, label %59, label %55
55: ; preds = %52
%56 = load i8, i8* %6
%57 = icmp eq i8 %15, %56
%58 = zext i1 %57 to i32
br label %59
59: ; preds = %52, %55
%60 = phi i32 [ %58, %55 ], [ -1, %52 ]
%61 = add nsw i32 %13, %60
%62 = icmp eq i32 %61, 0
br i1 %62, label %68, label %63
63: ; preds = %30, %45, %59
%64 = phi i8 [ 1, %59 ], [ %46, %45 ], [ 2, %30 ]
%65 = phi i32 [ %61, %59 ], [ %13, %45 ], [ %13, %30 ]
%66 = add nsw i64 %9, -1
%67 = icmp sgt i64 %9, 0
br i1 %67, label %8, label %68
68: ; preds = %59, %63, %3
%69 = phi i32 [ 1, %3 ], [ 1, %63 ], [ 2, %59 ]
ret i32 %69
}