File: comments.rb

package info (click to toggle)
ruby-parslet 1.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 908 kB
  • ctags: 473
  • sloc: ruby: 5,220; makefile: 2
file content (35 lines) | stat: -rw-r--r-- 938 bytes parent folder | download | duplicates (6)
1
2
3
4
5
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
# A small example on how to parse common types of comments. The example
# started out with parser code from Stephen Waits. 

$:.unshift File.dirname(__FILE__) + "/../lib"

require 'pp'
require 'parslet'
require 'parslet/convenience'

class ALanguage < Parslet::Parser
  root(:lines)
  
  rule(:lines) { line.repeat }
  rule(:line) { spaces >> expression.repeat >> newline }
  rule(:newline) { str("\n") >> str("\r").maybe }
  
  rule(:expression) { (str('a').as(:a) >> spaces).as(:exp) }
  
  rule(:spaces) { space.repeat }
  rule(:space) { multiline_comment | line_comment | str(' ') }
  
  rule(:line_comment) { (str('//') >> (newline.absent? >> any).repeat).as(:line) }
  rule(:multiline_comment) { (str('/*') >> (str('*/').absent? >> any).repeat >> str('*/')).as(:multi) }
end

code = %q(
  a
  // line comment
  a a a // line comment
  a /* inline comment */ a 
  /* multiline
  comment */
)

pp ALanguage.new.parse_with_debug(code)