source: ruby/trunk/adl_parser/lib/scanner.rb@ 17

Last change on this file since 17 was 17, checked in by Tatsukawa, Akimichi, 16 years ago

begin to add scanner module using yaparc

File size: 1.9 KB
Line 
1require 'logger'
2require 'rubygems'
3require 'yaparc'
4
5
6
7module OpenEHR
8 module ADL
9 module Scanner
10 module DADL
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 = {
13 'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
14 'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
15 'infinity' => :SYM_INFINITY # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
16 }
17
18 LOG = Logger.new('log/scanner.log')
19
20 class RootScanner
21 include Yaparc::Parsable
22 def initialize
23 @parser = lambda do |input|
24 Yaparc::Alt.new(
25 V_QUALIFIED_TERM_CODE_REF.new,
26 V_LOCAL_TERM_CODE_REF.new
27 )
28 end
29 end
30 end
31
32 class V_QUALIFIED_TERM_CODE_REF
33 include Yaparc::Parsable
34 def initialize
35 @parser = lambda do |input|
36 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9()\._-]+::[a-zA-Z0-9\._-]+\]/)) do |match|
37 LOG.info("V_QUALIFIED_TERM_CODE_REF: #{match}")
38 [:V_QUALIFIED_TERM_CODE_REF, match]
39 end
40 end
41 end
42 end
43
44 class V_LOCAL_TERM_CODE_REF
45 include Yaparc::Parsable
46 def initialize
47 @parser = lambda do |input|
48 Yaparc::Apply.new(Yaparc::Regex.new(/\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/)) do |match|
49 LOG.info("V_TERM_CODE_REF: #{match}")
50 [:V_LOCAL_TERM_CODE_REF, match]
51 end
52 end
53 end
54 end
55 end # of DADL
56 module CADL
57 # c.f. http://www.openehr.org/svn/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/cadl/parser/cadl_scanner.l
58 end
59 end
60 end
61end
Note: See TracBrowser for help on using the repository browser.