Parsing LALR(1)语法如何区分变量和函数调用?

Parsing LALR(1)语法如何区分变量和函数调用?,parsing,compiler-construction,grammar,lalr,shift-reduce-conflict,Parsing,Compiler Construction,Grammar,Lalr,Shift Reduce Conflict,考虑到以下输入: int x = y; 及 LALR(1)语法有没有办法避免移位/减少冲突?shift/reduce冲突决定在y减少或继续() (这是假设变量名可以是任何一组字母数字字符,函数调用可以是任何一组字母数字字符加括号。)这不是移位减少冲突,除非标识符后面可能紧跟着一个(不是函数调用。通常情况并非如此,尽管在C派生语言中,存在将强制转换表达式(类型)(值)与括号中的函数调用(函数)(参数)区分开来的问题 如果您的语法没有表现出这种特殊的C wierdness,那么LALR(1)语法可

考虑到以下输入:

int x = y;

LALR(1)语法有没有办法避免移位/减少冲突?shift/reduce冲突决定在
y
减少或继续


(这是假设变量名可以是任何一组字母数字字符,函数调用可以是任何一组字母数字字符加括号。)

这不是移位减少冲突,除非标识符后面可能紧跟着一个
不是函数调用。通常情况并非如此,尽管在C派生语言中,存在将强制转换表达式
(类型)(值)
与括号中的函数调用
(函数)(参数)
区分开来的问题


如果您的语法没有表现出这种特殊的C wierdness,那么LALR(1)语法可以根据(1)标记先行:如果先行标记是
,则它会移动标识符;否则,它会减少。

谢谢,我对1代表的含义有错误的印象。
int x = y();