Changeset 18 for ruby/trunk/adl_parser/lib/scanner.rb
- Timestamp:
- Apr 28, 2008, 7:34:20 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/trunk/adl_parser/lib/scanner.rb
r17 r18 10 10 module DADL 11 11 # 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 = { 13 13 'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE 14 14 'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE … … 16 16 } 17 17 18 LOG = Logger.new('log/scanner.log' )18 LOG = Logger.new('log/scanner.log','daily') 19 19 20 20 class RootScanner … … 22 22 def initialize 23 23 @parser = lambda do |input| 24 Yaparc::Alt.new( 24 Yaparc::Alt.new(Reserved.new, 25 25 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 27 33 ) 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) 28 54 end 29 55 end … … 53 79 end 54 80 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 55 155 end # of DADL 156 56 157 module CADL 57 158 # 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.