Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 云雀:如何使文字出现在树中_Python_Parsing_Literals_Lark Parser - Fatal编程技术网

Python 云雀:如何使文字出现在树中

Python 云雀:如何使文字出现在树中,python,parsing,literals,lark-parser,Python,Parsing,Literals,Lark Parser,使用Python。 在我的语法中,我有这样一句话: ipv6_comp: [ipv6_hex (":" ipv6_hex)~0..5] "::" [ipv6_hex (":" ipv6_hex)~0..5] <class 'list'>: ['2001', 'db8', '85a3', '8a2e', '370', '7334'] 我的变压器有适当的功能 def ipv6_comp(self, args): 但是,args如下所示: ipv6_comp: [ipv6_hex (

使用Python。 在我的语法中,我有这样一句话:

ipv6_comp: [ipv6_hex (":" ipv6_hex)~0..5] "::" [ipv6_hex (":" ipv6_hex)~0..5]
<class 'list'>: ['2001', 'db8', '85a3', '8a2e', '370', '7334']
我的变压器有适当的功能

def ipv6_comp(self, args):
但是,
args
如下所示:

ipv6_comp: [ipv6_hex (":" ipv6_hex)~0..5] "::" [ipv6_hex (":" ipv6_hex)~0..5]
<class 'list'>: ['2001', 'db8', '85a3', '8a2e', '370', '7334']
我想我可以用它们自己的规则来掩盖文字,比如

colon: ":"
doublecolon: "::"
ipv6_comp: [ipv6_hex (colon ipv6_hex)~0..5] doublecolon [ipv6_hex (colon ipv6_hex)~0..5]
甚至可能更干净。然而,我使用的语法是半自动生成的,这将需要更多的人工


有没有办法让我的transformer函数
ipv6\u comp
args
参数中也包含文字?

有两种方法可以解决您的问题

  • 将ipv6_comp转换为终端。然后Lark将在单个regexp中匹配所有字符,并返回所有匹配的字符:
  • IPV6_COMP:[HEX(“:”HEX)~0..5]::“[HEX(“:”HEX)~0..5]
    
  • 为标点符号提供一个名称(您建议的名称,但作为终端)

    冒号:“

  • 使用
    运算符以在规则中包含标点符号(即:未命名符号)

  • !ipv6_-comp:[ipv6_-hex(“:”ipv6_-hex)~0..5]::“[ipv6_-hex(“:”ipv6_-hex)~0..5]
    

    我推荐第一种解决方案,因为解析速度更快,解析完成后,您可以使用专用库将IPv6地址解析为组件。

    有两种方法可以解决您的问题

  • 将ipv6_comp转换为终端。然后Lark将在单个regexp中匹配所有字符,并返回所有匹配的字符:
  • IPV6_COMP:[HEX(“:”HEX)~0..5]::“[HEX(“:”HEX)~0..5]
    
  • 为标点符号提供一个名称(您建议的名称,但作为终端)

    冒号:“

  • 使用
    运算符以在规则中包含标点符号(即:未命名符号)

  • !ipv6_-comp:[ipv6_-hex(“:”ipv6_-hex)~0..5]::“[ipv6_-hex(“:”ipv6_-hex)~0..5]
    
    我推荐第一种解决方案,因为解析速度更快,在解析完成后,您可以使用专用库将IPv6地址解析为组件