parse_string only cares about the first containing expression:
(%i1) parse_string("foo;bar;baz;");
(%o1) foo
Basically parse_string behaves like the top level parser.
You can parse symbols (e.g. foo) and function names:
(%i2) sqrt;
(%o2) sqrt
(%i3) solve;
(%o3) solve
But you cannot parse operators without arguments:
(%i4) +;
incorrect syntax: Premature termination of input at ;.
+;
^
Or fragments of programming constructs:
(%i4) do;
incorrect syntax: Premature termination of input at ;.
do;
^
(%i4) if;
incorrect syntax: Premature termination of input at ;.
if;
^
Hope that helps.
Volker van Nek
2011/5/31 Paul Bowyer <pbowyer at olynet.com>
> On 05/30/2011 02:54 PM, Edwin Woollett wrote:
>
>> I get premature termination at $ error below:
>> -------------------------
>> (%i1) display2d:false$
>> (%i2) l1 : "is much simplified"$
>> (%i3) l2 : "is much simplified if"$
>> (%i4) l1s : split (l1);
>> (%o4) ["is","much","simplified"]
>> (%i5) l2s : split (l2);
>> (%o5) ["is","much","simplified","if"]
>> (%i6) map ('parse_string,l1s);
>> (%o6) [is,much,simplified]
>> (%i7) map ('parse_string,l2s);
>> incorrect syntax: Premature termination of input at $.
>>
>> (%i8) map('parse_string,["only","if"]);
>> incorrect syntax: Premature termination of input at $.
>> (%i9) parse_string ("if");
>> incorrect syntax: Premature termination of input at $.
>>
>> Is there a fix for this?
>>
>> Ted Woollett
>>
>> _______________________________________________
>> Maxima mailing list
>> Maxima at math.utexas.edu
>> http://www.math.utexas.edu/mailman/listinfo/maxima
>>
>> Hi Ted:
>
> I tried:
> l1 : "is much simplified"$
> l2 : "is much simplified if more"$
> l1s : split (l1);
> l2s : split (l2);
> map ('parse_string,l1s);
>
> trace( parse_string );
> map ('parse_string,l2s);
> untrace( parse_string );
>
> and got:
>
> (%o173) ["is","much","simplified"]
> (%o174) ["is","much","simplified","if","more"]
> (%o175) [is,much,simplified]
> (%o176) [parse_string]
> 1" Enter "parse_string["is"]
> 1" Exit "parse_string is
> 1" Enter "parse_string["much"]
> 1" Exit "parse_string much
> 1" Enter "parse_string["simplified"]
> 1" Exit "parse_string simplified
> 1" Enter "parse_string["if"]
> stdin:3:incorrect syntax: Premature termination of input at $.
> (%o178) [parse_string]
>
> which tells me, I think, it's choking on the 'if'.
>
> When I change:
> l2 : "is much simplified has more"$
>
> I get:
>
> (%o182) ["is","much","simplified"]
> (%o183) ["is","much","simplified","has","more"]
> (%o184) [is,much,simplified]
> (%o185) [parse_string]
> 1" Enter "parse_string["is"]
> 1" Exit "parse_string is
> 1" Enter "parse_string["much"]
> 1" Exit "parse_string much
> 1" Enter "parse_string["simplified"]
> 1" Exit "parse_string simplified
> 1" Enter "parse_string["has"]
> 1" Exit "parse_string has
> 1" Enter "parse_string["more"]
> 1" Exit "parse_string more
> (%o186) [is,much,simplified,has,more]
> (%o187) [parse_string]
>
> A successful completion.
>
> Does the Maxima documentation:
>
> Function: parse_string (str)
> Parse the string str as a Maxima expression (do not evaluate it). The
> string str may or may not have a terminator (dollar sign $ or semicolon ;).
> Only the first expression is parsed, if there is more than one.
>
> mean that 'is' is interpreted as the first expression and 'if' as the
> second?
>
>
> Paul
>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>