Hello,
I am trying to build a simple arithmetic expression evaluator using Comparse. I have got to the part of the grammar that looks like this <MultExpr> ::= <MultExpr> '*' <UnaryExpr> | <MultExpr> '/' <UnaryExpr> | <UnaryExpr> ie it is recursive. Here is my code so far: (import comparse) (import srfi-14) (define digit (in char-set:digit)) (define space (in (string->list " \n"))) (define (optional-ws parser) (enclosed-by (zero-or-more space) parser (zero-or-more space))) (define (token tok-name parser) (bind parser (lambda (res) (result (list tok-name res))))) (define int-literal (token 'int-literal (optional-ws (as-string(one-or-more digit))))) (define hex-digit (in char-set:hex-digit)) (define hex-literal (token 'hex-literal (optional-ws (as-string (one-or-more hex-digit))))) (define oct-digit (in (string->list "01234567"))) (define oct-literal (token 'oct-literal (optional-ws (as-string (one-or-more oct-digit))))) (define bool-literal (token 'bool-literal (optional-ws (any-of (char-seq "True") (char-seq "False"))))) (define const-expr (token 'const-expr (any-of int-literal hex-literal oct-literal bool-literal))) (define mult-expr (recursive-parser (token 'mult-expr (any-of (sequence mult-expr (char-seq "*") const-expr) (sequence mult-expr (char-seq "/") const-expr) const-expr)))) Unfortunately the recursive-parser procedure is not documented and the above code just keeps looping. _______________________________________________ Chicken-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/chicken-users
