[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