标签: pyparsing

扩展matplotlib mathtext解析器

对于我使用matplotlib的大多数交互式绘图,我不想使用数学的乳胶处理.(主要是因为它太慢了,但也因为它经常使用IMHO只是有点太模糊.)但是我在编写乳胶时也一直使用我自己的宏.仅作为一个例子,而不是做$M_{\odot}$我定义的事情$\Msun$.因此,当使用matplotlib时,我倾向于自动编写后者,然后得到错误并且必须修复它.这只是一个特别简单的例子,我希望能够灵活地在我的论文和我的情节中重新定义一个宏,而不需要太多的工作.

那么,是否有任何合理的方法可以扩展mathtext解析器以理解类似的东西$\Msun$?或者我是否必须破解mathtext.py或其他什么?

(我的后备是定义Msun为字符串,r'M_{\odot}'所以我可以写出类似的东西r'$M = 10\,' + Msun + '$',但这是令人不愉快的,当然对我来说不会更自动.)

latex matplotlib pyparsing

9
推荐指数
1
解决办法
748
查看次数

pyparsing捕获具有给定标题的任意文本组作为嵌套列表

我有一个类似于的文本文件;

节标题1:
有些单词可以是任何
更多单词可以是任何东西
等等lala

其他一些标题:
像以前一样可能是任何
嘿,这不是很有趣

我正在尝试用pyparser构造一个语法,当要求将解析结果作为列表时,这将导致以下列表结构; (IE;在遍历parsed.asList()元素时应该打印以下内容)

