mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 01:52:56 +01:00
Implement caller keyword argument to slog()
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
40e6add5ad
commit
860f7d8cab
2 changed files with 35 additions and 21 deletions
|
|
@ -92,8 +92,9 @@ def dump(obj):
|
||||||
slog(INFO, "obj.%s = %s (=> %s)" % (str(type(c)), str(c), str(v)))
|
slog(INFO, "obj.%s = %s (=> %s)" % (str(type(c)), str(c), str(v)))
|
||||||
|
|
||||||
def dump_grammar(prio, grammar):
|
def dump_grammar(prio, grammar):
|
||||||
|
caller = get_caller_pos()
|
||||||
for t, p in grammar.iteritems():
|
for t, p in grammar.iteritems():
|
||||||
p.dump(prio)
|
p.dump(prio, caller=caller)
|
||||||
|
|
||||||
def cleanup_token(tok):
|
def cleanup_token(tok):
|
||||||
tok = tok.strip()
|
tok = tok.strip()
|
||||||
|
|
@ -179,6 +180,7 @@ class RuleComp:
|
||||||
self.token = token
|
self.token = token
|
||||||
self.tp = tp
|
self.tp = tp
|
||||||
slog(INFO, "creating rule component >" + self.str() + "<")
|
slog(INFO, "creating rule component >" + self.str() + "<")
|
||||||
|
assert(token != "{ assignment")
|
||||||
|
|
||||||
def __eq__(self, rhs):
|
def __eq__(self, rhs):
|
||||||
if self.token != rhs.token:
|
if self.token != rhs.token:
|
||||||
|
|
@ -288,23 +290,30 @@ class Symbol:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def dump(self, prio = NOTICE, msg=""):
|
def dump(self, prio = NOTICE, msg="", caller=None):
|
||||||
slog(prio, ",----------------", msg)
|
if caller is None:
|
||||||
slog(prio, "| type =", self.tp)
|
caller = get_caller_pos(1)
|
||||||
slog(prio, "| name =", self.name)
|
slog(prio, ",----------------", msg, caller=caller)
|
||||||
slog(prio, "| token =", self.token)
|
slog(prio, "| type =", self.tp, caller=caller)
|
||||||
slog(prio, "| sym =", self.sym)
|
slog(prio, "| name =", self.name, caller=caller)
|
||||||
slog(prio, "| term =", self.term)
|
slog(prio, "| token =", self.token, caller=caller)
|
||||||
slog(prio, "| regex =", self.regex)
|
slog(prio, "| sym =", self.sym, caller=caller)
|
||||||
slog(prio, "| datatype =", self.datatype)
|
slog(prio, "| term =", self.term, caller=caller)
|
||||||
slog(prio, "| is_lexical_element =", self.is_lexical_element)
|
slog(prio, "| regex =", self.regex, caller=caller)
|
||||||
slog(prio, "| rules =", format_rules(self.rules))
|
slog(prio, "| datatype =", self.datatype, caller=caller)
|
||||||
slog(prio, "`----------------", msg)
|
slog(prio, "| is_lexical_element =", self.is_lexical_element, caller=caller)
|
||||||
|
slog(prio, "| rules =", format_rules(self.rules), caller=caller)
|
||||||
|
slog(prio, "`----------------", msg, caller=caller)
|
||||||
|
|
||||||
def split_list_by(l_, tok):
|
def split_list_by(l_, tok):
|
||||||
l = copy.deepcopy(l_)
|
l = copy.deepcopy(l_)
|
||||||
return [list(x[1]) for x in itertools.groupby(l, lambda x: x==tok) if not x[0]]
|
return [list(x[1]) for x in itertools.groupby(l, lambda x: x==tok) if not x[0]]
|
||||||
|
|
||||||
|
|
||||||
|
def split_list_by_regex(l_, regex):
|
||||||
|
l = copy.deepcopy(l_)
|
||||||
|
return [list(x[1]) for x in itertools.groupby(l, lambda x: re.match(regex, x)) if not x[0]]
|
||||||
|
|
||||||
def grammar_parse_ebnf(content_):
|
def grammar_parse_ebnf(content_):
|
||||||
|
|
||||||
# remove comments
|
# remove comments
|
||||||
|
|
@ -343,8 +352,8 @@ def grammar_parse_ebnf(content_):
|
||||||
raw_rules = split_list_by(raw_lhs_rhs[1], '|')
|
raw_rules = split_list_by(raw_lhs_rhs[1], '|')
|
||||||
#slog(INFO, "raw_lhs_rhs[1] = ", raw_lhs_rhs[1])
|
#slog(INFO, "raw_lhs_rhs[1] = ", raw_lhs_rhs[1])
|
||||||
for raw_rule in raw_rules:
|
for raw_rule in raw_rules:
|
||||||
#slog(INFO, "raw_rule =", raw_rule)
|
slog(INFO, "raw_rule =", raw_rule)
|
||||||
rule_tokens = split_list_by(raw_rule, ',')
|
rule_tokens = split_list_by_regex(raw_rule, ',{}\(\)\[\]')
|
||||||
#slog(INFO, "rule_tokens =", rule_tokens)
|
#slog(INFO, "rule_tokens =", rule_tokens)
|
||||||
rule = []
|
rule = []
|
||||||
for raw_tok in rule_tokens:
|
for raw_tok in rule_tokens:
|
||||||
|
|
@ -363,7 +372,6 @@ def grammar_parse_ebnf(content_):
|
||||||
slog(INFO, "Appending production>" + lhs + "< -> ", p.str())
|
slog(INFO, "Appending production>" + lhs + "< -> ", p.str())
|
||||||
grammar[lhs] = p
|
grammar[lhs] = p
|
||||||
|
|
||||||
dump_grammar(INFO, grammar)
|
|
||||||
return grammar
|
return grammar
|
||||||
|
|
||||||
def grammar_get_types(grammar):
|
def grammar_get_types(grammar):
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,12 @@ def __pad(token, total_size, right_align = False):
|
||||||
return space + token
|
return space + token
|
||||||
return token + space
|
return token + space
|
||||||
|
|
||||||
def slog(prio, *args): # export
|
def get_caller_pos(up = 1):
|
||||||
|
assert(up == 1) # TODO: implement this
|
||||||
|
caller_frame = inspect.currentframe().f_back.f_back
|
||||||
|
return (basename(caller_frame.f_code.co_filename), caller_frame.f_lineno)
|
||||||
|
|
||||||
|
def slog(prio, *args, **kwargs): # export
|
||||||
|
|
||||||
if prio > level:
|
if prio > level:
|
||||||
return
|
return
|
||||||
|
|
@ -86,10 +91,11 @@ def slog(prio, *args): # export
|
||||||
msg += short_prio_str[prio] + ' '
|
msg += short_prio_str[prio] + ' '
|
||||||
|
|
||||||
if f_position in flags:
|
if f_position in flags:
|
||||||
caller_frame = inspect.currentframe().f_back
|
if 'caller' in kwargs:
|
||||||
line = '[' + __pad(str(caller_frame.f_lineno), 4, True) + ']'
|
name, line = kwargs['caller']
|
||||||
file = __pad(basename(caller_frame.f_code.co_filename), 20)
|
else:
|
||||||
msg += file + line
|
name, line = get_caller_pos(1)
|
||||||
|
msg += __pad(name, 20) + '[' + __pad(str(line), 4, True) + ']'
|
||||||
|
|
||||||
if f_color in flags:
|
if f_color in flags:
|
||||||
color_on, color_off = prio_colors[prio]
|
color_on, color_off = prio_colors[prio]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue