blob: 97f01d06368d5403d697795d07535a3c40b55f27 [file] [log] [blame]
Carl Worth3a37b872010-05-10 11:44:09 -07001%{
2/*
3 * Copyright © 2010 Intel Corporation
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
14 * Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <string.h>
27
Carl Wortha1e32bc2010-05-10 13:17:25 -070028#include "glcpp.h"
Carl Worth3a37b872010-05-10 11:44:09 -070029#include "glcpp-parse.h"
30%}
31
Carl Worth38aa8352010-05-10 11:52:29 -070032%option reentrant noyywrap
Carl Worth5070a202010-05-12 12:45:33 -070033%option extra-type="glcpp_parser_t *"
Carl Worth3a37b872010-05-10 11:44:09 -070034
Carl Worth0b27b5f2010-05-10 16:16:06 -070035SPACE [[:space:]]
36NONSPACE [^[:space:]]
Carl Worth33cc4002010-05-12 12:17:10 -070037NEWLINE [\n]
Carl Worth0b27b5f2010-05-10 16:16:06 -070038HSPACE [ \t]
Carl Worthe36a4d52010-05-14 17:29:24 -070039HASH ^{HSPACE}*#{HSPACE}*
Carl Worth0b27b5f2010-05-10 16:16:06 -070040IDENTIFIER [_a-zA-Z][_a-zA-Z0-9]*
Carl Worth3ff81672010-05-25 13:09:03 -070041PUNCTUATION [][(){}.&*~!/%<>^|;,+-]
42OTHER [^][(){}.&*~!/%<>^|;,=#[:space:]+-]+
Carl Worth33cc4002010-05-12 12:17:10 -070043
Carl Worth03f6d5d2010-05-24 11:29:02 -070044DECIMAL_INTEGER [1-9][0-9]*[uU]?
45OCTAL_INTEGER 0[0-7]*[uU]?
46HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]?
47
Carl Worth3a37b872010-05-10 11:44:09 -070048%%
49
Carl Worth3ff81672010-05-25 13:09:03 -070050{HASH}define{HSPACE}+/{IDENTIFIER}"(" {
Carl Worthf34a0002010-05-25 16:59:02 -070051 yyextra->space_tokens = 0;
Carl Worth3ff81672010-05-25 13:09:03 -070052 return HASH_DEFINE_FUNC;
Carl Worthb20d33c2010-05-20 22:27:07 -070053}
54
Carl Worth3ff81672010-05-25 13:09:03 -070055{HASH}define {
Carl Worthf34a0002010-05-25 16:59:02 -070056 yyextra->space_tokens = 0;
Carl Worth3ff81672010-05-25 13:09:03 -070057 return HASH_DEFINE_OBJ;
Carl Worthb20d33c2010-05-20 22:27:07 -070058}
59
Carl Worth3ff81672010-05-25 13:09:03 -070060{HASH}undef {
Carl Worthf34a0002010-05-25 16:59:02 -070061 yyextra->space_tokens = 0;
Carl Worth3ff81672010-05-25 13:09:03 -070062 return HASH_UNDEF;
Carl Worth03f6d5d2010-05-24 11:29:02 -070063}
64
Carl Worth8fed1cd2010-05-26 09:32:12 -070065{HASH}if {
66 yyextra->space_tokens = 0;
67 return HASH_IF;
68}
69
70{HASH}elif {
71 yyextra->space_tokens = 0;
72 return HASH_ELIF;
73}
74
75{HASH}else {
76 yyextra->space_tokens = 0;
77 return HASH_ELSE;
78}
79
80{HASH}endif {
81 yyextra->space_tokens = 0;
82 return HASH_ENDIF;
83}
84
Carl Worth3ff81672010-05-25 13:09:03 -070085{HASH} {
Carl Worthf34a0002010-05-25 16:59:02 -070086 yyextra->space_tokens = 0;
Carl Worth3ff81672010-05-25 13:09:03 -070087 return HASH;
Carl Worth81f01432010-05-14 17:08:45 -070088}
89
Carl Worth8fed1cd2010-05-26 09:32:12 -070090{DECIMAL_INTEGER} {
91 yylval.ival = strtoll (yytext, NULL, 10);
92 return INTEGER;
93}
94
95{OCTAL_INTEGER} {
96 yylval.ival = strtoll (yytext + 1, NULL, 8);
97 return INTEGER;
98}
99
100{HEXADECIMAL_INTEGER} {
101 yylval.ival = strtoll (yytext + 2, NULL, 16);
102 return INTEGER;
103}
104
105
Carl Worth0a93cbb2010-05-13 10:29:07 -0700106{IDENTIFIER} {
Carl Wortha807fb72010-05-18 22:10:04 -0700107 yylval.str = xtalloc_strdup (yyextra, yytext);
Carl Worth3ff81672010-05-25 13:09:03 -0700108 return IDENTIFIER;
Carl Worthcd27e642010-05-12 13:11:50 -0700109}
110
Carl Worthf34a0002010-05-25 16:59:02 -0700111"<<" {
112 return LEFT_SHIFT;
Carl Worthb1854fd2010-05-25 16:28:26 -0700113}
114
Carl Worthf34a0002010-05-25 16:59:02 -0700115">>" {
116 return RIGHT_SHIFT;
Carl Worthb1854fd2010-05-25 16:28:26 -0700117}
118
Carl Worthf34a0002010-05-25 16:59:02 -0700119"<=" {
120 return LESS_OR_EQUAL;
121}
122
123">=" {
124 return GREATER_OR_EQUAL;
125}
126
127"==" {
128 return EQUAL;
129}
130
131"!=" {
132 return NOT_EQUAL;
133}
134
135"&&" {
136 return AND;
137}
138
139"||" {
140 return OR;
141}
142
143"##" {
144 return PASTE;
145}
146
Carl Worth8fed1cd2010-05-26 09:32:12 -0700147"defined" {
148 return DEFINED;
149}
150
Carl Worthf34a0002010-05-25 16:59:02 -0700151{PUNCTUATION} {
152 return yytext[0];
Carl Worthb1854fd2010-05-25 16:28:26 -0700153}
154
Carl Worth9fb8b7a2010-05-25 15:04:32 -0700155{OTHER}+ {
156 yylval.str = xtalloc_strdup (yyextra, yytext);
157 return OTHER;
Carl Worth3ff81672010-05-25 13:09:03 -0700158}
159
Carl Worth9fb8b7a2010-05-25 15:04:32 -0700160{HSPACE}+ {
Carl Worthf34a0002010-05-25 16:59:02 -0700161 if (yyextra->space_tokens) {
Carl Worthf34a0002010-05-25 16:59:02 -0700162 return SPACE;
163 }
Carl Worth0a93cbb2010-05-13 10:29:07 -0700164}
Carl Worthfcbbb462010-05-13 09:36:23 -0700165
Carl Worth3ff81672010-05-25 13:09:03 -0700166\n {
167 return NEWLINE;
Carl Worth33cc4002010-05-12 12:17:10 -0700168}
Carl Worth3a37b872010-05-10 11:44:09 -0700169
Carl Worth3a37b872010-05-10 11:44:09 -0700170%%