16490c2ffSMaksim Yevmenkin %{ 26490c2ffSMaksim Yevmenkin /* 36490c2ffSMaksim Yevmenkin * lexer.l 47aebfa93SMaksim Yevmenkin */ 57aebfa93SMaksim Yevmenkin 67aebfa93SMaksim Yevmenkin /*- 7*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 81de7b4b8SPedro F. Giffuni * 97aebfa93SMaksim Yevmenkin * Copyright (c) 2006 Maksim Yevmenkin <m_evmenkin@yahoo.com> 106490c2ffSMaksim Yevmenkin * All rights reserved. 116490c2ffSMaksim Yevmenkin * 126490c2ffSMaksim Yevmenkin * Redistribution and use in source and binary forms, with or without 136490c2ffSMaksim Yevmenkin * modification, are permitted provided that the following conditions 146490c2ffSMaksim Yevmenkin * are met: 156490c2ffSMaksim Yevmenkin * 1. Redistributions of source code must retain the above copyright 166490c2ffSMaksim Yevmenkin * notice, this list of conditions and the following disclaimer. 176490c2ffSMaksim Yevmenkin * 2. Redistributions in binary form must reproduce the above copyright 186490c2ffSMaksim Yevmenkin * notice, this list of conditions and the following disclaimer in the 196490c2ffSMaksim Yevmenkin * documentation and/or other materials provided with the distribution. 206490c2ffSMaksim Yevmenkin * 216490c2ffSMaksim Yevmenkin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 226490c2ffSMaksim Yevmenkin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 236490c2ffSMaksim Yevmenkin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 246490c2ffSMaksim Yevmenkin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 256490c2ffSMaksim Yevmenkin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 266490c2ffSMaksim Yevmenkin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 276490c2ffSMaksim Yevmenkin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 286490c2ffSMaksim Yevmenkin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 296490c2ffSMaksim Yevmenkin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 306490c2ffSMaksim Yevmenkin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 316490c2ffSMaksim Yevmenkin * SUCH DAMAGE. 326490c2ffSMaksim Yevmenkin * 337aebfa93SMaksim Yevmenkin * $Id: lexer.l,v 1.3 2006/09/07 21:06:53 max Exp $ 346490c2ffSMaksim Yevmenkin */ 358d6f425dSTakanori Watanabe #define L2CAP_SOCKET_CHECKED 366490c2ffSMaksim Yevmenkin #include <bluetooth.h> 376490c2ffSMaksim Yevmenkin #include <stdlib.h> 386490c2ffSMaksim Yevmenkin #include "parser.h" 397aebfa93SMaksim Yevmenkin 407aebfa93SMaksim Yevmenkin int yylex (void); 419c5a52cfSJung-uk Kim 429c5a52cfSJung-uk Kim #define YY_DECL int yylex(void) 436490c2ffSMaksim Yevmenkin %} 446490c2ffSMaksim Yevmenkin 45e267ef95SRebecca Cran %option yylineno noyywrap nounput noinput 466490c2ffSMaksim Yevmenkin 476490c2ffSMaksim Yevmenkin delim [ \t\n] 486490c2ffSMaksim Yevmenkin ws {delim}+ 496490c2ffSMaksim Yevmenkin empty {delim}* 506490c2ffSMaksim Yevmenkin comment \#.* 516490c2ffSMaksim Yevmenkin 526490c2ffSMaksim Yevmenkin hexdigit [0-9a-fA-F] 536490c2ffSMaksim Yevmenkin hexbyte {hexdigit}{hexdigit}? 546032284eSVladimir Kondratyev hexword {hexdigit}{hexdigit}?{hexdigit}?{hexdigit}? 556490c2ffSMaksim Yevmenkin 566490c2ffSMaksim Yevmenkin device_word device 576490c2ffSMaksim Yevmenkin bdaddr_word bdaddr 58e6508069SVladimir Kondratyev name_word name 596032284eSVladimir Kondratyev vendor_id_word vendor_id 606032284eSVladimir Kondratyev product_id_word product_id 616032284eSVladimir Kondratyev version_word version 626490c2ffSMaksim Yevmenkin control_psm_word control_psm 636490c2ffSMaksim Yevmenkin interrupt_psm_word interrupt_psm 646490c2ffSMaksim Yevmenkin reconnect_initiate_word reconnect_initiate 656490c2ffSMaksim Yevmenkin battery_power_word battery_power 666490c2ffSMaksim Yevmenkin normally_connectable_word normally_connectable 676490c2ffSMaksim Yevmenkin hid_descriptor_word hid_descriptor 686490c2ffSMaksim Yevmenkin true_word true 696490c2ffSMaksim Yevmenkin false_word false 706490c2ffSMaksim Yevmenkin 716490c2ffSMaksim Yevmenkin bdaddrstring {hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte} 726490c2ffSMaksim Yevmenkin hexbytestring 0x{hexbyte} 736032284eSVladimir Kondratyev hexwordstring 0x{hexword} 74e6508069SVladimir Kondratyev string \".+\" 756490c2ffSMaksim Yevmenkin 766490c2ffSMaksim Yevmenkin %% 776490c2ffSMaksim Yevmenkin 786490c2ffSMaksim Yevmenkin \; return (';'); 796490c2ffSMaksim Yevmenkin \: return (':'); 806490c2ffSMaksim Yevmenkin \{ return ('{'); 816490c2ffSMaksim Yevmenkin \} return ('}'); 826490c2ffSMaksim Yevmenkin 836490c2ffSMaksim Yevmenkin {ws} ; 846490c2ffSMaksim Yevmenkin {empty} ; 856490c2ffSMaksim Yevmenkin {comment} ; 866490c2ffSMaksim Yevmenkin 876490c2ffSMaksim Yevmenkin {device_word} return (T_DEVICE); 886490c2ffSMaksim Yevmenkin {bdaddr_word} return (T_BDADDR); 89e6508069SVladimir Kondratyev {name_word} return (T_NAME); 906032284eSVladimir Kondratyev {vendor_id_word} return (T_VENDOR_ID); 916032284eSVladimir Kondratyev {product_id_word} return (T_PRODUCT_ID); 926032284eSVladimir Kondratyev {version_word} return (T_VERSION); 936490c2ffSMaksim Yevmenkin {control_psm_word} return (T_CONTROL_PSM); 946490c2ffSMaksim Yevmenkin {interrupt_psm_word} return (T_INTERRUPT_PSM); 956490c2ffSMaksim Yevmenkin {reconnect_initiate_word} return (T_RECONNECT_INITIATE); 966490c2ffSMaksim Yevmenkin {battery_power_word} return (T_BATTERY_POWER); 976490c2ffSMaksim Yevmenkin {normally_connectable_word} return (T_NORMALLY_CONNECTABLE); 986490c2ffSMaksim Yevmenkin {hid_descriptor_word} return (T_HID_DESCRIPTOR); 996490c2ffSMaksim Yevmenkin {true_word} return (T_TRUE); 1006490c2ffSMaksim Yevmenkin {false_word} return (T_FALSE); 1016490c2ffSMaksim Yevmenkin 1026490c2ffSMaksim Yevmenkin {bdaddrstring} { 1036490c2ffSMaksim Yevmenkin return (bt_aton(yytext, &yylval.bdaddr)? 1046490c2ffSMaksim Yevmenkin T_BDADDRSTRING : T_ERROR); 1056490c2ffSMaksim Yevmenkin } 1066490c2ffSMaksim Yevmenkin 1076490c2ffSMaksim Yevmenkin {hexbytestring} { 1087aebfa93SMaksim Yevmenkin char *ep; 1096490c2ffSMaksim Yevmenkin 1106490c2ffSMaksim Yevmenkin yylval.num = strtoul(yytext, &ep, 16); 1116490c2ffSMaksim Yevmenkin 1126490c2ffSMaksim Yevmenkin return (*ep == '\0'? T_HEXBYTE : T_ERROR); 1136490c2ffSMaksim Yevmenkin } 1146490c2ffSMaksim Yevmenkin 1156032284eSVladimir Kondratyev {hexwordstring} { 1166032284eSVladimir Kondratyev char *ep; 1176032284eSVladimir Kondratyev 1186032284eSVladimir Kondratyev yylval.num = strtoul(yytext, &ep, 16); 1196032284eSVladimir Kondratyev 1206032284eSVladimir Kondratyev return (*ep == '\0'? T_HEXWORD : T_ERROR); 1216032284eSVladimir Kondratyev } 1226032284eSVladimir Kondratyev 123e6508069SVladimir Kondratyev {string} { 124e6508069SVladimir Kondratyev yytext[strlen(yytext) - 1] = 0; 125e6508069SVladimir Kondratyev yylval.string = &yytext[1]; 126e6508069SVladimir Kondratyev return (T_STRING); 127e6508069SVladimir Kondratyev } 128e6508069SVladimir Kondratyev 1296490c2ffSMaksim Yevmenkin . return (T_ERROR); 1306490c2ffSMaksim Yevmenkin 1316490c2ffSMaksim Yevmenkin %% 1326490c2ffSMaksim Yevmenkin 133