Class: Crokus::Lexer

Inherits:
GenericLexer show all
Defined in:
lib/crokus/lexer.rb

Instance Method Summary collapse

Methods inherited from GenericLexer

#get_token, #ignore, #keyword, #next_token, #open, #position, #token, #tokenize

Constructor Details

#initializeLexer

Returns a new instance of Lexer.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/crokus/lexer.rb', line 6

def initialize
  super
  ignore /\s+/
  keyword "auto"
  keyword "break"
  keyword "case"
  keyword "char"
  keyword "const"
  keyword "continue"
  keyword "default"
  keyword "do"
  keyword "double"
  keyword "else"
  keyword "enum"
  keyword "extern"
  keyword "float"
  keyword "for"
  keyword "goto"
  keyword "if"
  keyword "int"
  keyword "long"
  keyword "register"
  keyword "return"
  keyword "short"
  keyword "signed"
  keyword "sizeof"
  keyword "static"
  keyword "struct"
  keyword "switch"
  keyword "typedef"
  keyword "union"
  keyword "unsigned"
  keyword "void"
  keyword "volatile"
  keyword "while"

  token :qmark            => /\?/
  token :lparen           => /\(/
  token :rparen           => /\)/
  token :lbrace           => /\{/
  token :rbrace           => /\}/
  token :lbrack           => /\[/
  token :rbrack           => /\]/
  token :semicolon        => /;/
  token :colon            => /:/
  token :comma            => /\,/
  token :lcomment         => /\/\*/
  token :rcomment         => /\*\//
  token :comment          => /\/\/(.*)/

  token :dot              => /\./
  token :neq              => /!=/
  token :not              => /\!/
  token :eq               => /\=\=/
  token :assign           => /\=/
  token :inc_op           => /\+\+/
  token :add_assign       => /\+\=/
  token :add              => /\+/
  token :dec_op           => /\-\-/
  token :sub_assign       => /\-\=/
  token :ptr_op           => /\-\>/
  token :sub              => /\-/
  token :mul_assign       => /\*=/
  token :mul              => /\*/
  token :div_assign       => /\/=/
  token :div              => /\//

  token :shift_r          => /\>\>/
  token :shift_l          => /\<\</
  token :oror             => /\|\|/
  token :lte              => /<=/
  token :lt               => /</
  token :gte              => />=/
  token :gt               => />/
  token :andand           => /\&\&/
  token :and              => /\&/
  token :or               => /\|/
  token :mod_assign       => /\%=/
  token :mod              => /\%/
  token :xor_assign       => /\^\=/
  token :xor              => /\^/

  token :sharp            => /#/

  # .............literals..............................

  token :ident            => /\A[a-zA-Z]\w*/i
  token :float_lit        => /\A\d*(\.\d+)(E([+-]?)\d+)?/
  token :integer_lit      => /\A((0x[0-9a-fA-F]+)|\d+)L?/
  token :string_lit       => /\A"[^"]*"/
  token :char_lit         => /\A'\\?.'/
  token :lexer_warning    => /./

end