소스 검색

A little order and refactoring

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.5.1
Erez Shinan 7 년 전
부모
커밋
115c4c6d21
9개의 변경된 파일18개의 추가작업 그리고 34개의 파일을 삭제
  1. +4
    -0
      lark/common.py
  2. +1
    -1
      lark/parse_tree_builder.py
  3. +3
    -3
      lark/parser_frontends.py
  4. +0
    -0
      lark/parsers/__init__.py
  5. +3
    -2
      lark/parsers/earley.py
  6. +2
    -2
      lark/parsers/lalr_analysis.py
  7. +2
    -4
      lark/parsers/lalr_parser.py
  8. +1
    -2
      lark/tests/test_parser.py
  9. +2
    -20
      lark/tree.py

+ 4
- 0
lark/common.py 파일 보기

@@ -2,6 +2,10 @@
class GrammarError(Exception):
pass

class ParseError(Exception):
pass


def is_terminal(sym):
return sym.isupper() or sym[0] == '$'


+ 1
- 1
lark/parse_tree_builder.py 파일 보기

@@ -1,4 +1,4 @@
from .grammar_analysis import is_terminal
from .common import is_terminal

class Callback(object):
pass


+ 3
- 3
lark/parser_frontends.py 파일 보기

@@ -1,12 +1,12 @@
from .grammar_analysis import GrammarAnalyzer
from .parsers.lalr_analysis import GrammarAnalyzer
from .common import is_terminal
from . import parser, earley
from .parsers import lalr_parser, earley

class LALR:
def build_parser(self, rules, callback, start):
ga = GrammarAnalyzer(rules, start)
ga.analyze()
return parser.Parser(ga, callback)
return lalr_parser.Parser(ga, callback)

class Earley:
@staticmethod


+ 0
- 0
lark/parsers/__init__.py 파일 보기


lark/earley.py → lark/parsers/earley.py 파일 보기

@@ -1,6 +1,7 @@
"My name is Earley"

from .utils import classify, STRING_TYPE
from ..utils import classify, STRING_TYPE
from ..common import ParseError

try:
xrange
@@ -135,7 +136,7 @@ class Parser(object):
self.advance_to(table, pos + 1, set())

if not table[-1]:
raise Exception('Error at line {t.line}:{t.column}'.format(t=stream[pos]))
raise ParseError('Error at line {t.line}:{t.column}'.format(t=stream[pos]))

return list(self.finish(table))


lark/grammar_analysis.py → lark/parsers/lalr_analysis.py 파일 보기

@@ -1,7 +1,7 @@
from collections import defaultdict, deque

from .utils import classify, classify_bool, bfs, fzset
from .common import GrammarError, is_terminal
from ..utils import classify, classify_bool, bfs, fzset
from ..common import GrammarError, is_terminal

ACTION_SHIFT = 0


lark/parser.py → lark/parsers/lalr_parser.py 파일 보기

@@ -1,7 +1,5 @@
from .grammar_analysis import ACTION_SHIFT

class ParseError(Exception):
pass
from .lalr_analysis import ACTION_SHIFT
from ..common import ParseError

class Parser(object):
def __init__(self, ga, callback):

+ 1
- 2
lark/tests/test_parser.py 파일 보기

@@ -17,8 +17,7 @@ from io import (
logging.basicConfig(level=logging.INFO)

from lark.lark import Lark
from lark.grammar_analysis import GrammarError
from lark.parser import ParseError
from lark.common import GrammarError, ParseError

__path__ = os.path.dirname(__file__)
def _read(n, *args):


+ 2
- 20
lark/tree.py 파일 보기

@@ -33,6 +33,8 @@ class Tree(object):

def __eq__(self, other):
return self.data == other.data and self.children == other.children
def __hash__(self):
return hash((self.data, tuple(self.children)))

def find_pred(self, pred):
if pred(self):
@@ -46,26 +48,6 @@ class Tree(object):
def find_data(self, data):
return self.find_pred(lambda t: t.data == data)


# def find_path(self, pred):
# if pred(self):
# yield []
# else:
# for i, c in enumerate(self.children):
# if isinstance(c, Tree):
# for path in c.find_path(pred):
# yield [i] + path

# def follow_path(self, path):
# x = self
# for step in path:
# x = x.children[step]
# return x

# def set_at_path(self, path, value):
# x = self.follow_path(path[:-1])
# x.children[path[-1]] = value

# def clone(self):
# return Tree(self.data, [c.clone() if isinstance(c, Tree) else c for c in self.children])



불러오는 중...
취소
저장