我为我的基本问题道歉但是,我真的在这里苦苦挣扎。我需要做一个递归下降解析器。我正在使用Python并使用PLY。我的语法如下:
<列表> →(< sequence>)| ()
&LT; <序列> →&lt;听众&gt; ,&lt; <序列> | &LT;听众&gt;
&LT;听众&gt; →&lt;列表&gt; | NUMBER
这看起来像这样吗?我离开了吗?最终目标是将列表读入数据结构,然后将其打印出来。
def p_list(p) 'list : "("sequence")" | "("")"' def p_sequence(p) 'sequence : list_el","sequence | list_el' def p_list_el(p) 'list_el : list | NUMBER'
如果有人想知道完整的解决方案是什么,我会很快发布。
答案 0 :(得分:4)
我就是这样做的:
tokens = ("LBRACKET", "RBRACKET",
"INTEGER", "FLOAT", "COMMA") # So we can add other tokens
t_LBRACKET = r'\('
t_RBRACKET = r'\)'
t_INTEGER = r'\d+'
t_FLOAT = r'\d+\.\d+'
t_COMMA = r','
def p_list(p):
"""list : LBRACKET sequence RBRACKET
| LBRACKET RBRACKET"""
if len(p) == 4:
p[0] = p[2]
else:
p[0] = None
def p_number(p):
"""number : INTEGER
| FLOAT"""
p[0] = p[1]
def p_sequence(p):
"""sequence : list_el COMMA sequence
| list_el"""
if len(p) == 4:
p[0] = p[1] + p[3]
else:
p[0] = p[1]
def p_list_el(p):
"""list_el : number
| list"""
p[0] = p[1]
编辑:
关于额外令牌的快速解释:脚本中的所有内容最终应归结为您定义的令牌或角色(因此添加是合法的)。通过将它们全部指定为标记,它更易于阅读和使用。