changeset 113:e122c49e9726

[project @ 1993-09-18 09:06:01 by jwe] Changes to make gplot smarter about distinguishing ranges and literal matrices.
author jwe
date Sat, 18 Sep 1993 09:06:12 +0000
parents 3438ee77fea2
children a20da3b44f08
files src/lex.l src/parse.y
diffstat 2 files changed, 40 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/lex.l	Fri Sep 17 06:11:35 1993 +0000
+++ b/src/lex.l	Sat Sep 18 09:06:12 1993 +0000
@@ -443,7 +443,7 @@
 			  if (! in_brace_or_paren.empty ())
 			    in_brace_or_paren.pop ();
 
-			  if (plotting)
+			  if (plotting && ! past_plot_range)
 			    {
 			      in_plot_range = 0;
 			      RETURN (CLOSE_BRACE);
@@ -460,6 +460,8 @@
 			  quote_is_transpose = 1;
 			  cant_be_identifier = 1;
 			  convert_spaces_to_comma = 1;
+			  if (plotting && ! in_plot_range)
+			    past_plot_range = 1;
 			  current_input_column += yyleng;
 			  DO_COMMA_INSERT_CHECK;
 			  return IMAG_NUM;
@@ -474,6 +476,8 @@
 			  quote_is_transpose = 1;
 			  cant_be_identifier = 1;
 			  convert_spaces_to_comma = 1;
+			  if (plotting && ! in_plot_range)
+			    past_plot_range = 1;
 			  current_input_column += yyleng;
 			  DO_COMMA_INSERT_CHECK;
 			  return NUM;
@@ -481,7 +485,7 @@
 
 \[{S}*		{
 		  in_brace_or_paren.push (1);
-		  if (plotting)
+		  if (plotting && ! past_plot_range)
 		    {
 		      in_plot_range = 1;
 		      RETURN (OPEN_BRACE);
@@ -544,6 +548,9 @@
 			}
 		    }
 
+		  if (plotting && ! in_plot_range)
+		    past_plot_range = 1;
+
 		  if (plotting && in_plot_style)
 		    {
 		      char *sty = plot_style_token (&tok[1]);
@@ -723,12 +730,28 @@
 "&&"		{ BIN_OP_RETURN (EXPR_AND); }
 "|"		{ BIN_OP_RETURN (EXPR_OR); }
 "&"		{ BIN_OP_RETURN (EXPR_AND); }
-"!"		{ RETURN (EXPR_NOT); }
-"~"		{ BIN_OP_RETURN (EXPR_NOT); }
+"!"		{
+		  if (plotting && ! in_plot_range)
+		    past_plot_range = 1;
+		  RETURN (EXPR_NOT);
+		}
+"~"		{
+		  if (plotting && ! in_plot_range)
+		    past_plot_range = 1;
+		  BIN_OP_RETURN (EXPR_NOT);
+		}
 "<"		{ BIN_OP_RETURN (EXPR_LT); }
 ">"		{ BIN_OP_RETURN (EXPR_GT); }
-"+"		{ BIN_OP_RETURN ('+'); }
-"-"		{ BIN_OP_RETURN ('-'); }
+"+"		{ 
+		  if (plotting && ! in_plot_range)
+		    past_plot_range = 1;
+		  BIN_OP_RETURN ('+');
+		}
+"-"		{
+		  if (plotting && ! in_plot_range)
+		    past_plot_range = 1;
+		  BIN_OP_RETURN ('-');
+		}
 "**"		{ BIN_OP_RETURN (POW); }
 "*"		{ BIN_OP_RETURN ('*'); }
 "/"		{ BIN_OP_RETURN ('/'); }
@@ -738,6 +761,8 @@
 "^"		{ BIN_OP_RETURN (POW); }
 "="		{ RETURN ('='); }
 "("		{
+		  if (plotting && ! in_plot_range)
+		    past_plot_range = 1;
 		  in_brace_or_paren.push (0);
 		  RETURN ('(');
 		}
@@ -798,6 +823,7 @@
   current_input_column = 0;
   do_comma_insert = 0;
   plotting = 0;
+  past_plot_range = 0;
   in_plot_range = 0;
   in_plot_using = 0;
   in_plot_style = 0;
@@ -982,9 +1008,9 @@
   if (almost_match ("title", s))
     return TITLE;
   else if (almost_match ("using", s))
-    { in_plot_using = 1; return USING; }
+    { in_plot_using = 1; past_plot_range = 1; return USING; }
   else if (almost_match ("with", s))
-    { in_plot_style = 1; return WITH; }
+    { in_plot_style = 1; past_plot_range = 1; return WITH; }
   else
     return 0;
 }
--- a/src/parse.y	Fri Sep 17 06:11:35 1993 +0000
+++ b/src/parse.y	Sat Sep 18 09:06:12 1993 +0000
@@ -88,6 +88,10 @@
 // Nonzero means we're working on a plot command.
 int plotting = 0;
 
+// Nonzero means we've seen something that means we must be past the
+// range part of a plot command.
+int past_plot_range = 0;
+
 // Nonzero means we're looking at the range part of a plot command.
 int in_plot_range = 0;
 
@@ -395,6 +399,7 @@
 		    tree_subplot_list *tmp = $2->reverse ();
 		    $$ = new tree_plot_command (tmp, $1);
 		    plotting = 0;
+		    past_plot_range = 0;
 		    in_plot_range = 0;
 		    in_plot_using = 0;
 		    in_plot_style = 0;
@@ -404,6 +409,7 @@
 		    tree_subplot_list *tmp = $3->reverse ();
 		    $$ = new tree_plot_command (tmp, $2, $1);
 		    plotting = 0;
+		    past_plot_range = 0;
 		    in_plot_range = 0;
 		    in_plot_using = 0;
 		    in_plot_style = 0;