From 1a05303798f67b20fe8caec7bd1f8eaa4ce36eaa Mon Sep 17 00:00:00 2001 From: murphy Date: Fri, 26 Mar 2010 04:24:34 +0000 Subject: Cleanup to Scheme scanner; removed :operator_fat token kind. --- lib/coderay/scanners/scheme.rb | 120 +++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 59 deletions(-) (limited to 'lib/coderay/scanners/scheme.rb') diff --git a/lib/coderay/scanners/scheme.rb b/lib/coderay/scanners/scheme.rb index 3fc60d2..cbd9729 100644 --- a/lib/coderay/scanners/scheme.rb +++ b/lib/coderay/scanners/scheme.rb @@ -2,6 +2,7 @@ module CodeRay module Scanners # Scheme scanner for CodeRay (by closure). + # # Thanks to murphy for putting CodeRay into public. class Scheme < Scanner @@ -15,62 +16,63 @@ module CodeRay lambda let let* letrec syntax-case define-syntax let-syntax letrec-syntax begin define quote if or and cond case do delay quasiquote set! cons force call-with-current-continuation call/cc - ] - + ] # :nodoc: + IDENT_KIND = CaseIgnoringWordList.new(:ident). - add(CORE_FORMS, :reserved) + add(CORE_FORMS, :reserved) # :nodoc: #IDENTIFIER_INITIAL = /[a-z!@\$%&\*\/\:<=>\?~_\^]/i #IDENTIFIER_SUBSEQUENT = /#{IDENTIFIER_INITIAL}|\d|\.|\+|-/ #IDENTIFIER = /#{IDENTIFIER_INITIAL}#{IDENTIFIER_SUBSEQUENT}*|\+|-|\.{3}/ - IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./ - DIGIT = /\d/ - DIGIT10 = DIGIT - DIGIT16 = /[0-9a-f]/i - DIGIT8 = /[0-7]/ - DIGIT2 = /[01]/ - RADIX16 = /\#x/i - RADIX8 = /\#o/i - RADIX2 = /\#b/i - RADIX10 = /\#d/i - EXACTNESS = /#i|#e/i - SIGN = /[\+-]?/ - EXP_MARK = /[esfdl]/i - EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/ - SUFFIX = /#{EXP}?/ - PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/ - PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/ - PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/ - PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/ - UINT10 = /#{DIGIT10}+#*/ - UINT16 = /#{DIGIT16}+#*/ - UINT8 = /#{DIGIT8}+#*/ - UINT2 = /#{DIGIT2}+#*/ - DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/ - UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/ - UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/ - UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/ - UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/ - REAL10 = /#{SIGN}#{UREAL10}/ - REAL16 = /#{SIGN}#{UREAL16}/ - REAL8 = /#{SIGN}#{UREAL8}/ - REAL2 = /#{SIGN}#{UREAL2}/ - IMAG10 = /i|#{UREAL10}i/ - IMAG16 = /i|#{UREAL16}i/ - IMAG8 = /i|#{UREAL8}i/ - IMAG2 = /i|#{UREAL2}i/ - COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/ - COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/ - COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/ - COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/ - NUM10 = /#{PREFIX10}?#{COMPLEX10}/ - NUM16 = /#{PREFIX16}#{COMPLEX16}/ - NUM8 = /#{PREFIX8}#{COMPLEX8}/ - NUM2 = /#{PREFIX2}#{COMPLEX2}/ - NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/ - - private - def scan_tokens tokens,options + IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./ # :nodoc: + DIGIT = /\d/ # :nodoc: + DIGIT10 = /\d/ # :nodoc: + DIGIT16 = /[0-9a-f]/i # :nodoc: + DIGIT8 = /[0-7]/ # :nodoc: + DIGIT2 = /[01]/ # :nodoc: + RADIX16 = /\#x/i # :nodoc: + RADIX8 = /\#o/i # :nodoc: + RADIX2 = /\#b/i # :nodoc: + RADIX10 = /\#d/i # :nodoc: + EXACTNESS = /#i|#e/i # :nodoc: + SIGN = /[\+-]?/ # :nodoc: + EXP_MARK = /[esfdl]/i # :nodoc: + EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/ # :nodoc: + SUFFIX = /#{EXP}?/ # :nodoc: + PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/ # :nodoc: + PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/ # :nodoc: + PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/ # :nodoc: + PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/ # :nodoc: + UINT10 = /#{DIGIT10}+#*/ # :nodoc: + UINT16 = /#{DIGIT16}+#*/ # :nodoc: + UINT8 = /#{DIGIT8}+#*/ # :nodoc: + UINT2 = /#{DIGIT2}+#*/ # :nodoc: + DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/ # :nodoc: + UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/ # :nodoc: + UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/ # :nodoc: + UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/ # :nodoc: + UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/ # :nodoc: + REAL10 = /#{SIGN}#{UREAL10}/ # :nodoc: + REAL16 = /#{SIGN}#{UREAL16}/ # :nodoc: + REAL8 = /#{SIGN}#{UREAL8}/ # :nodoc: + REAL2 = /#{SIGN}#{UREAL2}/ # :nodoc: + IMAG10 = /i|#{UREAL10}i/ # :nodoc: + IMAG16 = /i|#{UREAL16}i/ # :nodoc: + IMAG8 = /i|#{UREAL8}i/ # :nodoc: + IMAG2 = /i|#{UREAL2}i/ # :nodoc: + COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/ # :nodoc: + COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/ # :nodoc: + COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/ # :nodoc: + COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/ # :nodoc: + NUM10 = /#{PREFIX10}?#{COMPLEX10}/ # :nodoc: + NUM16 = /#{PREFIX16}#{COMPLEX16}/ # :nodoc: + NUM8 = /#{PREFIX8}#{COMPLEX8}/ # :nodoc: + NUM2 = /#{PREFIX2}#{COMPLEX2}/ # :nodoc: + NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/ # :nodoc: + + protected + + def scan_tokens tokens, options state = :initial ident_kind = IDENT_KIND @@ -83,7 +85,7 @@ module CodeRay if scan(/ \s+ | \\\n /x) kind = :space elsif scan(/['\(\[\)\]]|#\(/) - kind = :operator_fat + kind = :operator # FIXME: was :operator_fat elsif scan(/;.*/) kind = :comment elsif scan(/#\\(?:newline|space|.?)/) @@ -123,15 +125,15 @@ module CodeRay end match ||= matched - if $DEBUG and not kind + if $CODERAY_DEBUG and not kind raise_inspect 'Error token %p in line %d' % - [[match, kind], line], tokens + [[match, kind], line], tokens end raise_inspect 'Empty token', tokens, state unless match tokens << [match, kind] - end # until eos + end if state == :string tokens << [:close, :string] @@ -139,7 +141,7 @@ module CodeRay tokens - end #scan_tokens - end #class - end #module scanners -end #module coderay \ No newline at end of file + end + end + end +end \ No newline at end of file -- cgit v1.2.1