Closed luoyou closed 5 years ago
之前我的作业也是类似,支持了'×'|'÷'
所以会更长:
表达式: 求积表达式 (('+'|'-') 求积表达式)*;
求积表达式: 最小表达式 (('*'|'/'|'×'|'÷') 最小表达式)*;
最小表达式
: 字面量
| '(' 表达式 ')'
;
字面量
: T数
| T变量名
;
Python语法定义这里也是按优先级拆分。看起来还好吧。
关于优先级,个人觉得要考虑到大多数用户的情况,国内应该小学二年级就开始四则运算,而且着重强调了运算优先级(待确定,手边没有最新的教材)。如果是这样的话,如果语言设计和用户的习惯思维抵触太大,恐怕因此导致的无心的语义错误会太过频繁。
@nobodxbodon 感谢,我来研究下
经典的四则运算的BNF范式如下:
不少书上都是这么写的,但是实际在设计语言的时候,运算符是非常多的,我略微完善了一下运算符的,写出的BNF范式如下:
里面涉及到的符号实在太多(而且还没处理好符号的优先级),虽然可以很简单的按照优先级进行拆分,但是这样形成的BNF范式太长太丑了,不知道大家有没有比较好的设计方法?
谈及到优先级问题,大家有没有考虑过放弃运算符的优先级,直接按照从左到右的模式进行设计,需要优先级的地方自己加(),不知道这样如何。