[honu] allow already parsed expression to pass through
This commit is contained in:
parent
050d0c0fe0
commit
5f0a221a03
|
@ -120,6 +120,13 @@
|
||||||
(loop (cons parsed used)
|
(loop (cons parsed used)
|
||||||
unparsed))))))
|
unparsed))))))
|
||||||
|
|
||||||
|
(define parsed-property (gensym 'honu-parsed))
|
||||||
|
(define (parsed-syntax syntax)
|
||||||
|
(syntax-property syntax parsed-property #t))
|
||||||
|
|
||||||
|
(define (parsed-syntax? syntax)
|
||||||
|
(syntax-property syntax parsed-property))
|
||||||
|
|
||||||
(define (stopper? what)
|
(define (stopper? what)
|
||||||
(define-literal-set check (honu-comma semicolon colon))
|
(define-literal-set check (honu-comma semicolon colon))
|
||||||
(define is (and (identifier? what)
|
(define is (and (identifier? what)
|
||||||
|
@ -178,6 +185,8 @@
|
||||||
#'rest)
|
#'rest)
|
||||||
(do-parse #'rest precedence
|
(do-parse #'rest precedence
|
||||||
left #'parsed)))))]
|
left #'parsed)))))]
|
||||||
|
[(parsed-syntax? #'head)
|
||||||
|
(do-parse #'(rest ...) precedence left #'head)]
|
||||||
[(honu-operator? #'head)
|
[(honu-operator? #'head)
|
||||||
(define new-precedence (transformer:honu-operator-ref (syntax-local-value #'head) 0))
|
(define new-precedence (transformer:honu-operator-ref (syntax-local-value #'head) 0))
|
||||||
(define association (transformer:honu-operator-ref (syntax-local-value #'head) 1))
|
(define association (transformer:honu-operator-ref (syntax-local-value #'head) 1))
|
||||||
|
@ -283,7 +292,10 @@
|
||||||
(error 'parse "function call")]
|
(error 'parse "function call")]
|
||||||
[else (error 'what "dont know how to parse ~a" #'head)])])])]))
|
[else (error 'what "dont know how to parse ~a" #'head)])])])]))
|
||||||
|
|
||||||
(do-parse input 0 (lambda (x) x) #f))
|
(define-values (parsed unparsed)
|
||||||
|
(do-parse input 0 (lambda (x) x) #f))
|
||||||
|
(values (parsed-syntax parsed)
|
||||||
|
unparsed))
|
||||||
|
|
||||||
(define (empty-syntax? what)
|
(define (empty-syntax? what)
|
||||||
(syntax-parse what
|
(syntax-parse what
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
(provide (except-out (all-defined-out) test-delimiter))
|
(provide (except-out (all-defined-out) test-delimiter))
|
||||||
(require "debug.rkt"
|
(require "debug.rkt"
|
||||||
tests/eli-tester
|
|
||||||
racket/match
|
racket/match
|
||||||
(for-syntax racket/base)
|
(for-syntax racket/base)
|
||||||
syntax/stx
|
syntax/stx
|
||||||
|
|
|
@ -3,3 +3,6 @@
|
||||||
macro testx () {x:expression} {syntax(x_result + 1)}
|
macro testx () {x:expression} {syntax(x_result + 1)}
|
||||||
|
|
||||||
testx 5 * 2;
|
testx 5 * 2;
|
||||||
|
|
||||||
|
for z = 1 to testx 5 * 2 do
|
||||||
|
printf("z is ~a\n", z)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user