Ignore:
Timestamp:
Apr 28, 2008, 7:34:20 AM (16 years ago)
Author:
Tatsukawa, Akimichi
Message:

parsing c_any fails

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ruby/trunk/adl_parser/lib/scanner.rb

    r17 r18  
    1010      module DADL
    1111        # c.f. http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/adl/parser/adl_scanner.l
    12         @@dadl_reserved = {
     12        RESERVED = {
    1313          'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
    1414          'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
     
    1616        }
    1717
    18         LOG = Logger.new('log/scanner.log')
     18        LOG = Logger.new('log/scanner.log','daily')
    1919
    2020        class RootScanner
     
    2222          def initialize
    2323            @parser = lambda do |input|
    24               Yaparc::Alt.new(
     24              Yaparc::Alt.new(Reserved.new,
    2525                              V_QUALIFIED_TERM_CODE_REF.new,
    26                               V_LOCAL_TERM_CODE_REF.new
     26                              V_LOCAL_TERM_CODE_REF.new,
     27                              ERR_V_QUALIFIED_TERM_CODE_REF.new,
     28                              V_TYPE_IDENTIFIER.new,
     29                              V_GENERIC_TYPE_IDENTIFIER.new,
     30                              V_STRING.new,
     31                              V_LOCAL_CODE.new,
     32                              V_REAL.new
    2733                              )
     34            end
     35          end
     36        end
     37
     38        class Reserved
     39          include Yaparc::Parsable
     40         
     41          def initialize
     42            @parser = lambda do |input|
     43              reserved_parsers = OpenEHR::ADL::Scanner::DADL::RESERVED.map do |keyword|
     44                Yaparc::Tokenize.new(Yaparc::Literal.new(keyword))
     45              end
     46              Yaparc::Alt.new(Yaparc::Apply.new(Yaparc::Alt.new(*reserved_parsers)) do |match|
     47                                LOG.info("Reserved: #{match}")
     48                                [OpenEHR::ADL::Scanner::DADL::RESERVED[match], OpenEHR::ADL::Scanner::DADL::RESERVED[match]]
     49                              end,
     50                              Yaparc::Apply.new(Yaparc::Regex.new(/\A[a-z][a-zA-Z0-9_]*/)) do |match|
     51                                LOG.info("V_ATTRIBUTE_IDENTIFIER: #{match}")
     52                                [:V_ATTRIBUTE_IDENTIFIER, match]
     53                              end)
    2854            end
    2955          end
     
    5379          end
    5480        end
     81
     82        class ERR_V_QUALIFIED_TERM_CODE_REF
     83          include Yaparc::Parsable
     84          def initialize
     85            @parser = lambda do |input|
     86              Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/)) do |match|
     87                LOG.info("ERR_V_QUALIFIED_TERM_CODE_REF: #{match}")
     88                [:ERR_V_QUALIFIED_TERM_CODE_REF, match]
     89              end
     90            end
     91          end
     92        end
     93
     94        class V_TYPE_IDENTIFIER
     95          include Yaparc::Parsable
     96          def initialize
     97            @parser = lambda do |input|
     98              Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*/)) do |match|
     99                LOG.info("V_TYPE_IDENTIFIER: #{match}")
     100                [:V_TYPE_IDENTIFIER, match]
     101              end
     102            end
     103          end
     104        end
     105
     106        class V_GENERIC_TYPE_IDENTIFIER
     107          include Yaparc::Parsable
     108          def initialize
     109            @parser = lambda do |input|
     110              Yaparc::Apply.new(Yaparc::Regex.new(/\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/)) do |match|
     111                LOG.info("V_GENERIC_TYPE_IDENTIFIER: #{match}")
     112                [:V_GENERIC_TYPE_IDENTIFIER, match]
     113              end
     114            end
     115          end
     116        end
     117
     118
     119        class V_LOCAL_CODE
     120          include Yaparc::Parsable
     121          def initialize
     122            @parser = lambda do |input|
     123              Yaparc::Apply.new(Yaparc::Regex.new(/\Aa[ct][0-9.]+/)) do |match|
     124                LOG.info("V_LOCAL_CODE: #{match}")
     125                [:V_LOCAL_CODE, match]
     126              end
     127            end
     128          end
     129        end
     130
     131        class V_STRING
     132          include Yaparc::Parsable
     133          def initialize
     134            @parser = lambda do |input|
     135              Yaparc::Apply.new(Yaparc::Regex.new(/\A"([^"]*)"/m)) do |match|
     136                LOG.info("V_STRING: #{match}")
     137                [:V_STRING, match]
     138              end
     139            end
     140          end
     141        end
     142
     143        class V_REAL
     144          include Yaparc::Parsable
     145          def initialize
     146            @parser = lambda do |input|
     147              Yaparc::Apply.new(Yaparc::Regex.new(/\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+/)) do |match|
     148                LOG.info("V_REAL: #{match}")
     149                [:V_REAL, match]
     150              end
     151            end
     152          end
     153        end
     154
    55155      end # of DADL
     156
    56157      module CADL
    57158        # c.f. http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/cadl/parser/cadl_scanner.l
Note: See TracChangeset for help on using the changeset viewer.