blob: 5700f9915996eb932fe5d930e79c478aecb379f1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/**
* @file seaspider/SeaspiderTest.c
* @brief C file to test Seaspider's parsing
*/
/* include */
#include <stdio.h>
#define PRE_PROC_DIR 0
struct MyStruct {
int member;
struct MyStruct *part;
};
enum MyEnum{
enumMember1,
enumMember2,
enumMember3
};
static int fun(int arg1, int arg2)
{
return arg1 + arg2;
}
/*
* "inline" is a showstopper for the parser!
*
inline int funInline(int arg1, int arg2)
{
return arg1 + arg2;
}
*/
int main(int args, const char * argv[])
{
/* variables declarations */
struct MyStruct whole;
struct MyStruct part;
enum MyEnum myEnum;
int i;
int x, y;
/* Allocations and assignments */
whole.member = 1;
whole.part = ∂
whole.part->member = 2;
myEnum = enumMember3;
x = 0, y = 1;
/* block */
{
/* arithmetic and logic operations */
float f = 20.0;
whole.part->member = (int)(whole.part->member + 5) - 6; // cast - multilevel assignment
}
/* for loop */
for (i = 0; i < 2; i++) {
/* conditional expressions */
if ( x > 0) {
while (y < 5) {
y++;
}
} else if (x > 0 || y == 4) {
do {
y--;
} while (y != 1);
}
else {
switch (myEnum) {
case enumMember1:
fun(enumMember1, enumMember2);
break;
case enumMember2:
fun(enumMember1, enumMember2 ? enumMember2 : enumMember1); // ternary operator
break;
default:
fun(enumMember1, PRE_PROC_DIR); // preprocessing directive
break;
}
}
}
return 1;
}
|