First commit

master
Nala Ginrut 13 years ago
parent 90f897a379
commit 923df895c5

64
.gitignore vendored

@ -0,0 +1,64 @@
config.guess
config.sub
config.h.in
configure
obj/*
*.so
*.o
Makefile
.deps
.libs
autom4te.cache
config.h
*.doc
*.x
*.lo
*.la
aclocal.m4
depcomp
missing
mdate-sh
texinfo.tex
*~
,*
aclocal.m4
confdefs.h
config.build-subdirs
config.cache
config.h
config.status
conftest
conftest.c
depcomp
ltconfig
mdate-sh
missing
mkinstalldirs
stamp-h1
*.go
cscope.out
cscope.files
*.log
*.aux
*.cp
*.cps
*.dvi
*.fn
*.fns
*.ky
*.pg
*.toc
*.tp
*.vr
*.tps
*.vrs
*.pgs
*.rn
*.rns
*.scan
*.am
*.d
version.scm
*.m4
ltmain.sh
libtool

@ -0,0 +1,82 @@
;; Copyright (C) 2013
;; "Mu Lei" known as "NalaGinrut" <NalaGinrut@gmail.com>
;; This file is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(define-module (language csv compile-tree-il)
#:use-module (language tree-il)
#:use-module (ice-9 receive)
#:use-module (system base pmatch)
#:use-module (srfi srfi-1)
#:export (compile-tree-il))
(define-syntax-rule (-> (type arg ...))
`(type ,arg ...))
(define empty-lexical-environment
(make-hash-table))
(define (csv-init)
#t
;; nothing to do yet.
)
(define (compile-tree-il exp env opts)
(values
(parse-tree-il
(begin (imp-init)
(comp exp empty-lexical-environment)))
env
env))
(define (location x)
(and (pair? x)
(let ((props (source-properties x)))
(and (not (null? props))
props))))
(define-syntax-rule (->boolean x)
(not (eq? x 'false)))
;; for emacs:
;; (put 'pmatch/source 'scheme-indent-function 1)
(define-syntax-rule (pmatch/source x clause ...)
(let ((x x))
(let ((res (pmatch x
clause ...)))
(let ((loc (location x)))
(if loc
(set-source-properties! res (location x))))
res)))
(define (lookup name env)
(hash-ref env name))
(define (store name value env)
(hash-set! env name value))
(define (comp src e)
(let ((l 0));;(location src)))
(define (let1 what proc)
(let ((sym (gensym)))
(-> (let (list sym) (list sym) (list what)
(proc sym)))))
(define (begin1 what proc)
(let1 what (lambda (v)
(-> (begin (proc v)
(-> (lexical v v)))))))
(pmatch/source
src
)))

@ -0,0 +1,52 @@
;; Copyright (C) 2012
;; "Mu Lei" known as "NalaGinrut" <NalaGinrut@gmail.com>
;; This file is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(define-module (language csv lexer)
#:use-module (system base lalr)
#:use-module (ice-9 receive)
#:use-module (ice-9 rdelim)
#:export (make-csv-tokenizer))
(define (port-source-location port)
(make-source-location (port-filename port)
(port-line port)
(port-column port)
(false-if-exception (ftell port))
#f))
(define imp-tokenizer
(lambda (port)
(let* ((loc (port-source-location port))
(return (lambda (category value)
(make-lexical-token category loc value)))
(c (peek-char port)))
(cond
((eof-object? c) '*eoi*)
;; TODO
(else
(error "wrong syntax!" c))))))
(define (make-imp-tokenizer port)
(lambda ()
(imp-tokenizer port)))
;; (define imp-tokenize
;; (lambda (port)
;; (let lp ((out '()))
;; (let ((tok (imp-tokenizer port)))
;; (if (eq? tok '*eoi*)
;; (reverse! out)
;; (lp (cons tok out)))))))

@ -0,0 +1,49 @@
;; Copyright (C) 2013
;; "Mu Lei" known as "NalaGinrut" <NalaGinrut@gmail.com>
;; This file is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(define-module (language csv parser)
#:use-module (language csv lexer)
#:use-module (system base lalr)
#:export (csv-read))
(define* (syntax-error message #:optional token)
(if (lexical-token? token)
(throw 'syntax-error #f message
(and=> (lexical-token-source token)
source-location->source-properties)
(or (lexical-token-value token)
(lexical-token-category token))
#f)
(throw 'syntax-error #f message #f token #f)))
(define *eof-object*
(call-with-input-string "" read-char))
(define (csv-read port)
(let ((parse (make-parser)))
(parse (make-csv-tokenizer port) syntax-error)))
(define (make-parser)
(lalr-parser
(;; keyword
;; TODO)
(program (stmt) : $1
(*eoi*) : *eof-object*)
)))

@ -0,0 +1,35 @@
;; Copyright (C) 2013
;; "Mu Lei" known as "NalaGinrut" <NalaGinrut@gmail.com>
;; This file is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(define-module (language csv spec)
#:use-module (system base language)
#:use-module (language csv compile-tree-il)
#:use-module (language csv parser)
#:export (csv))
;;;
;;; Language definition
;;;
;; Actually, CSV is not a language anyway, but we define this seudo language to
;; convert CSV format into s-expr.
(define-language csv
#:title "CSV language"
#:reader (lambda (port env)
(csv-read port))
#:compilers `((tree-il . ,compile-tree-il))
#:printer write
)
Loading…
Cancel
Save