#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 /*<<< orphan*/ next_token(char *);
char *skip_whitespace(char *);
scalar_t__ strncmp(char *, char *, int);
int /*<<< orphan*/ syntax_error_invalid_token(int /*<<< orphan*/);
char *consume_token(char *s, unsigned char token) {
  s = skip_whitespace(s);
  if ((token == 6 && *s == '=') || (token == 7 && *s == '+') ||
      (token == 8 && *s == '-') || (token == 9 && *s == '*') ||
      (token == 10 && *s == '/') || (token == 11 && *s == '%') ||
      (token == 12 && *s == ',')) {
    return s + 1;
  } else if (token == 6 && *s == '=' && *(s + 1) != '=') {
    return s + 1;
  } else if (token == 13 && *s == '=' && *(s + 1) == '=') {
    return s + 2;
  } else if (token == 15 && *s == '<' && *(s + 1) != '=') {
    return s + 1;
  } else if (token == 16 && *s == '<' && *(s + 1) == '=') {
    return s + 2;
  } else if (token == 17 && *s == '>' && *(s + 1) != '=') {
    return s + 1;
  } else if (token == 18 && *s == '>' && *(s + 1) == '=') {
    return s + 2;
  } else if (token == 19 && strncmp(s, "then", 4) == 0) {
    return s + 4;
  } else if (token == 20 && strncmp(s, "onerror", 7) == 0) {
    return s + 7;
  }
  syntax_error_invalid_token(next_token(s));
  return NULL;
}


