Class: OrgParse::StructParser

Inherits:
Racc::Parser
  • Object
show all
Includes:
InlineUtils, Utils
Defined in:
lib/org-parse/struct-parser.rb,
lib/org-parse/struct-parser.tab.rb

Overview

パーサー

構造レベルの構文解析を行う。 各行の中身については、InlineParserを、内部的に呼び出して解析している。

ROOT–+– ブロック要素

   |      +--- ブロック要素
   +-- ブロック要素
の様な形式の構文木を作成する。

Node クラスを参照

Constant Summary collapse

Racc_arg =
[
racc_action_table,
racc_action_check,
racc_action_default,
racc_action_pointer,
racc_goto_table,
racc_goto_check,
racc_goto_default,
racc_goto_pointer,
racc_nt_base,
racc_reduce_table,
racc_token_table,
racc_shift_n,
racc_reduce_n,
racc_use_result_var ]
Racc_token_to_s_table =
[
'$end',
'error',
'PLOW',
'TEXTLINE',
'WHITELINE',
'TABLE_ROW',
'TABLE_SEP',
'QUOTE',
'BLOCK_END',
'EXAMPLE',
'DOCUMENT_START',
'HEADLINE',
'VARIABLELINE',
'SEC_END',
'BLOCK_START',
'UL_START',
'UL_END',
'OL_START',
'OL_END',
'DL_START',
'DL_END',
'LI_START',
'LI_END',
'P_END',
'FOOTNOTE',
'$start',
'document',
'dummy_section',
'sections',
'doc_start',
'items',
'section',
'section_body',
'headline',
'sitems',
'sitem',
'textlines',
'block',
'table',
'lists',
'whitelines',
'variable',
'footnote',
'item',
'textline',
'html_quote',
'unordered_list',
'ordered_list',
'description_list',
'examples',
'example',
'list_items',
'list_item',
'table_rows',
'table_sep',
'table_row']
Racc_debug_parser =
false

Instance Method Summary collapse

Methods included from InlineUtils

#line_parse, #set_struct_parser

Methods included from Utils

#get_indent

Constructor Details

#initialize(src, opts) ⇒ StructParser

コンストラクタ



25
26
27
28
29
30
# File 'lib/org-parse/struct-parser.rb', line 25

def initialize(src, opts)
  @scanner = StructScanner.new(src, opts)
  @variables = []
  @yydebug = true
  set_struct_parser self
end

Instance Method Details

#_reduce_none(val, _values, result) ⇒ Object



602
603
604
# File 'lib/org-parse/struct-parser.tab.rb', line 602

def _reduce_none( val, _values, result )
 result
end

#next_tokenObject



65
66
67
68
69
# File 'lib/org-parse/struct-parser.rb', line 65

def next_token
  (token, variables) = @scanner.next_token
  @variables = variables unless variables.empty?
  token
end

#parseObject

構文解析を実行し、構文木を返す



33
34
35
36
37
38
# File 'lib/org-parse/struct-parser.rb', line 33

def parse
  @scanner.scan
  root = do_parse
  update_nodes root
  root
end

#update_nodes(node, opt = {}) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/org-parse/struct-parser.rb', line 40

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

#variablesObject



71
72
73
74
75
# File 'lib/org-parse/struct-parser.rb', line 71

def variables
  ret = @variables.dup
  @variables.clear
  ret
end