['节目标题1:',[['某些单词可以是任何内容'],['更多单词可以是任何内容'],['etc etc lala']]]
['其他标题:',[[ '就像之前可能是任何事情',['嘿,这不是很有趣']]]

标题名称都是事先已知的,并且可能会出现或不出现各个标题.如果它们确实出现,则始终至少有一行内容.

我遇到的问题是,我无法解析解析器以识别'section header 1:'ands和'some other header:'的开始位置.我最终看到了一个parsed.asList();

['节目标题1:',[[''某些单词可以是任何'],['更多单词可以是任何东西'],['etc etc lala'],['其他标题'],[' '就像之前可能是任何事情',['嘿,这不是很有趣']]]

(IE:节标题1:正确看到,但是跟随它的每一个都被添加到节标题1中,包括更多标题行等等.)

我尝试了各种各样的东西,以各种方式使用leaveWhitespace()和LineEnd(),但我无法弄清楚.

我正在讨厌的基本解析器是(人为的例子 - 实际上这是一个类定义等等.).

header_1_line=Literal('section header 1:')

text_line=Group(OneOrMore(Word(printables)))

header_1_block=Group(header_1_line+Group(OneOrMore(text_line)))

header_2_line=Literal('some other header:')

header_2_block=Group(header_2_line+Group(OneOrMore(text_line)))

overall_structure=ZeroOrMore(header_1_block|header_2_block)
Run Code Online (Sandbox Code Playgroud)

正在被召唤

parsed=overall_structure.parseFile()
Run Code Online (Sandbox Code Playgroud)

干杯,马特.

python pyparsing

9
推荐指数
1
解决办法
2540
查看次数

使用pyparsing解析嵌套函数调用

我正在尝试使用pyparsing以下形式解析函数调用:

f(x, y)
Run Code Online (Sandbox Code Playgroud)

这很简单.但由于它是一个递归下降的解析器,它也应该很容易解析:

f(g(x), y)
Run Code Online (Sandbox Code Playgroud)

这是我无法得到的.这是一个煮沸的例子:

from pyparsing import Forward, Word, alphas, alphanums, nums, ZeroOrMore, Literal

lparen = Literal("(")
rparen = Literal(")")

identifier = Word(alphas, alphanums + "_")
integer  = Word( nums )

functor = identifier

# allow expression to be used recursively
expression = Forward()

arg = identifier | integer | expression
args = arg + ZeroOrMore("," + arg)

expression << functor + lparen + args + rparen

print expression.parseString("f(x, y)")
print expression.parseString("f(g(x), y)")
Run Code Online (Sandbox Code Playgroud)

这是输出:

['f', …
Run Code Online (Sandbox Code Playgroud)

python parsing pyparsing

9
推荐指数
2
解决办法
2304
查看次数

将BNF语法转换为pyparsing

如何使用正则表达式(或pyparsing更好?)来描述下面提供的脚本语言(Backus-Naur Form):

<root>   :=     <tree> | <leaves>
<tree>   :=     <group> [* <group>] 
<group>  :=     "{" <leaves> "}" | <leaf>;
<leaves> :=     {<leaf>;} leaf
<leaf>   :=     <name> = <expression>{;}

<name>          := <string_without_spaces_and_tabs>
<expression>    := <string_without_spaces_and_tabs>
Run Code Online (Sandbox Code Playgroud)

脚本示例:

{
 stage = 3;
 some.param1 = [10, 20];
} *
{
 stage = 4;
 param3 = [100,150,200,250,300]
} *
 endparam = [0, 1]
Run Code Online (Sandbox Code Playgroud)

我使用python re.compile并希望将所有内容分组,如下所示:

[ [ 'stage',       '3'],
  [ 'some.param1', '[10, 20]'] ],

[ ['stage',  '4'],
  ['param3', '[100,150,200,250,300]'] ],

[ ['endparam', '[0, 1]'] ] …
Run Code Online (Sandbox Code Playgroud)

python regex bnf pyparsing

9
推荐指数
1
解决办法
1840
查看次数

使用PyParsing解析Snort日志

使用pyparsing模块解析Snort日志时遇到问题.

问题在于分离Snort日志(它有多行条目,用空行分隔)和获取pyparsing来解析每个条目作为整个块,而不是逐行读取并期望语法适用于每一行(显然, 它不是.)

我已经尝试将每个块转换为临时字符串,剥离每个块内的换行符,但它拒绝正确处理.我可能完全走错了路,但我不这么认为(类似的形式适用于syslog类型的日志,但这些是单行条目,因此适合你的基本文件迭代器/行处理)

这是一个日志示例和我到目前为止的代码:

[**] [1:486:4] ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**]
[Classification: Misc activity] [Priority: 3] 
08/03-07:30:02.233350 172.143.241.86 -> 63.44.2.33
ICMP TTL:61 TOS:0xC0 ID:49461 IpLen:20 DgmLen:88
Type:3  Code:10  DESTINATION UNREACHABLE: ADMINISTRATIVELY PROHIBITED HOST FILTERED
** ORIGINAL DATAGRAM DUMP:
63.44.2.33:41235 -> 172.143.241.86:4949
TCP TTL:61 TOS:0x0 ID:36212 IpLen:20 DgmLen:60 DF
Seq: 0xF74E606
(32 more bytes of original packet)
** END OF DUMP

[**] ...more like this [**]
Run Code Online (Sandbox Code Playgroud)

更新的代码:

def snort_parse(logfile):
    header = Suppress("[**] [") + …
Run Code Online (Sandbox Code Playgroud)

python pyparsing snort

8
推荐指数
1
解决办法
5036
查看次数

pyparsing的例子

这是我第一次尝试使用pyparsing,我想问一下如何过滤这个样本行:

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812'''
Run Code Online (Sandbox Code Playgroud)

获得如下输出:1,52.125133215643,21.031048525561,116.898812

一般来说,我有理解pyparsing逻辑的问题,所以对这个例子的任何帮助将不胜感激.谢谢

python pyparsing

8
推荐指数
1
解决办法
6430
查看次数

pyparsing和换行符

我刚刚开始,pyparsing我遇到了换行问题.

我的语法是:

from pyparsing import *

newline = LineEnd () #Literal ('\n').leaveWhitespace ()
minus = Literal ('-')
plus = Literal ('+')
lparen = Literal ('(')
rparen = Literal (')')
ident = Word (alphas)
integer = Word (nums)

arith = Forward ()
parenthized = Group (lparen + arith + rparen)
atom = ident | integer | parenthized

factor = ZeroOrMore (minus | plus) + atom
arith << (ZeroOrMore (factor + (minus | plus) ) + factor)

statement = arith …
Run Code Online (Sandbox Code Playgroud)

python newline pyparsing

8
推荐指数
2
解决办法
2228
查看次数

pyparsing性能和内存使用情况

Pyparsing对于非常小的语法工作得很好,但随着语法的增长,性能下降并且通过屋顶使用内存.

我目前的gramar是:

newline = LineEnd ()
minus = Literal ('-')
plus = Literal ('+')
star = Literal ('*')
dash = Literal ('/')
dashdash = Literal ('//')
percent = Literal ('%')
starstar = Literal ('**')
lparen = Literal ('(')
rparen = Literal (')')
dot = Literal ('.')
comma = Literal (',')
eq = Literal ('=')
eqeq = Literal ('==')
lt = Literal ('<')
gt = Literal ('>')
le = Literal ('<=')
ge = Literal ('>=')
not_ = Keyword ('not')
and_ = …
Run Code Online (Sandbox Code Playgroud)

python performance pyparsing

8
推荐指数
1
解决办法
1155
查看次数

在pyparsing中嵌套结构的技巧

我正在努力用PyParsing解析嵌套结构.我已经搜索了许多PyParsing'嵌套'示例用法,但我没有看到如何解决我的问题.

这是我的内部结构:

texture_unit optionalName
{
    texture required_val
    prop_name1 prop_val1
    prop_name2 prop_val1
}
Run Code Online (Sandbox Code Playgroud)

这是我的外部结构的样子,但它可以包含零个或多个内部结构.

pass optionalName
{
    prop_name1 prop_val1
    prop_name2 prop_val1

    texture_unit optionalName
    {
        // edit 2: showing use of '.' character in value
        texture required_val.file.name optional_val // edit 1: forgot this line in initial post.

        // edit 2: showing potentially multiple values
        prop_name3 prop_val1 prop_val2
        prop_name4 prop_val1
    }
}
Run Code Online (Sandbox Code Playgroud)

我成功地解析了内部结构.这是我的代码.

prop_ = pp.Group(pp.Word(pp.alphanums+'_')+pp.Group(pp.OneOrMore(pp.Word(pp.alphanums+'_'+'.'))))
texture_props_ = pp.Group(pp.Literal('texture') + pp.Word(pp.alphanums+'_'+'.')) + pp.ZeroOrMore(prop_)
texture_ = pp.Forward()
texture_ << pp.Literal('texture_unit').suppress() …
Run Code Online (Sandbox Code Playgroud)

python nested pyparsing

8
推荐指数
1
解决办法
896
查看次数

使用pyparsing定义变量语法C#

如何在源C#代码中找到所有变量?
这是我的非工作语法,因为ZeroOrMore(VarDef4)不起作用

Protected = Literal("protected")  
Private = Literal("private")  
Public = Literal("public")  
Modification = Public^Private^Protected  

Static = Literal("static")  
Auto = Literal("Auto")   
MemoryType =(Static^Auto)  
Bool = Literal("bool"); Byte = Literal("byte"); Char = Literal("char"); Decimal = Literal("decimal"); Double = Literal("double"); Enum = Literal("enum")
Float = Literal("float"); Int = Literal("int"); Long = Literal ("long"); Sbyte = Literal("sbyte"); Short = Literal("short")
Struct = Literal("struct"); String = Literal("string"); Uint = Literal("uint"); Ulong = Literal("ulong"); Ushort = Literal("ushort")  

VariableType = (Bool)^(Byte)^(Char)^(Decimal)^(Double)^(Enum)^(Float)^(Int)^(Long)^(Sbyte)^(Short)^(Struct)^(String)^(Uint)^(Ulong)^(Ushort)    

Variable = Word(alphanums + '_' + …
Run Code Online (Sandbox Code Playgroud)

c# python pyparsing

8
推荐指数
1
解决办法
177
查看次数

标签 统计

pyparsing ×10

python ×9

bnf ×1

c# ×1

latex ×1

matplotlib ×1

nested ×1

newline ×1

parsing ×1

performance ×1

regex ×1

snort ×1