Laszlo Nagy wrote: > The program below gives me "segmentation fault (core dumped)". > > Environment: > Linux gandalf-desktop 2.6.20-16-generic #2 SMP Tue Feb 12 05:41:34 > UTC 2008 i686 GNU/Linux > Python 2.5.1 > > What is wrong with my grammar? Can it be an internal error in simpleparse? > You've created an infinitely recursing grammar. SimpleParse is a straightforward recursive descent parser without look-ahead (unless explicitly coded) or ambiguity resolution. You are asking it to parse "expr" to see if "expr,binop,expr" is matched. It will continue recursing down into "expr" until it runs out of ram or otherwise encounters a system-level fault.
You need to disambiguate your grammar to have it work with SimpleParse. How you do that will depend on what you really meant by expr,binop,expr: a&b&c could be parsed as either: ((a&b)&c) or: (a&(b&c)) the following creates a parser that produces the first option (which is, I *think* what you wanted): expr := (simple_expr,no_binop)/binop_expr binop_expr := simple_expr,binop_tail >simple_expr< := (paren_expr/unop_expr/word) >no_binop< := ?-binop/end <end> := EOF paren_expr := "(",expr,")" unop_expr := unop,expr >binop_tail< := binop,expr unop := ("+"/"-") binop := ("|"/"&"/"@") word := [a-zA-Z], [a-zA-Z0-9_]* the ?- lookahead is reasonably inefficient, but lookahead is always going around discarding partial results anyway, so it's no worse than most other formulations. HTH, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com -- http://mail.python.org/mailman/listinfo/python-list