给定以下输入:
int x = y;
和
int x = y();
LALR(1)语法有什么方法可以避免移位/减少冲突吗?移位/减少冲突是决定在CCD_ 1处减少或继续到CCD_。
(这是假设变量名可以是任何一组字母数字字符,函数调用是括号后面的任何一组数字字符。)
除非标识符后面可以紧跟(
而不是函数调用,否则这不是减少移位冲突。通常情况并非如此,尽管在C派生语言中,存在区分强制转换表达式(type)(value)
和带括号的函数调用(function)(argument)
的问题。
如果你的语法没有表现出那种特殊的C wierdness,那么LALR(1)语法可以根据的标记lookahead在移位和约简之间做出决定:如果lookahead标记是(
,那么它会移位标识符;否则,它可以减少。