c++ - 怎么做 {}?
问题描述
我要检查输入是否正确。
这是语法:
<S-exp> ::= <ATOM>
| LEFT-PAREN <S-exp> { <S-exp> } [ DOT <S-exp> ] RIGHT-PAREN
| QUOTE <S-exp>
<ATOM> ::= SYMBOL | INT | FLOAT | STRING
| NIL | T | LEFT-PAREN | RIGHT-PAREN
我根据语法编写代码,但我不知道该怎么做{<S-exp}
我尝试了太多次,但我的代码仍然不正确。
我的代码:
bool Atom( vector<TokenList> token, int i ) {
return (token[i].type == "SYMBOL" || token[i].type == "INT" || token[i].type == "FLOAT" || token[i].type == "STRING" ||
token[i].type == "NIL" || token[i].type == "T" || token[i].type == "LEFT_PAREN" || token[i].type == "RIGHT_PAREN");
} // Atom()
bool check = false;
bool Sexp(vector<TokenList> token, int i) {
if (token[i].type == "LEFT_PAREN") {
i++;
if (Sexp(token, i)) {
// How to do { <S-exp> } ?
} // if
else return false;
i++;
if (token[i].type == "DOT") {
i++;
check = Sexp(token, i);
if (check == false)
return false;
} // if
if (token[i].data == ")")
return true;
else
return false;
} // if
else if (token[i].type == "QUOTE") {
i++;
return Sexp(token, i);
} // else if
else if (Atom(token, i)) {
return true;
} // if
else return false;
} // Sexp()
解决方案
您的假设似乎植根于Sexp(token, i)
. 看来您的测试token[i]
本身是否是S-exp?但这不是语法所说的:anS-exp
可以是多个标记。
可能是我误解了你的意思Sexp(token,i)
。另一种解释是“S-exp 令牌是否开始于token[i]
”?这是一个合理的问题,但通常该问题有第二部分:“如果是这样,那么结束位置是j
什么?”。你只是返回 a bool
,所以这不是我阅读你的代码的方式。
推荐阅读
- c# - 删除字典 C# 中的某些对象
- php - 基于搜索引擎的数据抓取
- mysql - 每时每刻获取某列中所有过去值都为空的行
- python - 无法卸载 TensorFlow
- windows - 我正在尝试在我的 Windows 系统中安装 Eclipse,但由于出现问题而无法安装
- ansible - Usage of loop for comma separated variable - Ansible Playbook
- scala - 在akka流中过滤掉Either Left的惯用方法是什么?
- google-assistant-sdk - 没有语音输入的谷歌助手操作
- java - Jackson 将 XML/Bean 转换为 Json 数组
- sql - sql csv export 显示不正确的总和