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();