1%{
2/*
3 * lexer.l
4 *
5 * Copyright (c) 2001-2002 Maksim Yevmenkin <m_evmenkin@yahoo.com>
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $Id: lexer.l,v 1.1 2002/11/24 20:22:39 max Exp $
30 * $FreeBSD$
31 */
32
33#include <string.h>
34#include "parser.h"
35%}
36
37%option yylineno noyywrap nounput noinput
38
39delim		[ \t\n]
40ws		{delim}+
41empty		{delim}*
42comment		\#.*
43
44hexdigit	[0-9a-fA-F]
45hexbyte		{hexdigit}{hexdigit}
46
47device_word	device
48bdaddr_word	bdaddr
49name_word	name
50key_word	key
51nokey_word	nokey
52pin_word	pin
53nopin_word	nopin
54
55bdaddrstring	{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}
56hexstring	0x{hexbyte}+
57string		\".+\"
58
59%%
60
61\;		return (';');
62\:		return (':');
63\{		return ('{');
64\}		return ('}');
65
66{ws}		;
67{empty}		;
68{comment}	;
69
70{device_word}	return (T_DEVICE);
71{bdaddr_word}	return (T_BDADDR);
72{name_word}	return (T_NAME);
73{key_word}	return (T_KEY);
74{nokey_word}	return (T_NOKEY);
75{pin_word}	return (T_PIN);
76{nopin_word}	return (T_NOPIN);
77
78{bdaddrstring}	{
79		yylval.string = yytext;
80		return (T_BDADDRSTRING);
81		}
82
83{hexstring}	{
84		yylval.string = &yytext[2];
85		return (T_HEXSTRING);
86		}
87
88{string}	{
89		yytext[strlen(yytext) - 1] = 0;
90		yylval.string = &yytext[1];
91		return (T_STRING);
92		}
93
94%%
95
96