1 /*-
2  * Copyright (c) 2007, Marcus von Appen
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer
10  *    in this position and unchanged.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  *
28  */
29 
30 #ifndef CGRAPH_H
31 #define CGRAPH_H
32 
33 #include "graph.h"
34 
35 /*
36  * Possible token types. The C language specs define several constructs,
37  * which have to be taken care of.
38  */
39 enum
40 {
41     UNKNOWN,      /* Unknown token type. */
42     ENDOFFILE,    /* End of file marker, set by EOF. */
43 
44     ARGSTART,     /* Argument list of something. */
45     ARGEND,       /* Argument list of something. */
46 
47     BODYSTART,    /* Body of an object, enclosed by brackets. */
48     BODYEND,      /* Body of an object, enclosed by brackets. */
49 
50     STATIC,       /* 'static' keyword. */
51     EXTERN,       /* 'extern' keyword. */
52     TYPEDEF,      /* 'typedef' keyword. */
53     STRUCT,       /* 'struct'or 'union'. */
54     ENUM,         /* 'enum'. */
55 
56     ARRAYSTART,   /* Array access, like e.g str[7] or foo[get_no()]. */
57     ARRAYEND,     /* Array access, like e.g str[7] or foo[get_no()]. */
58     OPERATOR,     /* Operator, e.g. +, -, /, ... */
59     SEMICOLON,    /* ; */
60     COLON,        /* : */
61     COMMA,        /* , */
62     ASSIGN,       /* Assignment of an variable, e.g. = or combines. */
63     REFERENCE,    /* Reference access through pointers, e.g. -> or '.'. */
64     POINTER,      /* Pointer '*' */
65 
66     IDENTIFIER    /* An identifier like 'i' or 'strcmp'. */
67 };
68 
69 bool_t lex_create_graph (graph_t *graph, FILE *fp, char *filename);
70 
71 #endif /* CGRAPH_H */
72