/* * Copyright (c) 2004, The Tendra Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice unmodified, this list of conditions, and the following * disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * Crown Copyright (c) 1997 * * This TenDRA(r) Computer Program is subject to Copyright * owned by the United Kingdom Secretary of State for Defence * acting through the Defence Evaluation and Research Agency * (DERA). It is made available to Recipients with a * royalty-free licence for its use, reproduction, transfer * to other parties and amendment for any purpose not excluding * product development provided that any such use et cetera * shall be deemed to be acceptance of the following conditions:- * * (1) Its Recipients shall ensure that this Notice is * reproduced upon any copies or amended versions of it; * * (2) Any amended version of it shall be clearly marked to * show both the nature of and the organisation responsible * for the relevant amendment or amendments; * * (3) Its onward transfer from a recipient to another * party shall be deemed to be that party's acceptance of * these conditions; * * (4) DERA gives no warranty or assurance as to its * quality or suitability for any purpose and DERA accepts * no liability whatsoever in relation to any use to which * it may be put. * * $TenDRA: tendra/src/tools/tspec/lexer.lxi,v 1.4 2004/03/08 14:48:14 bp Exp $ */ /* * LEXICAL ANALYSER FOR TSPEC * * This file describes the lexical analyser used by tspec. */ /* Character groups */ GROUP white = " \t\n\r"; GROUP alpha = {A-Z} + {a-z} + "_"; GROUP digit = {0-9}; GROUP alphanum = "[alpha][digit]"; /* Simple symbols */ TOKEN "!" -> $exclaim; TOKEN "(" -> $open-round; TOKEN ")" -> $close-round; TOKEN "*" -> $star; TOKEN "," -> $comma; TOKEN "-" -> $minus; TOKEN "." -> $dot; TOKEN ".." -> $dot-dot; TOKEN "..." -> $ellipsis; TOKEN ":" -> $colon; TOKEN ":=" -> $assign; TOKEN ";" -> $semicolon; TOKEN "=" -> $equal; TOKEN "?" -> $question; TOKEN "\e" -> $eof; TOKEN "\[" -> $open-square; TOKEN "]" -> $close-square; TOKEN "{" -> $open-brace; TOKEN "}" -> $close-brace; TOKEN "|" -> $or; /* Comments, strings and identifiers */ TOKEN "#" -> get_comment (); TOKEN "/*" -> get_c_comment (); TOKEN "%%" -> get_text (); TOKEN "\"" -> get_string (); TOKEN "[alpha]" -> get_global (); TOKEN "~[alpha]" -> get_local (); TOKEN "+[alpha]" -> get_command (); TOKEN "$[alpha]" -> get_variable (); TOKEN "[digit]" -> get_number (); /* Keywords */ KEYWORD "arith" -> $arith; KEYWORD "char" -> $char; KEYWORD "const" -> $const; KEYWORD "double" -> $double; KEYWORD "enum" -> $enum; KEYWORD "extern" -> $extern; KEYWORD "float" -> $float; KEYWORD "int" -> $int; KEYWORD "long" -> $long; KEYWORD "lvalue" -> $lvalue; KEYWORD "restrict" -> $restrict; KEYWORD "scalar" -> $scalar; KEYWORD "short" -> $short; KEYWORD "signed" -> $signed; KEYWORD "struct" -> $struct; KEYWORD "union" -> $union; KEYWORD "unsigned" -> $unsigned; KEYWORD "void" -> $void; KEYWORD "volatile" -> $volatile; KEYWORD "weak" -> $weak; KEYWORD "+BASE_API" -> $base-api; KEYWORD "+CONST" -> $constant; KEYWORD "+DEFINE" -> $define; KEYWORD "+ELSE" -> $else; KEYWORD "+ENDIF" -> $endif; KEYWORD "+ENUM" -> $enumerate; KEYWORD "+EXP" -> $exp; KEYWORD "+FIELD" -> $field; KEYWORD "+FUNC" -> $func; KEYWORD "+IF" -> $if; KEYWORD "+IFDEF" -> $ifdef; KEYWORD "+IFNDEF" -> $ifndef; KEYWORD "+IMPLEMENT" -> $implement; KEYWORD "+INFO" -> $info; KEYWORD "+MACRO" -> $macro; KEYWORD "+NAT" -> $nat; KEYWORD "+SET" -> $set; KEYWORD "+STATEMENT" -> $statement; KEYWORD "+SUBSET" -> $subset; KEYWORD "+TOKEN" -> $token; KEYWORD "+TYPE" -> $type; KEYWORD "+TYPEDEF" -> $typedef; KEYWORD "+USE" -> $use; KEYWORD "~building_libs" -> $building; KEYWORD "~promote" -> $promote; KEYWORD "~protect" -> $protect; KEYWORD "~special" -> $special;