一个很酷的分析工具。它是pyparsing的扩展。人们可以用它来构建自己的编程语言。
pyparsing-ext的Python项目详细描述
简介[PyParsing]的扩展(https://github.com/PyParsing/PyParsing)。你可以很容易地建立自己的语言。:v:
关键字
----
*peg
*正则表达式
*语法分析器
*形式语法
*操作语义
混合表达
2。构建语言(参见示例)
需求
----
pyparsing
工具
content
==
classes::
tokens:
charsnot:powerful charsnotin
precedby:as followedby(移到pyparsing)
同时:
linenstart:
操作:
base action:base class of actions
bifixaction:action forbifix运算符,如<;x,y>;
…
函数::
``python
keyrange
ordrange
chrrange
cjk,用于匹配中日韩语
枚举项
tupleexpression元组,如python中的元组(1,),(1,2)…
带两个sep的delimitedmatrix分隔符列表(称之为二阶列表)
````
ch2=pp.Regex('\n+').leaveWhitespace())
p = M.parseString('a b\n c d')
print(p.asList())
s = '''
[1]hello, world
[2]hello, kitty
'''
print(enumeratedItems().parseString(s))
cjk = ordRange(0x4E00, 0x9FD5)
cjk.parseString('我爱你, I love you') # => ['我爱你']
cjk = ordRanges((0x4E00, 0x9FD5,0,256)
cjk.parseString(‘我爱你’’我爱你’’cjk.parseString(‘我爱你’’’我爱你’’cjk.parseString;[‘我爱你’]
>将pyparsing导入到pp
integer=pp.pyparsing=pp.pyparsing=pp.pyparsing=pp.pyparsing=pp.pyparsing.identifier
>arithopslist=[(“-”,1,pp.opassoc.opassoc.1,1,pp.opassoc.opassoc.opassoc.opassoc.right*/’,2页,pp.opassoc.left),
(pp.one of('+-’),2页,pp.opassoc.left)
def func(exp):
return pp.group('<;'+exp+pp.suppress(','+exp+'+exp+gt;')pp.group(''124;'+exp+''124;'+pp.group(';'+exp+'''+exp+exp+“));pp.group(iden+'('+pp.delimitedlist(exp)++')')))
baseexpbr/>baseexpr=inte整数;varname
exp=mixedexpression(baseexpr,func=func,
a=exp.parsestring('5*g(-3)-4,5>;+f(6)'+f(6)'
print(a)
a
a
[[[5,“*”,['g',“(',['124',['-',['-',['-',3],'[124;']],“,']]],“+”,“+”,['4,[<;'4,5,5,'>;'>;']],“+”,“+”,['f',['f','f','[5,是的')']]]
```
## build your own languages
run `example1.py` for a simple example
output:
```C
Example 1:
|-1| -> ('|', '|')(-(1))
Example 2:
parse source code:
x=|-1|; # absolute value
y=x*2+1;
if x == 1
{z=[3.3_]; # the floor value
}
print "z =", z;
结果:
z=3
请参阅变量字典:
{x':十进制('1'),'y':十进制('3'),'z':3}
````
以命令行模式解析文本文件“test.spy”或“test1.py”
`example2.smallpy.cmdline()`
关键字
----
*peg
*正则表达式
*语法分析器
*形式语法
*操作语义
混合表达
2。构建语言(参见示例)
需求
----
pyparsing
工具
content
==
classes::
tokens:
precedby:as followedby(移到pyparsing)
同时:
linenstart:
操作:
base action:base class of actions
bifixaction:action forbifix运算符,如<;x,y>;
…
函数::
``python
keyrange
ordrange
chrrange
cjk,用于匹配中日韩语
枚举项
tupleexpression元组,如python中的元组(1,),(1,2)…
带两个sep的delimitedmatrix分隔符列表(称之为二阶列表)
````
ch2=pp.Regex('\n+').leaveWhitespace())
p = M.parseString('a b\n c d')
print(p.asList())
s = '''
[1]hello, world
[2]hello, kitty
'''
print(enumeratedItems().parseString(s))
cjk = ordRange(0x4E00, 0x9FD5)
cjk.parseString('我爱你, I love you') # => ['我爱你']
cjk = ordRanges((0x4E00, 0x9FD5,0,256)
cjk.parseString(‘我爱你’’我爱你’’cjk.parseString(‘我爱你’’’我爱你’’cjk.parseString;[‘我爱你’]
>将pyparsing导入到pp
integer=pp.pyparsing=pp.pyparsing=pp.pyparsing=pp.pyparsing=pp.pyparsing.identifier
>arithopslist=[(“-”,1,pp.opassoc.opassoc.1,1,pp.opassoc.opassoc.opassoc.opassoc.right*/’,2页,pp.opassoc.left),
(pp.one of('+-’),2页,pp.opassoc.left)
def func(exp):
return pp.group('<;'+exp+pp.suppress(','+exp+'+exp+gt;')pp.group(''124;'+exp+''124;'+pp.group(';'+exp+'''+exp+exp+“));pp.group(iden+'('+pp.delimitedlist(exp)++')')))
baseexpbr/>baseexpr=inte整数;varname
exp=mixedexpression(baseexpr,func=func,
a=exp.parsestring('5*g(-3)-4,5>;+f(6)'+f(6)'
print(a)
a
a
[[[5,“*”,['g',“(',['124',['-',['-',['-',3],'[124;']],“,']]],“+”,“+”,['4,[<;'4,5,5,'>;'>;']],“+”,“+”,['f',['f','f','[5,是的')']]]
```
## build your own languages
run `example1.py` for a simple example
output:
```C
Example 1:
|-1| -> ('|', '|')(-(1))
Example 2:
parse source code:
x=|-1|; # absolute value
y=x*2+1;
if x == 1
{z=[3.3_]; # the floor value
}
print "z =", z;
结果:
z=3
请参阅变量字典:
{x':十进制('1'),'y':十进制('3'),'z':3}
````
以命令行模式解析文本文件“test.spy”或“test1.py”
`example2.smallpy.cmdline()`