int is_token_end(str_com_id, ch)
char ch;
int str_com_id;
{
  char ch1[2];
  ch1[0] = ch;
  ch1[1] = '\0';
  if (is_eof_token(ch1) == 1)
    return (1);
  if (str_com_id == 1) {
    if (ch == '"' | ch == '\n')
      return (1);
    else
      return (0);
  }
  if (str_com_id == 2) {
    if (ch == '\n')
      return (1);
    else
      return (0);
  }
  if (is_spec_symbol(ch1) == 1)
    return (1);
  if (ch == ' ' || ch == '\n' || ch == 59)
    return (1);
  return (0);
}


x86 assembly (clang, -O0):
<is_token_end>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %sil,%al
mov    %edi,-0x8(%rbp)
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
mov    %al,-0xb(%rbp)
movb   $0x0,-0xa(%rbp)
lea    -0xb(%rbp),%rdi
mov    $0x0,%al
call   1040 <is_eof_token@plt>
cmp    $0x1,%eax
jne    115b <is_token_end+0x3b>
movl   $0x1,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
cmpl   $0x1,-0x8(%rbp)
jne    11a7 <is_token_end+0x87>
movsbl -0x9(%rbp),%eax
cmp    $0x22,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
movsbl -0x9(%rbp),%ecx
cmp    $0xa,%ecx
sete   %cl
and    $0x1,%cl
movzbl %cl,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     119b <is_token_end+0x7b>
movl   $0x1,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
movl   $0x0,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
cmpl   $0x2,-0x8(%rbp)
jne    11d6 <is_token_end+0xb6>
movsbl -0x9(%rbp),%eax
cmp    $0xa,%eax
jne    11ca <is_token_end+0xaa>
movl   $0x1,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
movl   $0x0,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
lea    -0xb(%rbp),%rdi
mov    $0x0,%al
call   1030 <is_spec_symbol@plt>
cmp    $0x1,%eax
jne    11f6 <is_token_end+0xd6>
movl   $0x1,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
movsbl -0x9(%rbp),%eax
cmp    $0x20,%eax
je     121d <is_token_end+0xfd>
movsbl -0x9(%rbp),%eax
cmp    $0xa,%eax
je     121d <is_token_end+0xfd>
movsbl -0x9(%rbp),%eax
cmp    $0x3b,%eax
jne    1229 <is_token_end+0x109>
movl   $0x1,-0x4(%rbp)
jmp    1230 <is_token_end+0x110>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_token_end>:
push   %rbp
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    %esi,%ebx
mov    %edi,%ebp
mov    %bl,0xe(%rsp)
movb   $0x0,0xf(%rsp)
lea    0xe(%rsp),%rdi
xor    %eax,%eax
call   1040 <is_eof_token@plt>
mov    $0x1,%r14b
cmp    $0x1,%eax
je     11a6 <is_token_end+0x86>
cmp    $0x2,%ebp
je     116e <is_token_end+0x4e>
cmp    $0x1,%ebp
jne    1177 <is_token_end+0x57>
shl    $0x18,%ebx
cmp    $0x22000000,%ebx
sete   %al
cmp    $0xa000000,%ebx
sete   %r14b
or     %al,%r14b
jmp    11a6 <is_token_end+0x86>
cmp    $0xa,%bl
sete   %r14b
jmp    11a6 <is_token_end+0x86>
lea    0xe(%rsp),%rdi
xor    %eax,%eax
call   1030 <is_spec_symbol@plt>
cmp    $0x1,%eax
je     11a6 <is_token_end+0x86>
shl    $0x18,%ebx
cmp    $0xa000000,%ebx
je     11a6 <is_token_end+0x86>
cmp    $0x20000000,%ebx
je     11a6 <is_token_end+0x86>
cmp    $0x3b000000,%ebx
je     11a6 <is_token_end+0x86>
xor    %r14d,%r14d
movzbl %r14b,%eax
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define i32 @is_token_end(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8
%6 = alloca [2 x i8]
%7 = trunc i32 %1 to i8
store i32 %0, i32* %4
store i8 %7, i8* %5
%8 = load i8, i8* %5
%9 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 0
store i8 %8, i8* %9
%10 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 1
store i8 0, i8* %10
%11 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 0
%12 = call i32 (i8*, ...) bitcast (i32 (...)* @is_eof_token to i32 (i8*, ...)*)(i8* %11)
%13 = icmp eq i32 %12, 1
br i1 %13, label %14, label %15
14: ; preds = %2
store i32 1, i32* %3
br label %59
15: ; preds = %2
%16 = load i32, i32* %4
%17 = icmp eq i32 %16, 1
br i1 %17, label %18, label %31
18: ; preds = %15
%19 = load i8, i8* %5
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 34
%22 = zext i1 %21 to i32
%23 = load i8, i8* %5
%24 = sext i8 %23 to i32
%25 = icmp eq i32 %24, 10
%26 = zext i1 %25 to i32
%27 = or i32 %22, %26
%28 = icmp ne i32 %27, 0
br i1 %28, label %29, label %30
29: ; preds = %18
store i32 1, i32* %3
br label %59
30: ; preds = %18
store i32 0, i32* %3
br label %59
31: ; preds = %15
%32 = load i32, i32* %4
%33 = icmp eq i32 %32, 2
br i1 %33, label %34, label %40
34: ; preds = %31
%35 = load i8, i8* %5
%36 = sext i8 %35 to i32
%37 = icmp eq i32 %36, 10
br i1 %37, label %38, label %39
38: ; preds = %34
store i32 1, i32* %3
br label %59
39: ; preds = %34
store i32 0, i32* %3
br label %59
40: ; preds = %31
%41 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 0
%42 = call i32 (i8*, ...) bitcast (i32 (...)* @is_spec_symbol to i32 (i8*, ...)*)(i8* %41)
%43 = icmp eq i32 %42, 1
br i1 %43, label %44, label %45
44: ; preds = %40
store i32 1, i32* %3
br label %59
45: ; preds = %40
%46 = load i8, i8* %5
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 32
br i1 %48, label %57, label %49
49: ; preds = %45
%50 = load i8, i8* %5
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 10
br i1 %52, label %57, label %53
53: ; preds = %49
%54 = load i8, i8* %5
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %55, 59
br i1 %56, label %57, label %58
57: ; preds = %53, %49, %45
store i32 1, i32* %3
br label %59
58: ; preds = %53
store i32 0, i32* %3
br label %59
59: ; preds = %58, %57, %44, %39, %38, %30, %29, %14
%60 = load i32, i32* %3
ret i32 %60
}

