rub*_*nvb 2 c++ algorithm parsing c++11
我不是在寻找实现,只是伪代码,或者至少是一种有效处理这种算法的算法.我需要处理这样的语句:
(a) # if(a)
(a,b) # if(a || b)
(a+b) # if(a && b)
(a+b,c) # same as ((a+b),c) or if((a&&b) || c)
(a,b+c) # same as (a,(b|c)) or if(a || (b&&c))
Run Code Online (Sandbox Code Playgroud)
因此,+运营商优先于,运营商.(所以我+的数学乘法与,数学加法相似,但这只是令人困惑).
我认为递归函数是最好的,所以我可以通过递归调用很好地处理嵌套括号.一旦函数返回,我也会处理错误处理,所以不用担心.我遇到的问题:
我只是不知道如何处理优先事项.我return true一看到a就可以,,之前的值是真的.否则,我会重新运行相同的例行程序.A加将有效是一个布尔乘(即true*true=true,true*false=false等...).
错误检测:我已经想到了几种处理输入的方案,但是我想检测很多丑陋的东西并向用户输出错误.我认为没有一种方案能够在代码中的统一(读取:集中)位置处理错误,这对于可维护性和可读性来说是很好的:
()
(,...
(+...
(a,,...
(a,+...
(a+,...
(a++...
Run Code Online (Sandbox Code Playgroud)
在上面的"例程"中检测这些应该处理不好的输入.当然,每次读取令牌时,我都会检查输入结束.
当然,如果有不匹配的括号,我会遇到可能已经阅读全文文件的问题,但是,嘿,人们应该避免这种紧张.
编辑:啊,是的,我忘了!哪些也应该像经典的非运算符一样可用:
(!a+b,c,!d)
Run Code Online (Sandbox Code Playgroud)
对那些感兴趣的人进行微小的更新:我有一个不知情的狂野,并从头开始编写我自己的实现.对于顽固派而言,这可能还不够,所以关于codereview的这个问题.