--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/rcomp/src/RCOMP.LEX Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,317 @@
+%option yylineno
+%{
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// RCOMPL.INL
+// Generated from RCOMP.L
+
+
+#include <limits.h>
+#include <string.h>
+#include "main.h"
+#include "structst.h"
+#include "parser.h"
+#include "localise.h"
+
+#define YY_SKIP_YYWRAP 1
+#define YY_NEVER_INTERACTIVE 1
+int yywrap();
+void yyerror(const char* string, ...);
+
+// Redefine YY_INPUT so we can parse binary data.
+#undef YY_INPUT
+#define YY_INPUT(buf, result, max_size) (result = new_yy_input(buf, max_size))
+
+int new_yy_input(char *buf, int max_size)
+{
+ int result;
+ result = fread(buf, 1, max_size, yyin);
+ if (result == 0)
+ return YY_NULL;
+
+ // check for utf8 (BOM) header in buf
+ for (int i = 0; i < result-3; i++)
+ {
+ if (buf[i] == 0xffffffef && buf[i+1] == 0xffffffbb && buf[i+2] == 0xffffffbf)
+ {
+ buf[i] = ' ';
+ buf[i+1] = ' ';
+ buf[i+2] = ' ';
+ }
+ }
+ return result;
+}
+
+#include "rcomp.hpp"
+#include "fileline.h"
+
+#define VALUE_LEN (1024*8) // must match sizeof(YYSTYPE.Value)
+char buf[VALUE_LEN];
+char * pCh;
+#define CHECK_APPEND(x) \
+ if (pCh-buf==VALUE_LEN-1) { yyerror("string too long - %c ignored", (x)); } else {*pCh++ = (x); }
+
+int isCharLiteral;
+
+extern String InputBaseName;
+extern FileLineManager* pFileLineHandler;
+extern int* pCurrentLineNumber;
+char RealLineNumber[200];
+//
+// Disable MSVC warnings
+//
+#ifdef __VC32__
+#if 0
+..\src\RCOMP.L(95) : warning C4127: conditional expression is constant
+..\src\RCOMP.L(114) : warning C4244: 'initializing' : conversion from 'const int' to 'YY_CHAR', possible loss of data
+..\src\RCOMP.L(119) : warning C4244: '=' : conversion from 'const int' to 'YY_CHAR', possible loss of data
+..\src\RCOMP.L(130) : warning C4102: 'find_rule' : unreferenced label
+..\src\RCOMP.L(513) : warning C4244: 'initializing' : conversion from 'int' to 'YY_CHAR', possible loss of data
+..\src\RCOMP.L(518) : warning C4244: '=' : conversion from 'const int' to 'YY_CHAR', possible loss of data
+..\src\RCOMP.L(548) : warning C4244: '=' : conversion from 'const int' to 'YY_CHAR', possible loss of data
+..\src\RCOMP.L(63) : warning C4505: 'yyunput' : unreferenced local function has been removed
+\epoc32\BUILD\generatedcpp\rcomp\rcompl.cpp(243) : warning C4505: 'yy_flex_realloc' : unreferenced local function has been removed
+#endif
+
+#pragma warning( disable : 4100 )
+#pragma warning( disable : 4102 )
+#pragma warning( disable : 4127 )
+#pragma warning( disable : 4244 )
+#pragma warning( disable : 4245 )
+#pragma warning( disable : 4505 )
+#endif //__VC32__
+
+#include "errorhan.h"
+
+#define REGISTER_LINE ErrorHandler::Register(pFileLineHandler->GetCurrentFile(), pFileLineHandler->GetErrorLine(* pCurrentLineNumber))
+
+
+%}
+
+Digit [0-9]
+Lower [a-z]
+Upper [A-Z]
+Letter {Lower}|{Upper}
+Alphanumeric {Letter}|{Digit}
+LetterOrUnderscore {Letter}|_
+AlphanumUscore {Alphanumeric}|_
+HexChar [A-Fa-f0-9]
+ExpChar [eE]
+FileNameChar [^"]
+
+%s string_rules
+ /* Rule set for string literals. */
+ /* n.b. Exclusive rule sets i.e. %x are available in MKS only */
+ /* so they are not used here; hence all the <INITIAL>'s. */
+
+%s file_line_rules
+ /* Rule set for file_line_directive.*/
+
+%s cpp_comment
+ /* C++ comment to end of line */
+
+%s c_comment
+ /* C comment */
+
+%s comment_tag
+ /* Doxygen-style comment tag */
+
+%%
+
+
+ /* Translations section */
+ /* ==================== */
+
+ /*******************************************/
+ /* Main keywords */
+ /*******************************************/
+<INITIAL>STRUCT return L_STRUCT;
+<INITIAL>RESOURCE return L_RESOURCE;
+<INITIAL>NAME return L_NAME;
+<INITIAL>CHARACTER_SET return L_CHARACTER_SET;
+<INITIAL>OFFSET return L_OFFSET;
+<INITIAL>SYSTEM return L_SYSTEM;
+<INITIAL>GLOBAL return L_GLOBAL;
+<INITIAL>LOCAL return L_LOCAL;
+<INITIAL>ENUM return L_ENUM;
+<INITIAL>enum return L_ENUM;
+<INITIAL>UID2 return L_UID_TWO;
+<INITIAL>UID3 return L_UID_THREE;
+<INITIAL>rls_string return L_RLS_STRING;
+<INITIAL>rls_string8 return L_RLS_STRING8;
+<INITIAL>rls_double return L_RLS_DOUBLE;
+<INITIAL>rls_byte return L_RLS_BYTE;
+<INITIAL>rls_word return L_RLS_WORD;
+<INITIAL>rls_long return L_RLS_LONG;
+<INITIAL>multi return L_MULTI;
+
+ /*******************************************/
+ /* Types */
+ /*******************************************/
+<INITIAL>BUF return L_BUF;
+<INITIAL>BUF8 return L_BUF8;
+<INITIAL>BUF16 return L_BUF16;
+<INITIAL>WORD return L_WORD;
+<INITIAL>BYTE return L_BYTE;
+<INITIAL>LONG return L_LONG;
+<INITIAL>DOUBLE return L_DOUBLE;
+<INITIAL>TEXT return L_TEXT;
+<INITIAL>LTEXT return L_LTEXT;
+<INITIAL>TEXT8 return L_TEXT8;
+<INITIAL>LTEXT8 return L_LTEXT8;
+<INITIAL>TEXT16 return L_TEXT16;
+<INITIAL>LTEXT16 return L_LTEXT16;
+<INITIAL>LINK return L_LINK;
+<INITIAL>LLINK return L_LLINK;
+<INITIAL>SRLINK return L_SRLINK;
+
+
+ /*******************************************/
+ /* Others */
+ /*******************************************/
+<INITIAL>LEN return L_LEN;
+
+
+ /*******************************************/
+ /* String & character literals */
+ /*******************************************/
+<INITIAL>\" { BEGIN(string_rules); pCh = buf; isCharLiteral=0; }
+<INITIAL>' { BEGIN(string_rules); pCh = buf; isCharLiteral=1; }
+
+ /* Escaped single- and double-quotes.*/
+<string_rules>\\\" { CHECK_APPEND('"'); }
+<string_rules>\\' { CHECK_APPEND('\''); };
+
+ /* Convert escaped character into corresponding actual character e.g. \t to tab. */
+<string_rules>\\[rbfntv] { CHECK_APPEND( * ( strchr("\rr\bb\ff\nn\tt\vv\aa", yytext[1])-1));}
+
+ /* Escaped backslash */
+<string_rules>\\\\ { CHECK_APPEND('\\'); }
+
+<string_rules>\\\n /* Escaped newline ignored*/ ;
+
+ /* End of line before terminating double-quotes.*/
+<string_rules>(\r)?\n { yyerror( isCharLiteral?"Unterminated character literal":"Unterminated string"); BEGIN 0; }
+
+ /* End of string reached.*/
+<string_rules>\" {
+ if (!isCharLiteral)
+ {
+ *pCh = '\0'; BEGIN(0); strcpy( yylval.Value, buf);
+ return L_STRING_LITERAL;
+ }
+ CHECK_APPEND(*yytext);
+ }
+
+<string_rules>' {
+ if (isCharLiteral)
+ {
+ *pCh = '\0'; BEGIN(0); strcpy( yylval.Value, buf); return L_CHAR_LITERAL;
+ }
+ CHECK_APPEND(*yytext);
+ }
+
+ /* Anything other than \n is stored.*/
+<string_rules>. { CHECK_APPEND(*yytext); }
+
+
+ /*******************************************/
+ /* Labels */
+ /*******************************************/
+<INITIAL>{LetterOrUnderscore}{AlphanumUscore}* {
+ BEGIN(0);
+ strcpy( yylval.Value, yytext);
+ return L_LABEL;
+ }
+
+ /*******************************************/
+ /* Numbers */
+ /*******************************************/
+<INITIAL>{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_NATURAL; }
+<INITIAL>0x{HexChar}+ { strcpy( yylval.Value, yytext); return L_NUM_NATURAL; }
+<INITIAL>{Digit}+\.{Digit}+{ExpChar}{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_FLOAT;}
+<INITIAL>-{Digit}+\.{Digit}+{ExpChar}{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_FLOAT;}
+<INITIAL>{Digit}+\.{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_FLOAT;}
+<INITIAL>-{Digit}+\.{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_FLOAT;}
+<INITIAL>{Digit}+{ExpChar}{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_FLOAT;}
+<INITIAL>-{Digit}+{ExpChar}{Digit}+ { strcpy( yylval.Value, yytext); return L_NUM_FLOAT;}
+
+ /*******************************************/
+ /* file_line_directive */
+ /*******************************************/
+<INITIAL>[#][ ]{Digit}+[ ]\" { BEGIN(file_line_rules); strcpy( RealLineNumber, yytext+2); }
+
+<file_line_rules>\"(\r)?$ { BEGIN(0); // # <line> "" means start of base file.
+ pFileLineHandler->SetBase( InputBaseName, * pCurrentLineNumber);
+ }
+
+<file_line_rules>{FileNameChar}*\"(\r)?$ { BEGIN(0); // # <line> <filename> means @ line <line> of named base file.
+ pFileLineHandler->PostInclude( yytext, RealLineNumber, * pCurrentLineNumber);
+ }
+
+<file_line_rules>{FileNameChar}*\"[ ]1([ ]3){0,1}(\r)?$ {
+ BEGIN(0); // # <line> <filename> 1 means start of an included file.
+ pFileLineHandler->SetInclude( yytext, * pCurrentLineNumber);
+ }
+
+<file_line_rules>{FileNameChar}*\"[ ]2([ ]3){0,1}(\r)?$ {
+ BEGIN(0); // # <line> <filename> 2 means end of an included file and now at <line> in <filename>.
+ pFileLineHandler->PostInclude( yytext, RealLineNumber, * pCurrentLineNumber);
+ }
+
+
+
+ /*******************************************/
+ /* White space */
+ /*******************************************/
+<INITIAL,file_line_rules>[ \t] ; // skipped
+<INITIAL>[\n\r] ; // skipped
+<file_line_rules>[\n\r] ; // skipped
+<INITIAL,file_line_rules>"//" { BEGIN(cpp_comment); }
+<cpp_comment>[\n\r] { BEGIN(0); }
+<cpp_comment>. ; // skipped
+<INITIAL,file_line_rules>"/*"/[^&\n] { BEGIN(c_comment); }
+<INITIAL,file_line_rules>"/*"[\n\r] { BEGIN(c_comment); }
+<c_comment>"*/" { BEGIN(0); }
+<c_comment>[\n\r] ; // skipped
+<c_comment>. ; // skipped
+
+ /*******************************************/
+ /* Comment tags */
+ /*******************************************/
+
+<INITIAL,file_line_rules>[ \t]*"/*&" {
+ BEGIN(comment_tag);
+ pGL->SetStart(*(pFileLineHandler->GetCurrentFile()), pFileLineHandler->GetErrorLine(* pCurrentLineNumber));
+ return L_TAG_START;
+ } // any comment beginning with a slash followed by a star followed by an ampersand
+<comment_tag>"*/" {
+ BEGIN(0);
+ return L_TAG_END;
+ }
+<comment_tag>"@"[^* \t\r\n]+ { strcpy( yylval.Value, yytext); return L_TAG_COMMAND; }
+<comment_tag>[^*@ \t\n\r][^ *\t\r\n]* { strcpy( yylval.Value, yytext); return L_TAG_WORD; }
+<comment_tag>[\n\r] { strcpy( yylval.Value, "\n"); return L_TAG_NEW_LINE; }
+<comment_tag>[* \t] ;
+
+ /*******************************************/
+ /* Special single characters */
+ /*******************************************/
+<INITIAL>[.{};=\[\],()+\-*/|<>] return * yytext;
+
+
+ /*******************************************/
+ /* Everything else cannot be recognised */
+ /*******************************************/
+. { yyerror("*** Unknown character '%c' (value 0x%x) ", *yytext, *yytext);}