summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/Scanner.l
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/FreezeScript/Scanner.l')
-rw-r--r--cpp/src/FreezeScript/Scanner.l395
1 files changed, 0 insertions, 395 deletions
diff --git a/cpp/src/FreezeScript/Scanner.l b/cpp/src/FreezeScript/Scanner.l
deleted file mode 100644
index 0b1d3bac0e9..00000000000
--- a/cpp/src/FreezeScript/Scanner.l
+++ /dev/null
@@ -1,395 +0,0 @@
-%{
-
-// **********************************************************************
-//
-// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <FreezeScript/GrammarUtil.h> // Before Grammar.h, so that YYSTYPE is defined
-#include <FreezeScript/Grammar.h>
-#include <IceUtil/InputUtil.h>
-
-#include <stdlib.h>
-#include <math.h>
-
-#include <map>
-
-#if defined(_MSC_VER) && defined(ICE_64)
-//
-// '=' : conversion from 'size_t' to 'int', possible loss of data
-// The result of fread() is a size_t and gets inserted into an int
-//
-# pragma warning( 4 : 4267 )
-//
-// 'initializing' : conversion from '__int64' to 'int', possible loss of data
-// Puts a pointer-difference into an int
-//
-# pragma warning( 4 : 4244 )
-#endif
-
-#ifdef _MSC_VER
-# ifdef freeze_script_wrap
-# undef freeze_script_wrap
-# define freeze_script_wrap() 1
-# endif
-# define YY_NO_UNISTD_H
-#endif
-
-#ifdef __SUNPRO_CC
-# ifdef freeze_script_wrap
-# undef freeze_script_wrap
-# define freeze_script_wrap() 1
-# endif
-# ifdef ICE_64
-# pragma error_messages(off,truncwarn)
-# endif
-#endif
-
-using namespace std;
-using namespace FreezeScript;
-
-namespace FreezeScript
-{
-
-typedef map<string, int> KeywordMap;
-static KeywordMap keywordMap;
-
-void initScanner();
-int checkKeyword(const string&);
-StringTokPtr parseString(char);
-
-}
-
-#define YY_USER_INIT initScanner();
-
-#define YY_INPUT(buf, result, max_size) { result = getInput(buf, max_size); }
-%}
-
-%option noyywrap
-%option never-interactive
-%option prefix="freeze_script_"
-%option outfile="lex.yy.c"
-
-identifier [[:alpha:]_][[:alnum:]_]*
-integer_constant (\+|-)?((0[0-7]+)|(0x[[:xdigit:]]+)|([[:digit:]]+))
-fractional_constant (\+|-)?(([[:digit:]]*\.[[:digit:]]+)|([[:digit:]]+\.))
-exponent_part (e|E)(\+|-)?[[:digit:]]+
-floating_literal (({fractional_constant}{exponent_part}?)|((\+|-)?[[:digit:]]+{exponent_part}))[fF]?
-
-%%
-
-"//" {
- // C++-style comment
- int c;
- do
- {
- c = yyinput();
- if(c == '\n')
- {
- parseLine++;
- }
- }
- while(c != '\n' && c != EOF);
-}
-
-"/*" {
- // C-style comment
- while(true)
- {
- int c = yyinput();
- if(c == '\n')
- {
- parseLine++;
- }
- else if(c == '*')
- {
- int next = yyinput();
- if(next == '/')
- {
- break;
- }
- else
- {
- unput(next);
- }
- }
- else if(c == EOF)
- {
- parseErrorReporter->expressionSyntaxError("EOF in comment");
- break;
- }
- }
-}
-
-{identifier} {
- StringTokPtr ident = new StringTok;
- ident->v = yytext;
- *yylvalp = ident;
- return checkKeyword(ident->v);
-}
-
-\" {
- StringTokPtr str = parseString('"');
- *yylvalp = str;
- return TOK_STRING_LITERAL;
-}
-
-\' {
- StringTokPtr str = parseString('\'');
- *yylvalp = str;
- return TOK_STRING_LITERAL;
-}
-
-{integer_constant} {
- IntegerTokPtr itp = new IntegerTok;
- *yylvalp = itp;
- if(!IceUtilInternal::stringToInt64(string(yytext), itp->v))
- {
- assert(itp->v != 0);
- string msg = "integer constant `";
- msg += yytext;
- msg += "' out of range";
- parseErrorReporter->expressionSyntaxError(msg);
- }
- return TOK_INTEGER_LITERAL;
-}
-
-{floating_literal} {
- errno = 0;
- FloatingTokPtr ftp = new FloatingTok;
- *yylvalp = ftp;
- string literal(yytext);
- char lastChar = literal[literal.size() - 1];
- if(lastChar == 'f' || lastChar == 'F')
- {
- literal = literal.substr(0, literal.size() - 1); // Clobber trailing 'f' or 'F' suffix
- }
- ftp->v = strtod(literal.c_str(), 0);
- if((ftp->v == HUGE_VAL || ftp->v == -HUGE_VAL) && errno == ERANGE)
- {
- string msg = "floating-point constant `";
- msg += yytext;
- msg += "' too large (overflow)";
- parseErrorReporter->expressionSyntaxError(msg);
- }
- else if(ftp->v == 0 && errno == ERANGE)
- {
- string msg = "floating-point constant `";
- msg += yytext;
- msg += "' too small (underflow)";
- parseErrorReporter->expressionSyntaxError(msg);
- }
- return TOK_FLOATING_POINT_LITERAL;
-}
-
-[[:space:]] {
- // Igore white-space
-
- if(yytext[0] == '\n')
- {
- parseLine++;
- }
-}
-
-"<" return TOK_LESS_THAN;
-">" return TOK_GREATER_THAN;
-"<=" return TOK_LESS_EQUAL;
-">=" return TOK_GREATER_EQUAL;
-"==" return TOK_EQUAL;
-"!=" return TOK_NEQ;
-"+" return TOK_ADD;
-"-" return TOK_SUB;
-"*" return TOK_MUL;
-"/" return TOK_DIV;
-"%" return TOK_MOD;
-"(" return TOK_LPAREN;
-")" return TOK_RPAREN;
-"[" return TOK_LBRACKET;
-"]" return TOK_RBRACKET;
-"::" return TOK_SCOPE_DELIMITER;
-
-. {
- return yytext[0];
-}
-
-%%
-
-namespace FreezeScript
-{
-
-void
-initScanner()
-{
- keywordMap["true"] = TOK_TRUE;
- keywordMap["false"] = TOK_FALSE;
- keywordMap["and"] = TOK_AND;
- keywordMap["or"] = TOK_OR;
- keywordMap["not"] = TOK_NOT;
- keywordMap["nil"] = TOK_NIL;
-}
-
-int
-checkKeyword(const string& id)
-{
- KeywordMap::const_iterator pos = keywordMap.find(id);
- if(pos != keywordMap.end())
- {
- return pos->second;
- }
- return TOK_IDENTIFIER;
-}
-
-StringTokPtr
-parseString(char start)
-{
- StringTokPtr str = new StringTok;
- while(true)
- {
- char c = static_cast<char>(yyinput());
- if(c == start)
- {
- break;
- }
- else if(c == EOF)
- {
- parseErrorReporter->expressionSyntaxError("EOF in string");
- break;
- }
- else if(c == '\n')
- {
- parseErrorReporter->expressionSyntaxError("newline in string");
- }
- else if(c == '\\')
- {
- char next = static_cast<char>(yyinput());
- switch(next)
- {
- case '\\':
- case '"':
- case '\'':
- {
- str->v += next;
- break;
- }
-
- case 'n':
- {
- str->v += '\n';
- break;
- }
-
- case 'r':
- {
- str->v += '\r';
- break;
- }
-
- case 't':
- {
- str->v += '\t';
- break;
- }
-
- case 'v':
- {
- str->v += '\v';
- break;
- }
-
- case 'f':
- {
- str->v += '\f';
- break;
- }
-
- case 'a':
- {
- str->v += '\a';
- break;
- }
-
- case 'b':
- {
- str->v += '\b';
- break;
- }
-
- case '?':
- {
- str->v += '\?';
- break;
- }
-
- case '0':
- case '1':
- case '2':
- case '3':
- {
- static string octalDigits = "01234567";
- unsigned short us = next - '0';
- if(octalDigits.find_first_of(next = static_cast<char>(yyinput())) != string::npos)
- {
- us = us * 8 + next - '0';
- if(octalDigits.find_first_of(next = static_cast<char>(yyinput())) != string::npos)
- {
- us = us * 8 + next - '0';
- }
- else
- {
- unput(next);
- }
- }
- else
- {
- unput(next);
- }
- str->v += static_cast<char>(us);
- break;
- }
- case 'x':
- {
- IceUtil::Int64 ull = 0;
- while(isxdigit(static_cast<unsigned char>(next = static_cast<char>(yyinput()))))
- {
- ull *= 16;
- if(isdigit(static_cast<unsigned char>(next)))
- {
- ull += next - '0';
- }
- else if(islower(static_cast<unsigned char>(next)))
- {
- ull += next - 'a' + 10;
- }
- else
- {
- ull += next - 'A' + 10;
- }
- }
- unput(next);
- str->v += static_cast<char>(ull);
- break;
- }
-
- // TODO: add universal character names
-
- default:
- {
- str->v += c;
- unput(next);
- }
- }
- }
- else
- {
- str->v += c;
- }
- }
-
- return str;
-}
-
-} // End of namespace FreezeScript