from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() Any = LiteralParser('^((?!/\*|\*/|\n)[\s\S])*$', name='Any') multilineComment = AstParser([ LiteralParser.Eliteral('/*', name='\'/*\''), SeqParser([ SeqParser([Ref('Any')], [Ref('NEWLINE')], [Ref('multilineComment')], atleast=1, atmost=1) ]), LiteralParser.Eliteral('*/', name='\'*/\'') ], name='multilineComment') Comment = LiteralParser('//[^\n]*', name='Comment') String = LiteralParser('[a-z]*"[\w|\W]*"', name='String') numberLiteral = LiteralParser('0[XxOoBb][\da-fA-F]+', name='numberLiteral') Decimal = LiteralParser('\d+(?:\.\d+|)(?:E\-{0,1}\d+|)', name='Decimal') Constant = LiteralParser('null|false|true', name='Constant') NEWLINE = LiteralParser('\n', name='NEWLINE') EOL = LiteralParser(';', name='EOL') I = AstParser([Ref('NEWLINE')], [Ref('Comment')], [Ref('multilineComment')], name='I') simpleName = LiteralParser('[a-zA-Z_][a-z0-9A-Z_]*', name='simpleName') Identifier = AstParser([Ref('simpleName')], [ LiteralParser.Eliteral('`', name='\'`\''), Ref('simpleName'), LiteralParser.Eliteral('`', name='\'`\'') ],
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() Stmt = AstParser([ SeqParser([ SeqParser([Ref('NEWLINE')]), SeqParser([Ref('Equals')]), SeqParser([Ref('NEWLINE')]) ]) ], name='Stmt') Expr = AstParser([ Ref('Or'), SeqParser([LiteralParser.Eliteral('|', name='\'|\''), Ref('Or')]) ], name='Expr') Or = AstParser([SeqParser([Ref('AtomExpr')], atleast=1)], name='Or') AtomExpr = AstParser( [Ref('Atom'), SeqParser([Ref('Trailer')], atmost=1)], name='AtomExpr') Atom = AstParser([Ref('Str')], [Ref('Name')], [ LiteralParser.Eliteral('[', name='\'[\''), Ref('Expr'), LiteralParser.Eliteral(']', name='\']\'') ], [ LiteralParser.Eliteral('(', name='\'(\''), Ref('Expr'), LiteralParser.Eliteral(')', name='\')\'') ],
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() Test = AstParser([Ref('Lambdef')],[Ref('OrTest'),SeqParser([LiteralParser('if(?!\S)', name = '\'if(?!\S)\''),Ref('OrTest'),LiteralParser('else(?!\S)', name = '\'else(?!\S)\''),Ref('Test')], atmost = 1)], name = 'Test') Lambdef = AstParser([LiteralParser('lambda(?!\S)', name = '\'lambda(?!\S)\''),Ref('NameList'),LiteralParser.Eliteral(':', name = '\':\''),Ref('Test')], name = 'Lambdef') OrTest = AstParser([Ref('AndTest'),SeqParser([Ref('Or'),Ref('AndTest')])], name = 'OrTest') AndTest = AstParser([Ref('NotTest'),SeqParser([Ref('And'),Ref('NotTest')])], name = 'AndTest') NotTest = AstParser([Ref('Arith')],[Ref('Not'),Ref('NotTest')], name = 'NotTest') Arith = AstParser([Ref('Term'),SeqParser([SeqParser([LiteralParser.Eliteral('+', name = '\'+\'')],[LiteralParser.Eliteral('-', name = '\'-\'')], atleast = 1, atmost = 1),Ref('Term')])], name = 'Arith') Term = AstParser([Ref('Factor'),SeqParser([SeqParser([LiteralParser.Eliteral('*', name = '\'*\'')],[LiteralParser.Eliteral('/', name = '\'/\'')],[LiteralParser.Eliteral('%', name = '\'%\'')], atleast = 1, atmost = 1),Ref('Factor')])], name = 'Term') Factor = AstParser([Ref('AtomExpr')],[SeqParser([LiteralParser.Eliteral('+', name = '\'+\'')],[LiteralParser.Eliteral('-', name = '\'-\'')], atleast = 1, atmost = 1),Ref('Factor')], name = 'Factor') Not = LiteralParser('not(?!\S)', name = 'Not') Or = LiteralParser('or(?!\S)', name = 'Or') And = LiteralParser('and(?!\S)', name = 'And') Atom = AstParser([Ref('Number')],[Ref('Const')],[Ref('Name')],[LiteralParser.Eliteral('(', name = '\'(\''),SeqParser([Ref('ListComp')],[Ref('TestList')], atleast = 1, atmost = 1),LiteralParser.Eliteral(')', name = '\')\'')],[LiteralParser.Eliteral('[', name = '\'[\''),SeqParser([Ref('ListComp')],[Ref('TestList')], atleast = 1, atmost = 1),LiteralParser.Eliteral(']', name = '\']\'')], name = 'Atom') AtomExpr = AstParser([Ref('Atom'),SeqParser([SeqParser([LiteralParser.Eliteral('[', name = '\'[\''),Ref('TestList'),LiteralParser.Eliteral(']', name = '\']\'')],[LiteralParser.Eliteral('(', name = '\'(\''),Ref('TestList'),LiteralParser.Eliteral(')', name = '\')\'')], atleast = 1, atmost = 1)])], name = 'AtomExpr') TestList = AstParser([Ref('Test'),SeqParser([LiteralParser.Eliteral(',', name = '\',\''),Ref('TestList')], atmost = 1)], name = 'TestList') NameList = AstParser([Ref('Name'),SeqParser([LiteralParser.Eliteral(',', name = '\',\''),Ref('Name')])], name = 'NameList') TestList = AstParser([Ref('Test'),SeqParser([LiteralParser.Eliteral(',', name = '\',\''),Ref('Test')])], name = 'TestList') ListComp = AstParser([Ref('Test'),SeqParser([LiteralParser('for(?!\S)', name = '\'for(?!\S)\''),Ref('NameList'),LiteralParser('in(?!\S)', name = '\'in(?!\S)\''),Ref('Test')], atmost = 1)], name = 'ListComp') Number = LiteralParser('\d+|\d*\.\d+', name = 'Number') Const = LiteralParser('True(?!\S)|False(?!\S)|None(?!\S)', name = 'Const') Name = LiteralParser('[a-zA-Z_][a-zA-Z0-9]*', name = 'Name') NEWLINE = LiteralParser.Eliteral('\n', name = 'NEWLINE') Test.compile(namespace, recurSearcher) Lambdef.compile(namespace, recurSearcher) OrTest.compile(namespace, recurSearcher) AndTest.compile(namespace, recurSearcher)
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() NEWLINE = LiteralParser('\n', name='NEWLINE') true = AstParser([ LiteralParser.Eliteral('t', name='\'t\''), LiteralParser.Eliteral('r', name='\'r\''), LiteralParser.Eliteral('u', name='\'u\''), LiteralParser.Eliteral('e', name='\'e\'') ], name='true') false = AstParser([ LiteralParser.Eliteral('f', name='\'f\''), LiteralParser.Eliteral('a', name='\'a\''), LiteralParser.Eliteral('l', name='\'l\''), LiteralParser.Eliteral('s', name='\'s\''), LiteralParser.Eliteral('e', name='\'e\'') ], name='false') null = AstParser([ LiteralParser.Eliteral('n', name='\'n\''), LiteralParser.Eliteral('u', name='\'u\''), LiteralParser.Eliteral('l', name='\'l\''), LiteralParser.Eliteral('l', name='\'l\'') ], name='null') Number = AstParser([ SeqParser([LiteralParser('\d', name='\'\d\'')], atleast=1), SeqParser([
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() Token = AstParser([LiteralParser('\n', name = '\'\n\'')],[LiteralParser('\<[a-zA-Z_0-9\n]*?\>', name = '\'\<[a-zA-Z_0-9\n]*?\>\'')],[LiteralParser('\</[a-zA-Z_0-9\n]*?\>', name = '\'\</[a-zA-Z_0-9\n]*?\>\'')],[LiteralParser('[^\n]*?(?=\</[a-zA-Z_0-9\n]*?\>|\<[a-zA-Z_0-9\n]*?\>|\n)', name = '\'[^\n]*?(?=\</[a-zA-Z_0-9\n]*?\>|\<[a-zA-Z_0-9\n]*?\>|\n)\'')], name = 'Token') Space = LiteralParser('\s', name = 'Space') TagHead = LiteralParser('\<[a-zA-Z_0-9\n]*?\>', name = 'TagHead') TagEnd = LiteralParser('\</[a-zA-Z_0-9\n]*?\>', name = 'TagEnd') Cell = LiteralParser('(?!\<[a-zA-Z_0-9\n]*?\>|\</[a-zA-Z_0-9\n]*?\>)[^\n]*', name = 'Cell') Block = AstParser([Ref('TagHead'),SeqParser([SeqParser([Ref('Space')],[Ref('Cell')],[Ref('Block')], atleast = 1, atmost = 1)]),Ref('TagEnd')], name = 'Block', toIgnore={'Space'}) Module = AstParser([SeqParser([SeqParser([Ref('Space')]),SeqParser([Ref('Block')]),SeqParser([Ref('Space')])])], name = 'Module', toIgnore={'Space'}) Token.compile(namespace, recurSearcher) Block.compile(namespace, recurSearcher) Module.compile(namespace, recurSearcher)
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() 字 = LiteralParser('[^\;\\[\]\(\),。由以有所列于作为]', name='字') 字2 = LiteralParser('[^\]]', name='字2') 分隔 = LiteralParser('\n', name='分隔') 由义言物 = AstParser( [LiteralParser.Eliteral('由', name='\'由\''), Ref('概念'), Ref('具象')], name='由义言物') 以义行物 = AstParser( [LiteralParser.Eliteral('以', name='\'以\''), Ref('具象'), Ref('具象')], name='以义行物') 左标 = LiteralParser.Eliteral('[', name='左标') 右标 = LiteralParser.Eliteral(']', name='右标') 概念 = AstParser([Ref('字')], [Ref('左标'), SeqParser([Ref('字2')]), Ref('右标')], name='概念') 具象 = AstParser([Ref('以义行物')], [Ref('由义言物')], [Ref('谓词倒装')], name='具象') 作为 = AstParser([ LiteralParser.Eliteral('作', name='\'作\''), LiteralParser.Eliteral('为', name='\'为\'') ], name='作为') 谓词倒装 = AstParser(
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() Stmt = AstParser([SeqParser([SeqParser([Ref('NEWLINE')]),SeqParser([Ref('Expr')]),SeqParser([Ref('NEWLINE')])])], name = 'Stmt') Expr = AstParser([Ref('BinOp')],[Ref('Factor')], name = 'Expr') BinOp = AstParser([Ref('Factor'),SeqParser([Ref('Op'),Ref('Factor')])], name = 'BinOp') Factor = AstParser([SeqParser([Ref('Op')]),Ref('AtomExpr')], name = 'Factor') AtomExpr = AstParser([SeqParser([Ref('Closure')],[Ref('Atom')], atleast = 1, atmost = 1),SeqParser([SeqParser([LiteralParser.Eliteral('[', name = '\'[\''),SeqParser([Ref('Expr')]),LiteralParser.Eliteral(']', name = '\']\'')],[LiteralParser.Eliteral('(', name = '\'(\''),SeqParser([Ref('Expr')]),LiteralParser.Eliteral(')', name = '\')\'')],[LiteralParser.Eliteral('.', name = '\'.\''),Ref('Name')], atleast = 1, atmost = 1)])], name = 'AtomExpr') Atom = AstParser([Ref('Const')],[Ref('Str')],[Ref('Name')],[Ref('Number')],[LiteralParser.Eliteral('[', name = '\'[\''),SeqParser([Ref('Expr')]),LiteralParser.Eliteral(']', name = '\']\'')],[LiteralParser.Eliteral('(', name = '\'(\''),SeqParser([Ref('Expr'),SeqParser([LiteralParser.Eliteral(',', name = '\',\''),SeqParser([Ref('Expr'),SeqParser([LiteralParser.Eliteral(',', name = '\',\''),Ref('Expr')])], atmost = 1)], atmost = 1)], atmost = 1),LiteralParser.Eliteral(')', name = '\')\'')], name = 'Atom') Closure = AstParser([LiteralParser.Eliteral('{', name = '\'{\''),SeqParser([Ref('Expr'),SeqParser([Ref('NEWLINE')])]),LiteralParser.Eliteral('}', name = '\'}\'')],[LiteralParser('def(?!\S)', name = '\'def(?!\S)\''),SeqParser([Ref('Name')], atmost = 1),LiteralParser.Eliteral('(', name = '\'(\''),Ref('tpdef'),LiteralParser.Eliteral(')', name = '\')\''),Ref('Closure')], name = 'Closure') tpdef = AstParser([SeqParser([Ref('Name')])], name = 'tpdef') Op = LiteralParser('\/\/|\/|\|\||\||\>\>|\<\<|\>\=|\<\=|\<\-|\>|\<|\=\>|\-\>|\?|\-\-|\+\+|\*\*|\+|\-|\*|\=\=|\=|\~|\@|\$|\%|\^|\&|\!|\:\:|\:', name = 'Op') Number = LiteralParser('\d+|\d*\.\d+', name = 'Number') Const = LiteralParser('True(?!\S)|False(?!\S)|None(?!\S)', name = 'Const') Str = LiteralParser('[a-z]{0,1}"[\w|\W]*"', name = 'Str') Name = LiteralParser('[a-zA-Z_][a-zA-Z0-9]*', name = 'Name') NEWLINE = LiteralParser('\n', name = 'NEWLINE') Stmt.compile(namespace, recurSearcher) Expr.compile(namespace, recurSearcher) BinOp.compile(namespace, recurSearcher) Factor.compile(namespace, recurSearcher) AtomExpr.compile(namespace, recurSearcher) Atom.compile(namespace, recurSearcher) Closure.compile(namespace, recurSearcher) tpdef.compile(namespace, recurSearcher)
from Misakawa.ObjectRegex.Node import Ref, AstParser, SeqParser, LiteralParser, MetaInfo from etoken import token import re namespace = globals() recurSearcher = set() Expr = AstParser([Ref('Atom')], [Ref('Quote')], [ LiteralParser.Eliteral('(', name='\'(\''), SeqParser([ SeqParser([Ref('NEWLINE')]), SeqParser([Ref('Expr')]), SeqParser([Ref('NEWLINE')]) ]), LiteralParser.Eliteral(')', name='\')\'') ], name='Expr', toIgnore={'NEWLINE'}) Quote = AstParser([LiteralParser.Eliteral('`', name='\'`\''), Ref('Expr')], name='Quote') Atom = LiteralParser('[^\(\)\s\`]+', name='Atom') NEWLINE = LiteralParser('\n', name='NEWLINE') Stmt = AstParser([ SeqParser([ SeqParser([Ref('NEWLINE')]), SeqParser([Ref('Expr')]), SeqParser([Ref('NEWLINE')]) ]) ], name='Stmt', toIgnore={'NEWLINE'}) Expr.compile(namespace, recurSearcher)