]> www.ginac.de Git - ginac.git/blobdiff - ginsh/ginsh_lexer.ll
Fix build from git repository.
[ginac.git] / ginsh / ginsh_lexer.ll
diff --git a/ginsh/ginsh_lexer.ll b/ginsh/ginsh_lexer.ll
deleted file mode 100644 (file)
index 7ba013e..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/** @file ginsh_lexer.ll
- *
- *  Lexical analyzer definition for ginsh.
- *  This file must be processed with flex. */
-
-/*
- *  GiNaC Copyright (C) 1999-2011 Johannes Gutenberg University Mainz, Germany
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-
-/*
- *  Definitions
- */
-
-%pointer
-
-%{
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ginsh.h"
-#include "ginsh_parser.h"
-
-#define YY_INPUT(buf, result, max_size) (result = ginsh_input(buf, max_size))
-
-// Table of all used symbols
-sym_tab syms;
-
-// Type of symbols to generate (real or complex)
-unsigned symboltype = domain::complex;
-
-// lex input function
-static int ginsh_input(char *buf, int max_size);
-%}
-
-       /* Abbreviations */
-D      [0-9]
-E      [elEL][-+]?{D}+
-A      [a-zA-Z_]
-AN     [0-9a-zA-Z_]
-
-
-/*
- *  Lexical rules
- */
-
-%%
-[ \t\n]+               /* skip whitespace */
-\\$                    /* skip line continuations */
-"//".*                 /* skip comments starting with "//" */
-^"#".*                 /* skip lines starting with "#" */
-^"!".*                 system(yytext + 1);     /* execute shell command */
-
-                       /* special values */
-Pi                     yylval = Pi; return T_LITERAL;
-Euler                  yylval = Euler; return T_LITERAL;
-Catalan                        yylval = Catalan; return T_LITERAL;
-FAIL                   yylval = *new fail(); return T_LITERAL;
-I                      yylval = I; return T_NUMBER;
-Digits                 yylval = (long)Digits; return T_DIGITS;
-
-                       /* keywords */
-quit|exit              return T_QUIT;
-warranty               return T_WARRANTY;
-print                  return T_PRINT;
-iprint                 return T_IPRINT;
-print_latex            return T_PRINTLATEX;
-print_csrc             return T_PRINTCSRC;
-time                   return T_TIME;
-xyzzy                  return T_XYZZY;
-inventory              return T_INVENTORY;
-look                   return T_LOOK;
-score                  return T_SCORE;
-complex_symbols return T_COMPLEX_SYMBOLS;
-real_symbols    return T_REAL_SYMBOLS;
-
-                       /* comparison */
-"=="                   return T_EQUAL;
-"!="                   return T_NOTEQ;
-"<="                   return T_LESSEQ;
-">="                   return T_GREATEREQ;
-
-                       /* last 1..3 expressions */
-\%                     return T_QUOTE;
-\%\%                   return T_QUOTE2;
-\%\%\%                 return T_QUOTE3;
-
-                       /* numbers */
-{D}+                   |
-"#"{D}+"R"{AN}+                |
-"#b"([01])+            |
-"#o"[0-7]+             |
-"#x"[0-9a-fA-F]+       |
-{D}+"."{D}*({E})?      |
-{D}*"."{D}+({E})?      |
-{D}+{E}                        yylval = numeric(yytext); return T_NUMBER;
-
-                       /* symbols */
-{A}{AN}*               {
-                               sym_tab::const_iterator i = syms.find(yytext);
-                               if (i == syms.end()) {
-                                       if (symboltype == domain::complex) {
-                                               symbol tmp(yytext);
-                                               syms[yytext] = tmp;
-                                               yylval = tmp;
-                                       } else {
-                                               realsymbol tmp(yytext);
-                                               syms[yytext] = tmp;
-                                               yylval = tmp;
-                                       }
-                               } else
-                                       yylval = i->second;
-                               return T_SYMBOL;
-                       }
-
-                       /* wildcards */
-\${D}+                 yylval = wild(atoi(yytext + 1)); return T_LITERAL;
-
-                       /* everything else */
-.                      return *yytext;
-
-%%
-
-
-/*
- *  Routines
- */
-
-static int line_length = 0;
-static char *line_read = NULL;
-static char *line_ptr;
-
-// Input function that uses libreadline for interactive input
-static int ginsh_input(char *buf, int max_size)
-{
-       int result;
-#if defined(YY_CURRENT_BUFFER)
-       if (YY_CURRENT_BUFFER->yy_is_interactive) {
-#else
-       if (yy_current_buffer->yy_is_interactive) {
-#endif
-#ifdef HAVE_LIBREADLINE
-               // Do we need to read a new line?
-               int actual;
-               if (line_length == 0) {
-
-                       // Free old line
-                       if (line_read)
-                               free(line_read);
-
-                       // Read new line, prompt "> "
-                       line_read = line_ptr = readline("> ");
-
-                       // EOF?
-                       if (!line_read) {
-                               line_length = 0;
-                               return YY_NULL;
-                       }
-
-                       // Add non-empty lines to history
-                       line_length = strlen(line_read) + 1;
-                       if (line_length > 1)
-                               add_history(line_read);
-
-                       // Reappend trailing '\n' which is stripped by readline()
-                       line_read[line_length - 1] = '\n';
-               }
-
-               // Copy data to lex buffer
-               actual = line_length > max_size ? max_size : line_length;
-               memcpy(buf, line_ptr, actual);
-               line_length -= actual;
-               line_ptr += actual;
-               result = actual;
-#else
-               printf("> "); fflush(stdout);
-               int c = '*', n;
-               for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n)
-                       buf[n] = (char)c;
-               if (c == '\n')
-                       buf[n++] = (char)c;
-               if (c == EOF && ferror(yyin))
-                       YY_FATAL_ERROR("input in flex scanner failed");
-               result = n;
-#endif
-       } else if (((result = fread(buf, 1, max_size, yyin)) == 0) && ferror(yyin))
-               YY_FATAL_ERROR("input in flex scanner failed");
-
-       return result;
-}
-
-// List of input files to be processed
-int num_files = 0;
-char **file_list = NULL;
-
-// EOF encountered, connect to next file. If this was the last file,
-// connect to stdin. If this was stdin, terminate the scanner.
-int yywrap()
-{
-       if (yyin == stdin)
-               return 1;
-
-       fclose(yyin);
-       if (num_files) {
-               yyin = fopen(*file_list, "r");
-               if (yyin == NULL) {
-                       cerr << "Can't open " << *file_list << endl;
-                       return 1;
-               }
-               num_files--;
-               file_list++;
-       } else
-               yyin = stdin;
-       return 0;
-}