【发布时间】:2020-08-03 20:57:16
【问题描述】:
重要提示:我不能使用外部代码或库,只能使用我自己用 C++11 编写的代码
我正在寻求实现一个图形计算器,它将用户输入作为字符串并将其转换为实际代码(执行它)。到目前为止,我已经完成了 operator+、operator- 等所有功能的实现……但我一直在解析用户输入。
例如,我想允许以下合法的命令:
G1= {a,b | <a,b>}
G2 = { c,d | <c, d>}
print(G1)
print( G1+G2)
G1+G2+G3//will be interpreted as (G1+G2)+G3
G1+(G2+G3)
虽然以下不是:
print( G 1)
print (G2)()
pri nt (G1)
G1 + G 3
但是我该怎么做呢? (我在寻找想法,算法而不是代码)
首先,我考虑读取输入并从中删除多余的空格,但是像 pri nt (G1) 这样不合法的输入将是合法的。
其次,我考虑将所有合法命令保存在像 XprintX(XLegalExpressionGoesHereX)X 这样的表中,并在 X 出现的每个地方留出空格,但我也陷入了似乎不可能的事情
有什么建议吗?
【问题讨论】:
-
听起来你想实现一个分词器/词法分析器/解析器(查找这些术语)。也许还可以查找“野牛”..
-
请看一下 Flex/Bison API for C++,它允许你做这些事情。
-
我推荐阅读一本关于解析器的书。还有一个是关于口译员的。
-
Boost Spirit Qi 也可能有用。
-
编写语言解释器不是简单的任务。你知道抽象语法树(AST)是什么吗?如果没有,也请研究一下。
标签: c++ string algorithm parsing