[svn] r5886: nemerle/trunk: ncc/parsing/MainParser.n tools/nemerlish/eval.n

malekith svnadmin at nemerle.org
Fri Nov 4 19:14:35 CET 2005


Log:
Add optional allow_empty parameter to ParseExpr. Use it in nemish.

Author: malekith
Date: Fri Nov  4 19:14:34 2005
New Revision: 5886

Modified:
   nemerle/trunk/ncc/parsing/MainParser.n
   nemerle/trunk/tools/nemerlish/eval.n

Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n	(original)
+++ nemerle/trunk/ncc/parsing/MainParser.n	Fri Nov  4 19:14:34 2005
@@ -112,28 +112,36 @@
     /** Parse given string as expression, given context in which this
         expression is situated.
      */
-    public static ParseExpr ([NotNull] env : GlobalEnv, [NotNull] expr : string) : PExpr
+    public static ParseExpr ([NotNull] env : GlobalEnv, 
+                             [NotNull] expr : string, 
+                             allow_empty = false) : PExpr
     {
       // we must prevent lexer from bailing out on last token at end of input
       def lexer = LexerString (expr + " ", Location_stack.top ());
-      ParseExpr (env, lexer)
+      ParseExpr (env, lexer, allow_empty)
     }
 
     /** Parse given string as expression, given context in which this
         expression is situated.
      */
-    public static ParseExpr ([NotNull] env : GlobalEnv, [NotNull] lexer : LexerBase) : PExpr
+    public static ParseExpr ([NotNull] env : GlobalEnv,
+                             [NotNull] lexer : LexerBase,
+                             allow_empty = false) : PExpr
     {
       def preparser = PreParser (lexer);
       def tokens = preparser.PreParse ();
       def parser = MainParser (env);
 
+      if (allow_empty && tokens.Child == null)
+        null
+      else {
       if (tokens.Child.Next == null)
         parser.push_stream ((tokens.Child :> Token.LooseGroup).Child);
       else
         parser.push_stream (tokens);
       parser.parse_expr (TokenStoppers.None);
     }
+    }
     
     /** Parse well formed source code of toplevel program, using the given instance
         of [LexerBase] for obtaining tokens.

Modified: nemerle/trunk/tools/nemerlish/eval.n
==============================================================================
--- nemerle/trunk/tools/nemerlish/eval.n	(original)
+++ nemerle/trunk/tools/nemerlish/eval.n	Fri Nov  4 19:14:34 2005
@@ -269,9 +269,10 @@
         body = MainParser.ParseExpr (env, lexer);
       }
       else {
-        body = MainParser.ParseExpr (env, Evaluator.code); 
+        body = MainParser.ParseExpr (env, Evaluator.code, allow_empty = true); 
       }
       match (body) {
+        | null
         | <[ ]> => throw System.ApplicationException ("Nothing to parse.")
         | _ => ()
       }



More information about the svn mailing list