Nodes in the graph implement the interface TreeType{set of tree-nodes supported}
Examples of TreeType:
# Based on https://github.com/j2kun/tex-convert-delimiters/blob/master/convert-delimiters.py | |
# A response to https://jeremykun.com/2019/04/20/a-working-mathematicians-guide-to-parsing/ | |
import sys | |
from lark import Lark, Transformer | |
lark = Lark(r''' | |
tex: (mathmode_offset | mathmode_inline | TEXT)+ | |
mathmode_offset: OFFSETDOLLAR TEXT+ OFFSETDOLLAR | OFFSETOPEN TEXT+ OFFSETCLOSE |
<body> | |
<input id="x"> | |
<div id="concat_link">a</div> | |
<script> | |
add = "p=1T14183534162201601I&utm_campaign=FPVist&utm_content=3312" | |
link = "https://www.banggood.com/Anniversary-Special-Edition-Martian-215-215mm-Carbon-Fiber-FPV-Racing-Frame-Kit-136g-p-1180757.html?rmmds=search&cur_warehouse=CN" |
from casts import def_cast, cast | |
# Define cast from tuple to list | |
@def_cast(auto=True) | |
def cast_to(i: tuple, cls: list): | |
return cls(i) | |
... | |
class SortedList(list): |
import threading | |
from contextlib import contextmanager | |
class Context(threading.local): | |
def __init__(self): | |
self._ctx = [{}] | |
def __getattr__(self, name): | |
for scope in reversed(self._ctx): | |
if name in scope: |
function range(start, end) { | |
if (end === undefined) { | |
end = start; | |
start = 0; | |
} | |
res = [] | |
for (let i=start; i<end; i++) res.push(i); | |
return res | |
}; |
?start: (statement | _NL) * | |
?statement: simple_statement _NL | |
| print_statement _NL | |
?simple_statement: assign | expr | |
assign: NAME "=" sum | |
?expr: sum | |
print_statement: "print" expr |
def lex(self, text, dont_ignore=False): | |
"""Only lex (and postlex) the text, without parsing it. Only relevant when lexer='standard' | |
When dont_ignore=True, the lexer will return all tokens, even those marked for %ignore. | |
""" | |
if not hasattr(self, 'lexer') or dont_ignore: | |
lexer = self._build_lexer(dont_ignore) | |
else: | |
lexer = self.lexer | |
lexer_thread = LexerThread(lexer, text) |
let tree = parser.parse('{"c": ["a", "b",2]}') | |
// Object-based transformer | |
let OT = lark.Transformer.fromObj({ | |
array: (args) => args, | |
pair: (args) => args, | |
number: ([x]) => parseInt(x.value), | |
string: ([x]) => x.value.slice(1, -1), | |
object: (entries) => Object.fromEntries(entries) | |
}) |
from lark import Lark | |
grammar = r""" | |
start: _NL* section+ | |
section: HEADER content* | |
HEADER: "--- SECTION ---" _NL | |
content: number_list |