class LDLgeneratedLanguage::Gds

Constants

GrammarDef

Public Class Methods

parse( s, config = {} ) click to toggle source
# File lib/gdstruct/lng_gds.rb, line 13
def self.parse( s, config = {} )
  @parserClass ||= begin
    Treetop.load_from_string GrammarDef
    instance_eval( 'Language_gds_03Parser' )
  end
  parser = @parserClass.new

  parseTree = parser.parse( s + "\n" )

  unless parseTree
    lineOfFailure   = parser.failure_line
    columnOfFailure = parser.failure_column

    s = "LANGUAGE_GDS: Error happend, while parsing the definition: line #{lineOfFailure}, column #{columnOfFailure}" + "\n"
    s += parser.failure_reason + "\n"  if parser.failure_reason
    s += "--->" + "\n"
    s += parser.input.lines[((lineOfFailure-1-5)>0 ? (lineOfFailure-1-5) : 0)..(lineOfFailure-1)].join.chomp + "\n"
    s += ' '*((parser.failure_column) -1) + '^' + "\n"
    s += "<---" + "\n"

    raise SyntaxError, s
  end

  context = Struct.new( :config, :globalvars ).new( { allow_env: false, context: nil }.merge( config ), {} )

  parseTree.ast( context )
end