tinyos-2.x.rar

源代码在线查看: scanner.l

软件大小: 21877 K
上传用户: Whibsvvy
关键词: tinyos
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
				 *   $Id: scanner.l,v 1.2 2009/08/09 23:36:05 sdhsdh Exp $
				 *
				 *   Authors:
				 *    Pedro Roque		
				 *    Lars Fenneberg			 
				 *
				 *   This software is Copyright 1996-2000 by the above mentioned author(s), 
				 *   All Rights Reserved.
				 *
				 *   The license which is distributed with this software in the file COPYRIGHT
				 *   applies to this software. If your distribution is missing this file, you
				 *   may request it from .
				 *
				 */
				%{
				#include 
				#include 
				#include 
				#include 
				
				extern char *conf_file;
				
				int num_lines = 1;
				%}
				
				digit		[0-9]
				number		({digit})+
				snum		-?({digit})+
				decimal		({number}"."{number})
				hexdigit	([a-f]|[A-F]|[0-9])
				addr1		{hexdigit}{1,4}":"({hexdigit}{1,4}":")*(":"{hexdigit}{1,4})+
				addr2		{hexdigit}{1,4}(":"{hexdigit}{1,4})*"::"
				addr3		({hexdigit}{1,4}":"){7}{hexdigit}{1,4}
				addr		({addr1}|{addr2}|{addr3}|"::")
				whitespace	([ \t])+
				string		[a-z]([a-z]|{digit}|_)*([:.]{digit}+)?
				%%
				
				#.*$			{/* ignore comments */}
				\n			{num_lines++;}
				{whitespace}		{}
				
				interface		{ return T_INTERFACE; }
				prefix			{ return T_PREFIX; }
				route			{ return T_ROUTE; }
				RDNSS			{ return T_RDNSS; }
				
				IgnoreIfMissing		{ return T_IgnoreIfMissing; }
				AdvSendAdvert		{ return T_AdvSendAdvert; }
				MaxRtrAdvInterval	{ return T_MaxRtrAdvInterval; }
				MinRtrAdvInterval	{ return T_MinRtrAdvInterval; }
				AdvManagedFlag		{ return T_AdvManagedFlag; }
				AdvOtherConfigFlag	{ return T_AdvOtherConfigFlag; }
				AdvLinkMTU		{ return T_AdvLinkMTU; }
				AdvReachableTime	{ return T_AdvReachableTime; }
				AdvRetransTimer		{ return T_AdvRetransTimer; }
				AdvCurHopLimit		{ return T_AdvCurHopLimit; }
				AdvDefaultLifetime	{ return T_AdvDefaultLifetime; }
				AdvDefaultPreference	{ return T_AdvDefaultPreference; }
				AdvSourceLLAddress	{ return T_AdvSourceLLAddress; }
				
				AdvOnLink		{ return T_AdvOnLink; }
				AdvAutonomous		{ return T_AdvAutonomous; }
				AdvValidLifetime	{ return T_AdvValidLifetime; }
				AdvPreferredLifetime	{ return T_AdvPreferredLifetime; }
				
				AdvRouterAddr		{ return T_AdvRouterAddr; }
				AdvHomeAgentFlag	{ return T_AdvHomeAgentFlag; }
				AdvIntervalOpt		{ return T_AdvIntervalOpt; }
				AdvHomeAgentInfo	{ return T_AdvHomeAgentInfo; }
				UnicastOnly		{ return T_UnicastOnly; }
				
				Base6to4Interface	{ return T_Base6to4Interface; }
				
				HomeAgentPreference	{ return T_HomeAgentPreference; }
				HomeAgentLifetime	{ return T_HomeAgentLifetime; }
				
				AdvRoutePreference	{ return T_AdvRoutePreference; }
				AdvRouteLifetime	{ return T_AdvRouteLifetime; }
				
				AdvRDNSSPreference 	{ return T_AdvRDNSSPreference; }
				AdvRDNSSOpen		{ return T_AdvRDNSSOpenFlag; }
				AdvRDNSSLifetime	{ return T_AdvRDNSSLifetime; }
				
				MinDelayBetweenRAs      { return T_MinDelayBetweenRAs; }
				
				AdvMobRtrSupportFlag	{ return T_AdvMobRtrSupportFlag; }
				
				{addr}		{
							static struct in6_addr addr;
							int i;
								
							i = inet_pton(AF_INET6, yytext, &addr);
				
							dlog(LOG_DEBUG, 4, "inet_pton returned %d", i);
				
							/* BSD API draft and NRL's code don't aggree on
							 * this. the draft specifies a return value of 1 on 
							 * success, NRL's code returns the address length in 
							 * bytes on success (16 for an IPv6 address)
							 */
							if (i < 1) {
								flog(LOG_ERR, "invalid address in %s, line %d", conf_file,
									num_lines);
								return T_BAD_TOKEN;
							}
				
							yylval.addr = &addr;
							return IPV6ADDR;
						}
				
				{number}	{
							unsigned long lnum;
							char *endp;
							lnum = strtoul(yytext, &endp, 10);
							if (*yytext == '\0' || *endp != '\0')
								return T_BAD_TOKEN;
							if (lnum > 0xFFFFFFFFUL)
								return T_BAD_TOKEN;	/* XXX */
							yylval.num = lnum;
							return NUMBER;
						}
				
				{snum}		{ yylval.snum = atoi(yytext); return SIGNEDNUMBER; }
				
				{decimal}	{ yylval.dec = atof(yytext); return DECIMAL; }
				
				infinity	{ return INFINITY; }
				
				on			{ yylval.bool = 1; return SWITCH; }
				
				off			{ yylval.bool = 0; return SWITCH; }
				
				low		{ yylval.snum = -1; return SIGNEDNUMBER; }
				
				medium		{ yylval.snum = 0; return SIGNEDNUMBER; }
				
				high		{ yylval.snum = 1; return SIGNEDNUMBER; }
				
				{string}	{
							static char name[IFNAMSIZ];
								
							strncpy(name, yytext, IFNAMSIZ-1);
							name[IFNAMSIZ-1] = '\0';
							yylval.str = name;
							return STRING;
						}
				
				"{"|"}"|";"|"/"	{ return *yytext; }
				
				.		{ return T_BAD_TOKEN; }
				%%
							

相关资源