x86 assembly (clang, -O0):
<consume_token>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %sil,%al
mov    %rdi,-0x10(%rbp)
mov    %al,-0x11(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <skip_whitespace@plt>
mov    %rax,-0x10(%rbp)
movzbl -0x11(%rbp),%eax
cmp    $0x6,%eax
jne    117c <consume_token+0x3c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
je     122a <consume_token+0xea>
movzbl -0x11(%rbp),%eax
cmp    $0x7,%eax
jne    1199 <consume_token+0x59>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     122a <consume_token+0xea>
movzbl -0x11(%rbp),%eax
cmp    $0x8,%eax
jne    11b6 <consume_token+0x76>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     122a <consume_token+0xea>
movzbl -0x11(%rbp),%eax
cmp    $0x9,%eax
jne    11d3 <consume_token+0x93>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     122a <consume_token+0xea>
movzbl -0x11(%rbp),%eax
cmp    $0xa,%eax
jne    11f0 <consume_token+0xb0>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     122a <consume_token+0xea>
movzbl -0x11(%rbp),%eax
cmp    $0xb,%eax
jne    120d <consume_token+0xcd>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
je     122a <consume_token+0xea>
movzbl -0x11(%rbp),%eax
cmp    $0xc,%eax
jne    123b <consume_token+0xfb>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
jne    123b <consume_token+0xfb>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0x6,%eax
jne    127a <consume_token+0x13a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
jne    127a <consume_token+0x13a>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3d,%eax
je     127a <consume_token+0x13a>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0xd,%eax
jne    12b9 <consume_token+0x179>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
jne    12b9 <consume_token+0x179>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3d,%eax
jne    12b9 <consume_token+0x179>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0xf,%eax
jne    12f8 <consume_token+0x1b8>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3c,%eax
jne    12f8 <consume_token+0x1b8>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3d,%eax
je     12f8 <consume_token+0x1b8>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0x10,%eax
jne    1337 <consume_token+0x1f7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3c,%eax
jne    1337 <consume_token+0x1f7>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3d,%eax
jne    1337 <consume_token+0x1f7>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0x11,%eax
jne    1376 <consume_token+0x236>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
jne    1376 <consume_token+0x236>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3d,%eax
je     1376 <consume_token+0x236>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0x12,%eax
jne    13b5 <consume_token+0x275>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
jne    13b5 <consume_token+0x275>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3d,%eax
jne    13b5 <consume_token+0x275>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0x13,%eax
jne    13f2 <consume_token+0x2b2>
mov    -0x10(%rbp),%rdi
lea    0xc33(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    13f2 <consume_token+0x2b2>
mov    -0x10(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
movzbl -0x11(%rbp),%eax
cmp    $0x14,%eax
jne    142f <consume_token+0x2ef>
mov    -0x10(%rbp),%rdi
lea    0xbfb(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    142f <consume_token+0x2ef>
mov    -0x10(%rbp),%rax
add    $0x7,%rax
mov    %rax,-0x8(%rbp)
jmp    146f <consume_token+0x32f>
jmp    1434 <consume_token+0x2f4>
jmp    1439 <consume_token+0x2f9>
jmp    143e <consume_token+0x2fe>
jmp    1443 <consume_token+0x303>
jmp    1448 <consume_token+0x308>
jmp    144d <consume_token+0x30d>
jmp    1452 <consume_token+0x312>
jmp    1457 <consume_token+0x317>
mov    -0x10(%rbp),%rdi
call   1060 <next_token@plt>
mov    %eax,%edi
call   1040 <syntax_error_invalid_token@plt>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<consume_token>:
push   %rbp
push   %rbx
push   %rax
mov    %esi,%ebp
call   1050 <skip_whitespace@plt>
mov    %rax,%rbx
add    $0xfa,%bpl
cmp    $0xe,%bpl
ja     1239 <consume_token+0xf9>
movzbl %bpl,%eax
lea    0xe9a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpb   $0x3d,(%rbx)
je     124c <consume_token+0x10c>
jmp    1239 <consume_token+0xf9>
cmpb   $0x2b,(%rbx)
je     124c <consume_token+0x10c>
jmp    1239 <consume_token+0xf9>
cmpb   $0x2d,(%rbx)
je     124c <consume_token+0x10c>
jmp    1239 <consume_token+0xf9>
cmpb   $0x2a,(%rbx)
je     124c <consume_token+0x10c>
jmp    1239 <consume_token+0xf9>
cmpb   $0x2f,(%rbx)
je     124c <consume_token+0x10c>
jmp    1239 <consume_token+0xf9>
cmpb   $0x25,(%rbx)
je     124c <consume_token+0x10c>
jmp    1239 <consume_token+0xf9>
cmpb   $0x2c,(%rbx)
jne    1239 <consume_token+0xf9>
jmp    124c <consume_token+0x10c>
cmpb   $0x3d,(%rbx)
jne    1239 <consume_token+0xf9>
jmp    11e4 <consume_token+0xa4>
cmpb   $0x3c,(%rbx)
je     11e4 <consume_token+0xa4>
jmp    1239 <consume_token+0xf9>
cmpb   $0x3e,(%rbx)
jne    1239 <consume_token+0xf9>
jmp    1233 <consume_token+0xf3>
cmpb   $0x3e,(%rbx)
jne    1239 <consume_token+0xf9>
cmpb   $0x3d,0x1(%rbx)
jne    1239 <consume_token+0xf9>
add    $0x2,%rbx
jmp    1250 <consume_token+0x110>
lea    0xe45(%rip),%rsi
mov    %rbx,%rdi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
jne    1239 <consume_token+0xf9>
add    $0x4,%rbx
jmp    1250 <consume_token+0x110>
lea    0xe2b(%rip),%rsi
mov    %rbx,%rdi
mov    $0x7,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
jne    1239 <consume_token+0xf9>
add    $0x7,%rbx
jmp    1250 <consume_token+0x110>
cmpb   $0x3c,(%rbx)
jne    1239 <consume_token+0xf9>
cmpb   $0x3d,0x1(%rbx)
jne    124c <consume_token+0x10c>
mov    %rbx,%rdi
call   1060 <next_token@plt>
mov    %eax,%edi
call   1040 <syntax_error_invalid_token@plt>
xor    %ebx,%ebx
jmp    1250 <consume_token+0x110>
add    $0x1,%rbx
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [5 x i8] c"then\00"
@.str.1 = [8 x i8] c"onerror\00"
define i8* @consume_token(i8* %0, i8 zeroext %1) {
%3 = tail call i8* @skip_whitespace(i8* %0)
switch i8 %1, label %78 [
i8 6, label %4
i8 7, label %7
i8 8, label %10
i8 9, label %13
i8 10, label %16
i8 11, label %19
i8 12, label %22
i8 13, label %27
i8 15, label %36
i8 16, label %43
i8 17, label %52
i8 18, label %59
i8 19, label %68
i8 20, label %73
]
4: ; preds = %2
%5 = load i8, i8* %3
%6 = icmp eq i8 %5, 61
br i1 %6, label %25, label %78
7: ; preds = %2
%8 = load i8, i8* %3
%9 = icmp eq i8 %8, 43
br i1 %9, label %25, label %78
10: ; preds = %2
%11 = load i8, i8* %3
%12 = icmp eq i8 %11, 45
br i1 %12, label %25, label %78
13: ; preds = %2
%14 = load i8, i8* %3
%15 = icmp eq i8 %14, 42
br i1 %15, label %25, label %78
16: ; preds = %2
%17 = load i8, i8* %3
%18 = icmp eq i8 %17, 47
br i1 %18, label %25, label %78
19: ; preds = %2
%20 = load i8, i8* %3
%21 = icmp eq i8 %20, 37
br i1 %21, label %25, label %78
22: ; preds = %2
%23 = load i8, i8* %3
%24 = icmp eq i8 %23, 44
br i1 %24, label %25, label %78
25: ; preds = %22, %19, %16, %13, %10, %7, %4
%26 = getelementptr inbounds i8, i8* %3, i64 1
br label %81
27: ; preds = %2
%28 = load i8, i8* %3
%29 = icmp eq i8 %28, 61
br i1 %29, label %30, label %78
30: ; preds = %27
%31 = getelementptr inbounds i8, i8* %3, i64 1
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, 61
br i1 %33, label %34, label %78
34: ; preds = %30
%35 = getelementptr inbounds i8, i8* %3, i64 2
br label %81
36: ; preds = %2
%37 = load i8, i8* %3
%38 = icmp eq i8 %37, 60
br i1 %38, label %39, label %78
39: ; preds = %36
%40 = getelementptr inbounds i8, i8* %3, i64 1
%41 = load i8, i8* %40
%42 = icmp eq i8 %41, 61
br i1 %42, label %78, label %81
43: ; preds = %2
%44 = load i8, i8* %3
%45 = icmp eq i8 %44, 60
br i1 %45, label %46, label %78
46: ; preds = %43
%47 = getelementptr inbounds i8, i8* %3, i64 1
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 61
br i1 %49, label %50, label %78
50: ; preds = %46
%51 = getelementptr inbounds i8, i8* %3, i64 2
br label %81
52: ; preds = %2
%53 = load i8, i8* %3
%54 = icmp eq i8 %53, 62
br i1 %54, label %55, label %78
55: ; preds = %52
%56 = getelementptr inbounds i8, i8* %3, i64 1
%57 = load i8, i8* %56
%58 = icmp eq i8 %57, 61
br i1 %58, label %78, label %81
59: ; preds = %2
%60 = load i8, i8* %3
%61 = icmp eq i8 %60, 62
br i1 %61, label %62, label %78
62: ; preds = %59
%63 = getelementptr inbounds i8, i8* %3, i64 1
%64 = load i8, i8* %63
%65 = icmp eq i8 %64, 61
br i1 %65, label %66, label %78
66: ; preds = %62
%67 = getelementptr inbounds i8, i8* %3, i64 2
br label %81
68: ; preds = %2
%69 = tail call i64 @strncmp(i8* %3, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 4)
%70 = icmp eq i64 %69, 0
br i1 %70, label %71, label %78
71: ; preds = %68
%72 = getelementptr inbounds i8, i8* %3, i64 4
br label %81
73: ; preds = %2
%74 = tail call i64 @strncmp(i8* %3, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i32 7)
%75 = icmp eq i64 %74, 0
br i1 %75, label %76, label %78
76: ; preds = %73
%77 = getelementptr inbounds i8, i8* %3, i64 7
br label %81
78: ; preds = %4, %2, %22, %7, %10, %13, %16, %19, %68, %59, %62, %52, %55, %43, %46, %36, %39, %27, %30, %73
%79 = tail call i32 @next_token(i8* %3)
%80 = tail call i32 @syntax_error_invalid_token(i32 %79)
br label %81
81: ; preds = %55, %39, %78, %76, %71, %66, %50, %34, %25
%82 = phi i8* [ %26, %25 ], [ %35, %34 ], [ %51, %50 ], [ %67, %66 ], [ %72, %71 ], [ %77, %76 ], [ null, %78 ], [ %40, %39 ], [ %56, %55 ]
ret i8* %82
}