X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginsh%2Fginsh_lexer.ll;h=817df6ec1d505cb39266c16a70dd9765468380dd;hp=932f80b4dcfb8f83e84c3c109f109246c15559b6;hb=e858ebe524f9beac33d492b9a4e614666819c3ab;hpb=abc4512627b3eb04732698e48dc88771d7904e71 diff --git a/ginsh/ginsh_lexer.ll b/ginsh/ginsh_lexer.ll index 932f80b4..817df6ec 100644 --- a/ginsh/ginsh_lexer.ll +++ b/ginsh/ginsh_lexer.ll @@ -4,7 +4,7 @@ * This file must be processed with flex. */ /* - * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2008 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 @@ -18,7 +18,7 @@ * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -26,6 +26,8 @@ * Definitions */ +%pointer + %{ #include "config.h" @@ -37,6 +39,9 @@ // 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); %} @@ -72,11 +77,15 @@ 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; @@ -85,9 +94,9 @@ score return T_SCORE; ">=" return T_GREATEREQ; /* last 1..3 expressions */ -\" return T_QUOTE; -\"\" return T_QUOTE2; -\"\"\" return T_QUOTE3; +\% return T_QUOTE; +\%\% return T_QUOTE2; +\%\%\% return T_QUOTE3; /* numbers */ {D}+ | @@ -103,7 +112,11 @@ score return T_SCORE; {A}{AN}* { sym_tab::const_iterator i = syms.find(yytext); if (i == syms.end()) { - yylval = syms[yytext] = *(new symbol(yytext)); + if (symboltype == domain::complex) { + yylval = syms[yytext] = *(new symbol(yytext)); + } else { + yylval = syms[yytext] = *(new symbol(yytext, domain::real)); + } } else yylval = i->second; return T_SYMBOL; @@ -130,7 +143,11 @@ static char *line_ptr; 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;