我正在读一个简单的计算器语言解释器。在这里发布整个代码是没有意义的。就我所知,这部分是相关的。在下面的函数中,a
'SyntaxError'
当
len(tokens)
大于0。这对我来说没有意义,因为代币应该有一定的长度。第二个函数是tokenizer函数,它接受一个输入表达式并生成一个tokens列表。从这个例子可以看出,长度不是零。下面是一个小词汇表-
def calc_parse(line):
"""Parse a line of calculator input and return an expression tree."""
tokens = tokenize(line)
expression_tree = analyze(tokens)
if len(tokens) > 0: #why would length of tokens be 0?
raise SyntaxError('Extra token(s): ' + ' '.join(tokens))
return expression_tree
def tokenize(line):
"""Convert a string into a list of tokens."""
spaced = line.replace('(',' ( ').replace(')',' ) ').replace(',', ' , ')
return spaced.split()
tokenize('add(2, mul(4, 6))')
#['add', '(', '2', ',', 'mul', '(', '4', ',', '6', ')', ')']
len (tokenize('add(2, mul(4, 6))'))
#11
-
功能
tokenizer
-词法分析器
-
功能
analyze
-句法分析器
其中-
首先,词法分析器将输入字符串划分为令牌,
它们是语言的最小语法单位,如名称
和符号。其次,语法分析器构造一个表达式
这个标记序列的树。