Parsing 无线路终端的调车场-如何根据操作员的熟练程度停止?
这是一个关于扩展非常基本的调车场表达式解析器的问题 我有一种语言,它的表达式由数字文字、字母数字变量名、运算符“+”、“*”和“-”以及一些算术、关联性和优先级以及括号组成。但是该语言中还有其他语句,并且该语言没有行终止字符 当运算符的算术已知时,停止解析或发出错误信号的正确方法是什么 示例:Parsing 无线路终端的调车场-如何根据操作员的熟练程度停止?,parsing,operators,expression,shunting-yard,Parsing,Operators,Expression,Shunting Yard,这是一个关于扩展非常基本的调车场表达式解析器的问题 我有一种语言,它的表达式由数字文字、字母数字变量名、运算符“+”、“*”和“-”以及一些算术、关联性和优先级以及括号组成。但是该语言中还有其他语句,并且该语言没有行终止字符 当运算符的算术已知时,停止解析或发出错误信号的正确方法是什么 示例: 10 ==> 10 10+20*30 ==> 10 20 30 * + (10+20)*30 ==> 10 20 + 30 * a+b ==> a b + 10 a ==>
10 ==> 10
10+20*30 ==> 10 20 30 * +
(10+20)*30 ==> 10 20 + 30 *
a+b ==> a b +
10 a ==> 10 ; but leave "a" unparsed
10+a 30 ==> 10 a + ; but leave "30" unparsed
10+20* ==> error "missing argument for *"
前四种情况已经起作用了,那么后三种情况如何?从示例中可以明显看出,当您看到两个连续的操作数时,表达式将终止。(假设堆栈上没有括号。如果在括号内找到两个连续的操作数,则会出现语法错误。) 这里的操作数是:
- 标识符
- 文字常数
- 开括号(