Example #1
0
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='\'`\'')
],
Example #2
0
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='\')\'')
],
Example #3
0
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)
Example #4
0
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([
Example #5
0
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)
Example #6
0
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(
Example #7
0
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)
Example #8
0
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)