Module: Puppet::Pops::Parser::LexerSupport
- Included in:
- HeredocSupport, Lexer2, SlurpSupport
- Defined in:
- lib/puppet/pops/parser/lexer_support.rb
Overview
This is an integral part of the Lexer. It is broken out into a separate module for maintainability of the code, and making the various parts of the lexer focused.
Defined Under Namespace
Classes: TokenValue
Instance Method Summary collapse
-
#assert_numeric(value, pos) ⇒ Object
Asserts that the given string value is a float, or an integer in decimal, octal or hex form.
-
#create_lex_error(issue, args = {}, pos = nil) ⇒ Puppet::ParseErrorWithIssue
The created error.
- #filename ⇒ Object
-
#followed_by ⇒ Object
Returns “<eof>” if at end of input, else the following 5 characters with n r t escaped.
-
#format_quote(q) ⇒ Object
Returns a quoted string using “ or ‘ depending on the given a strings’s content.
-
#lex_error(issue, args = {}, pos = nil) ⇒ Object
Raises a Puppet::ParserErrorWithIssue with the given issue and arguments.
-
#lex_error_without_pos(issue, args = {}) ⇒ Object
Raises a Puppet::LexError with the given message.
- #lex_warning(issue, args = {}, pos = nil) ⇒ Object
- #line(pos) ⇒ Object
- #position(pos) ⇒ Object
Instance Method Details
#assert_numeric(value, pos) ⇒ Object
Asserts that the given string value is a float, or an integer in decimal, octal or hex form. An error is raised if the given value does not comply.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 76 def assert_numeric(value, pos) if value =~ /^0[xX]/ lex_error(Puppet::Pops::Issues::INVALID_HEX_NUMBER, {:value => value}, pos) unless value =~ /^0[xX][0-9A-Fa-f]+$/ elsif value =~ /^0[^.]/ lex_error(Puppet::Pops::Issues::INVALID_OCTAL_NUMBER, {:value => value}, pos) unless value =~ /^0[0-7]+$/ elsif value =~ /^\d+[eE.]/ lex_error(Puppet::Pops::Issues::INVALID_DECIMAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+(?:\.\d+)?(?:[eE]-?\d+)?$/ else lex_error(Puppet::Pops::Issues::ILLEGAL_NUMBER, {:value => value}, pos) unless value =~ /^\d+$/ end end |
#create_lex_error(issue, args = {}, pos = nil) ⇒ Puppet::ParseErrorWithIssue
Returns the created error.
63 64 65 66 67 68 69 70 71 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 63 def create_lex_error(issue, args = {}, pos = nil) Puppet::ParseErrorWithIssue.new( issue.format(args), filename, line(pos), position(pos), nil, issue.issue_code) end |
#filename ⇒ Object
35 36 37 38 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 35 def filename file = @locator.file file.is_a?(String) && !file.empty? ? file : nil end |
#followed_by ⇒ Object
Returns “<eof>” if at end of input, else the following 5 characters with n r t escaped
7 8 9 10 11 12 13 14 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 7 def followed_by return "<eof>" if @scanner.eos? result = @scanner.rest[0,5] + "..." result.gsub!("\t", '\t') result.gsub!("\n", '\n') result.gsub!("\r", '\r') result end |
#format_quote(q) ⇒ Object
Returns a quoted string using “ or ‘ depending on the given a strings’s content
17 18 19 20 21 22 23 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 17 def format_quote(q) if q == "'" '"\'"' else "'#{q}'" end end |
#lex_error(issue, args = {}, pos = nil) ⇒ Object
Raises a Puppet::ParserErrorWithIssue with the given issue and arguments
31 32 33 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 31 def lex_error(issue, args = {}, pos=nil) raise create_lex_error(issue, args, pos) end |
#lex_error_without_pos(issue, args = {}) ⇒ Object
Raises a Puppet::LexError with the given message
26 27 28 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 26 def lex_error_without_pos(issue, args = {}) raise Puppet::ParseErrorWithIssue.new(issue.format(args), nil, nil, nil, nil, issue.issue_code) end |
#lex_warning(issue, args = {}, pos = nil) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 48 def lex_warning(issue, args = {}, pos=nil) Puppet::Util::Log.create({ :level => :warning, :message => issue.format(args), :issue_code => issue.issue_code, :file => filename, :line => line(pos), :pos => position(pos), }) end |
#line(pos) ⇒ Object
40 41 42 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 40 def line(pos) @locator.line_for_offset(pos || @scanner.pos) end |
#position(pos) ⇒ Object
44 45 46 |
# File 'lib/puppet/pops/parser/lexer_support.rb', line 44 def position(pos) @locator.pos_on_line(pos || @scanner.pos) end |