好了,这是一种奇怪的问题,因为我在这里工作,我希望它的方式。 我在做什么是写一个演算表达式解析器。 因此,一个表达式可以是以下四种情况之一:
- 变量
- 不变
- (表达式表达)
- (拉姆达variable.expression)
现在,你可以看到,最后两个词语具有在其中表达。 我试图做的是确定整体表现,所以我可以报告它是哪种类型。 因此,例如,表达式((拉姆达X。(F1 X))×100)是整体的组合。 我的想法是从柔性返回END令牌,当它到达文件的末尾。 我的代码如下所示:
overallexpr: combo END { printf(" The overall expression is a combination\n"); } |
constant END { printf(" The overall expression is a constant\n"); } |
VARIABLE END { printf(" The overall expression is a variable\n"); } |
l_expr END { printf(" The overall expression is a lambda expression\n"); }
;
expr: combo | constant | VARIABLE | l_expr
;
combo: LPARENS expr expr RPARENS
;
constant: FUNCTION | NUMBER
;
l_expr: LPARENS LAMBDA VARIABLE DOT expr RPARENS
;
如果我把END令牌之后像组合END,而不是只组合overallexpr四种可能性,这是行不通的。 但最终的令牌解析器好评。 如果我打印的每个令牌,因为它是读取(与变量,函数和数值),它看起来像这样
LPARENS LPARENS LAMBDA VARIABLE x DOT LPARENS FUNCTION f1 VARIABLE x RPARENS RPARENS NUMBER 100 RPARENS END Sorry, Charlie
这可能是很难说,但这应该工作。 该组合与RPARENS结束后它有一个END令牌的权利。 不过,这并不评估作为整体表达。 但是,如果我拿出END令牌,似乎每一次工作。 我总是得到打印的总体信息,即使overallexpr和expr的作品是完全一样的。 输出是相同的,除了它的最后一个说“整体表达式是一个组合的” END令牌之前。 所以我的问题是为什么呢? 难道野牛永远只是尝试早期的作品第一次? 而为什么会没有工作进行到底,但不呢? 尤其是,因为你可以看到END令牌右后说,这是一个组合。 我只是想获得更好的理解野牛是如何工作的。