python编写语法解析器_Python PLY解析器语法

所有人

我正在用python PLY编写一个非常简单的解析器。它主要是完成这项工作,但是对于许多输入行,我从yacc得到一个语法错误。下面是lexer和parser代码,为了更容易测试,稍作修改:tokens = ('VAR', 'NUMBER', 'CLOSE', 'JUNK')

# Tokens

t_VAR = r'%[mM]\['

t_CLOSE = r'\]'

t_JUNK = r'.'

# Ignored characters

t_ignore = " \t\r"

def t_NUMBER(t):

r'\d+'

try:

t.value = int(t.value)

except ValueError:

print("Integer value too large %d", t.value)

t.value = 0

return t

def t_newline(t):

r'\n+'

t.lexer.lineno += t.value.count("\n")

def t_error(t):

print("Illegal character '%s'" % t.value[0])

t.lexer.skip(1)

# Build the lexer

import ply.lex as lex

lex.lex()

# Parsing rules

def p_statement(p):

'''statement : field'''

try:

print p[1]

except IndexError:

pass

def p_trash(p):

'''statement : JUNK'''

pass

def p_field(p):

'''field : VAR NUMBER CLOSE'''

#print p[1], p[2], p[3]

p[0] = p[2]

def p_error(p):

print("Syntax error at '%s'" % repr(p)) #p.value)

import ply.yacc as yacc

yacc.yacc()

对于示例:yacc.parse('.set %m[702] $substr($currentlength,2,$currentpg)'),其输出为:

^{pr2}$

它应该只输出702。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值