summaryrefslogtreecommitdiff
path: root/modules/language/python/parser-tool.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/parser-tool.scm')
-rw-r--r--modules/language/python/parser-tool.scm48
1 files changed, 48 insertions, 0 deletions
diff --git a/modules/language/python/parser-tool.scm b/modules/language/python/parser-tool.scm
new file mode 100644
index 0000000..ec7b504
--- /dev/null
+++ b/modules/language/python/parser-tool.scm
@@ -0,0 +1,48 @@
+(define-module (language python parser-tool)
+ #:use-module (ice-9 pretty-print)
+ #:use-module (logic guile-log parsing scanner)
+ #:use-module ((logic guile-log parser)
+ #:select (setup-parser
+ f-nl f-nl!
+ *current-file-parsing*
+ make-file-reader file-next-line file-skip))
+ #:use-module (logic guile-log)
+ #:re-export (f-nl f-nl!)
+ #:export (f-seq f-seq! f-or f-or! f-not f-not! f-true f-false f-cons f-cons*
+ f-list INDENT <p-lambda> f* ff* ff? f? ff+ f+
+ f-reg f-reg! f-tag f-tag! f-eof f-out f-and f-and!
+ mk-token p-freeze parse
+ .. xx <p-cc>
+ f-pk))
+
+;; Preliminary
+(define do-print #t)
+(define pp
+ (case-lambda
+ ((s x)
+ (when do-print
+ (pretty-print `(,s ,(syntax->datum x))))
+ x)
+ ((x)
+ (when do-print
+ (pretty-print (syntax->datum x)))
+ x)))
+
+
+(begin
+ (define-guile-log-parser-tool (<p-lambda> (X XL N M INDENT)) <p-define> ..
+ xx <p-cc>)
+
+
+ (make-guile-log-scanner-tools <p-lambda> <fail> <p-cc> <succeds> ..
+ (X XL N M INDENT)
+ (c) (d)
+ s-false s-true s-mk-seq s-mk-and s-mk-or)
+
+ ;; Sets up a standar parser functionals with INDENT field added
+ (setup-parser
+ <p-define> <p-lambda> <fail> <p-cc> <succeds> .. xx
+ X XL N M (0 0 0)
+ s-false s-true s-mk-seq s-mk-and s-mk-or
+ s-seq s-and s-and! s-and!! s-or
+ pp))