LLVM IR (-O2):
define i32 @is_token_end(i32 %0, i32 %1) {
%3 = alloca [2 x i8]
%4 = trunc i32 %1 to i8
%5 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
store i8 %4, i8* %5
%6 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 1
store i8 0, i8* %6
%7 = call i32 (i8*, ...) bitcast (i32 (...)* @is_eof_token to i32 (i8*, ...)*)(i8* %5)
%8 = icmp eq i32 %7, 1
br i1 %8, label %24, label %9
9: ; preds = %2
switch i32 %0, label %18 [
i32 1, label %10
i32 2, label %15
]
10: ; preds = %9
%11 = shl i32 %1, 24
%12 = icmp eq i32 %11, 570425344
%13 = icmp eq i32 %11, 167772160
%14 = or i1 %12, %13
br label %24
15: ; preds = %9
%16 = and i32 %1, 255
%17 = icmp eq i32 %16, 10
br label %24
18: ; preds = %9
%19 = call i32 (i8*, ...) bitcast (i32 (...)* @is_spec_symbol to i32 (i8*, ...)*)(i8* %5)
%20 = icmp eq i32 %19, 1
br i1 %20, label %24, label %21
21: ; preds = %18
%22 = shl i32 %1, 24
switch i32 %22, label %23 [
i32 989855744, label %24
i32 536870912, label %24
i32 167772160, label %24
]
23: ; preds = %21
br label %24
24: ; preds = %10, %21, %21, %21, %18, %15, %2, %23
%25 = phi i1 [ false, %23 ], [ true, %2 ], [ %17, %15 ], [ true, %18 ], [ true, %21 ], [ true, %21 ], [ true, %21 ], [ %14, %10 ]
%26 = zext i1 %25 to i32
ret i32 %26
}