# SrcLexer SrcLexer is a simple source file lexer. ## Installation Add this line to your application's Gemfile: gem 'src_lexer' And then execute: $ bundle Or install it yourself as: $ gem install src_lexer ## Usage lexer = SrcLexer::Lexer.new( ['struct', 'enum', 'true', 'false'], # kyewords ['{', '}', '(', ')', ',', '==', '=', ';'], # symbols ['"', '"'], # string literal markers '//', # line comment marker ['/*', '*/'] # multi line comment markers ) lexer.analyze(<<-'EOS') // comment enum ID { First = 1, Second = 1.5 } /* comment againe */ struct Data { string name = "This is a name."; ID id; } bool b = (true==false); EOS lexer.pop_token # => ['enum', SrcLexer::Token.new('enum', 2, 3)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('ID', 2, 8)] lexer.pop_token # => ['{', SrcLexer::Token.new('{', 2, 11)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('First', 3, 5)] lexer.pop_token # => ['=', SrcLexer::Token.new('=', 3, 11)] lexer.pop_token # => [:NUMBER, SrcLexer::Token.new('1', 3, 13)] lexer.pop_token # => [',', SrcLexer::Token.new(',', 3, 14)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('Second', 4, 5)] lexer.pop_token # => ['=', SrcLexer::Token.new('=', 4, 12)] lexer.pop_token # => [:NUMBER, SrcLexer::Token.new('1.5', 4, 14)] lexer.pop_token # => ['}', SrcLexer::Token.new('}', 5, 3)] lexer.pop_token # => ['struct', SrcLexer::Token.new('struct', 8, 3)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('Data', 8, 10)] lexer.pop_token # => ['{', SrcLexer::Token.new('{', 8, 15)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('string', 9, 5)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('name', 9, 12)] lexer.pop_token # => ['=', SrcLexer::Token.new('=', 9, 17)] lexer.pop_token # => [:STRING, SrcLexer::Token.new('"This is a name."', 9, 19)] lexer.pop_token # => [';', SrcLexer::Token.new(';', 9, 36)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('ID', 10, 5)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('id', 10, 8)] lexer.pop_token # => [';', SrcLexer::Token.new(';', 10, 10)] lexer.pop_token # => ['}', SrcLexer::Token.new('}', 11, 3)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('bool', 12, 3)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('b', 12, 8)] lexer.pop_token # => [:IDENT, SrcLexer::Token.new('=', 12, 10)] lexer.pop_token # => ['(', SrcLexer::Token.new('(', 12, 12)] lexer.pop_token # => ['true', SrcLexer::Token.new('true', 12, 13)] lexer.pop_token # => ['==', SrcLexer::Token.new('==', 12, 17)] lexer.pop_token # => ['false', SrcLexer::Token.new('false', 12, 19)] lexer.pop_token # => [')', SrcLexer::Token.new(')', 12, 24)] lexer.pop_token # => [';', SrcLexer::Token.new(';', 12, 25)] lexer.pop_token # => SrcLexer::Lexer::END_TOKEN ## Contributing 1. Fork it ( http://github.com//src_lexer/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request