MpjydZddlZddlZddlZddlZddlmZmZm Z dZ ee ddZ dZ e d Gd d eZ d ZddZddZdZedk(reZeej*dk(r-ej-ej.ej0dej3Zeeejej8ej:ej<yy)z!Converts Nearley grammars to LarkN)Lark Transformerv_argsa start: (ruledef|directive)+ directive: "@" NAME (STRING|NAME) | "@" JS -> js_code ruledef: NAME "->" expansions | NAME REGEXP "->" expansions -> macro expansions: expansion ("|" expansion)* expansion: expr+ js ?expr: item (":" /[+*?]/)? ?item: rule|string|regexp|null | "(" expansions ")" rule: NAME string: STRING regexp: REGEXP null: "null" JS: /{%.*?%}/s js: JS? NAME: /[a-zA-Z_$]\w*/ COMMENT: /#[^\n]*/ REGEXP: /\[.*?\]/ STRING: _STRING "i"? %import common.ESCAPED_STRING -> _STRING %import common.WS %ignore WS %ignore COMMENT earleybasic)parserlexercrdddj||}d|jddjzS)N _ws_maybe_ws)___n_$ __DOLLAR__)getreplacelower)names `/mnt/ssd/data/Dropbox/adrian/scripts/msg_venv/lib/python3.12/site-packages/lark/tools/nearley.py _get_rulenamer1s8E * . .tT :D $,,sL1779 99T)inlinecTeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zy ) NearleyToLarkc<d|_i|_i|_i|_y)Nr)_count extra_rulesextra_rules_rev alias_js_codeselfs r__init__zNearleyToLark.__init__7s! !rcld|jz}|xjdz c_||j|<|S)Nzalias_%d)rr )r"coders r _new_functionzNearleyToLark._new_function=s3DKK' q #'4  rc||jvr|j|Sdt|jz}||jvsJ||j|<||j|<|S)Nzxrule_%d)rlenr)r"rulers r _extra_rulezNearleyToLark._extra_ruleDso 4'' '''- -C 0 0114+++++!%%)T" rct|SNr)r"rs rr*zNearleyToLark.ruleNs T""rc$dt|d|S)N!z: r.)r"rexpss rruledefzNearleyToLark.ruledefQs)$/66rc4d|d|}|j|S)N()r+)r"itemopr*s rexprzNearleyToLark.exprTs$%%rc d|zS)Nz/%s/)r"rs rregexpzNearleyToLark.regexpXs zrcy)Nr;r!s rnullzNearleyToLark.null[src$|j|Sr-r6)r"ss rstringzNearleyToLark.string^s""rc|dd|d}}|jr(|j\}|dd}d|j|z}nd}dj||zS)Nz-> r? )childrenr'join)r"xjsjs_codealiass r expansionzNearleyToLark.expansionas_#2"2 ;;{{IGamGD..w77EExx{U""rc*ddj|zS)Nz%sz |)rJ)r"rKs r expansionszNearleyToLark.expansionsksy~~a())rc8djtd|SN )rJfilter)r"ruless rstartzNearleyToLark.startnsyye,--rN)__name__ __module__ __qualname__r#r'r+r*r2r9r=r@rCrOrQrWr;rrrr5s> #7&##*.rrc Jg}tj|}|jD]o}|jdk(r|j\} } | dvr| dk(r|n|} tj j | | dd} | |vsW|j| tj| d5} | j}ddd|t|||tj jtj j| |z }J| |jdk(r&|j\}|d d }|j|"|jd k(r3|jd k(r"|j|j|dt!d |z|S#1swYxYw)N directive)builtinincluder]r%rEutf8encodingrMrFrGmacror2zUnknown statement: %s)nearley_grammar_parserparserIdataospathrJaddcodecsopenread_nearley_to_larkabspathdirnameappend transform Exception)g builtin_pathn2lrM folder_pathincludes rule_defstree statementr\argfolderrgftextr&s rrlrlqsI ! ' ' *D]]A >>[ (&//NIs22)2i)?[ww||FC"I6x'LL&TF;(q vvx(!1$ c7TVT[T[TcTcdfdkdkdsdstxdyTz}E"FFI'i'u ^^y (&&FD":D NN4 ^^w &  ^^y (   S]]95 63i?@ @-A0 !((s #FF" c  ddl}g d fd }dg}t}t|||||t} dj | } | ddj d|j j Dzz } |d||dt| z||jj D]\} } |j| d| d |r'||jdj |n&||jdj ||d |jD]} |d | d | d |d||d|z|d|ddj S)NrcN|rj|jdyrS)ro)rK emit_codes remitz-create_code_for_nearley_grammar..emits"   Q rzfunction id(x) {return x[0];}rTc3&K|] }d|z yw)z!%s: %sNr;).0r7s r z2create_code_for_nearley_grammar..sR$Y-Rsz"from lark import Lark, Transformerz grammar = z = (z);z$class TransformNearley(Transformer):z z = var.get('z').to_python()z8 __default__ = lambda self, n, c, m: c if c else Nonez>parser = Lark(grammar, start="n_%s", maybe_placeholders=False)zdef parse(text):z; return TransformNearley().transform(parser.parse(text))r?r-) js2pyrrlsetrJritemsreprr ro translate_js6 translate_js)rrrWrsrues6rrrMrtrwlark_grNr&rs @rcreate_code_for_nearley_grammarrsnI //G /C L#w SUSI YYy !F d499R#//:O:O:QRRRRF -.FV $%F((..05 tud345  U 7!3 45 U   ' 2 34 /0""D UE BCD CDF IE QR  FG 779 rc Jtj|d5}|j}dddt|tj j |dtj jtj j||S#1swYqxYw)Nr_r`r])r) rirjrkrrfrgrJrmrn)fnrW nearley_librr|grammars rmainrs R& )Q&&( *7E277<< U^;_acahahapapqsqxqxrArABDrEbFLO PPs BB"ctjd}|jdd|jdd|jdd |jd d d |S)NzSReads a Nearley grammar (with js functions), and outputs an equivalent lark parser.) descriptionnearley_grammarz/Path to the file containing the nearley grammar)help start_rulez5Rule within the nearley grammar to make the base rulerzHPath to root directory of nearley codebase (used for including builtins)z--es6zEnable experimental ES6 support store_true)raction)argparseArgumentParser add_argument)rs rget_arg_parserrsr  $ $2GHF )0ab  +bc  ,vw &GP\] Mr__main__r%)rrWrr)F)__doc__os.pathrfsysrirlarkrrrrrcrrrlrrrrXrr)argv print_helpstderrexit parse_argsargsprintrrrr;rrrs# +*"HohgN:t9.K9.9.v>%NP  z  F 388}#**%    D $$&&doo4K[K[aeaiai jk r