aboutsummaryrefslogtreecommitdiff
path: root/module/c/lex.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/c/lex.scm')
-rw-r--r--module/c/lex.scm15
1 files changed, 9 insertions, 6 deletions
diff --git a/module/c/lex.scm b/module/c/lex.scm
index 5f395322..30fcd3c1 100644
--- a/module/c/lex.scm
+++ b/module/c/lex.scm
@@ -71,7 +71,7 @@
(define-peg-pattern base-16-char all
(and (ignore "x") base-16-digit (? base-16-digit)))
-(define-peg-pattern escaped-char all
+(define-peg-pattern escaped-char body
(and (ignore "\\") (or base-16-char
base-8-char
peg-any)))
@@ -79,10 +79,10 @@
(define-peg-pattern char all
(and (ignore "'") (or escaped-char peg-any) (ignore "'")))
-;; (define-peg-pattern quot none (string "\""))
+(define-peg-pattern quot none "\"")
-;; (define-peg-pattern string all
-;; (and quot (* (or escaped-char (or peg-any))) quot))
+(define-peg-pattern string all
+ (and quot (* (or escaped-char (and (not-followed-by "\"") peg-any))) quot))
(define-peg-pattern* operator all
`(or ,@(map symbol->string symbol-binary-operators)
@@ -130,15 +130,18 @@
;; first case is "same" as expr, but in different order to prevent
;; infinite self reference. Pre and postfix not here, solved by having
;; them before infix in expr
- (and (or funcall postfix prefix group char number variable)
+ (and (or funcall postfix prefix group literal variable)
sp operator sp expr))
(define-peg-pattern funcall all
(and variable sp group))
+(define-peg-pattern literal body
+ (or char string number))
+
;;; main parser
(define-peg-pattern expr body
- (+ (and sp (or infix postfix prefix funcall group char number variable)
+ (+ (and sp (or infix postfix prefix funcall group literal variable)
sp)))