Sha256: b41fda834b61b9498004f01cc4bf699b884842bb09192b1cff9287c6e0d8a34d
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
# -*- coding: utf-8 -*- require 'racc/parser' require ::File.join(OrgParse::LIBPATH , 'org-parse', 'struct-parser.tab.rb') require ::File.join(OrgParse::LIBPATH , 'org-parse', 'utils.rb') require ::File.join(OrgParse::LIBPATH , 'org-parse', 'inline-parser.rb') module OrgParse # パーサー # # 構造レベルの構文解析を行う。 # 各行の中身については、InlineParserを、内部的に呼び出して解析している。 # # ROOT--+-- ブロック要素 # | +--- ブロック要素 # +-- ブロック要素 # の様な形式の構文木を作成する。 # Node クラスを参照 # class StructParser < Racc::Parser include Utils include InlineUtils # コンストラクタ def initialize(src, opts) @scanner = StructScanner.new(src, opts) @variables = [] @yydebug = true set_struct_parser self end # 構文解析を実行し、構文木を返す def parse @scanner.scan root = do_parse update_nodes root root end def update_nodes(node, opt = {}) cnt = 1; section_no = node.section_no if node.kind == :SECTION node.children.each do |n| if n.is_a? Array n.each {|a| a.parent = node update_nodes a, opt } next end n.parent = node if n.kind == :SECTION if node.kind == :ROOT n.section_no = cnt.to_s else n.section_no = section_no + "." + cnt.to_s end cnt += 1 end update_nodes n, opt end end def next_token (token, variables) = @scanner.next_token @variables = variables unless variables.empty? token end def variables ret = @variables.dup @variables.clear ret end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
org-parse-0.1.2 | lib/org-parse/struct-parser.rb |