Parser/grammar

Source   Edit  

Types

GrammarNode = ref object
  father*: GrammarNode
  repeat*: Repeat
  epsilonSet*: HashSet[GrammarNode]
  case kind*: char
  of 'a', 's':
    token*: Token
    nextSet*: HashSet[GrammarNode]
  of 'A' .. 'H':
    children*: seq[GrammarNode]
  else:
    nil
Source   Edit  
Repeat {.pure.} = enum
  None, Star, Plus, Query
Source   Edit  

Vars

grammarSet = initTable(32)
Source   Edit  

Lets

successGrammarNode = newGrammarNode("s", "")
Source   Edit  

Procs

proc `$`(grammar: Grammar): string {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc `$`(grammarNode: GrammarNode): string {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc isGrammarTerminator(node: GrammarNode): bool {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc isOptional(node: GrammarNode): bool {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc matchToken(node: GrammarNode; token: Token): bool {....raises: [KeyError],
    tags: [], forbids: [].}
Source   Edit