如果您需要帮助解析语言本身,请寻找解析器和词法分析器生成器。
传统的 Linux 工具 lex 和 yacc 是不错的选择。Linux 有 bison 和 flex,它们是它们的 Linux 变体。
如果语言足够简单,它们可能不是必需的。
我不知道有什么好的参考资料。也许这个口译员需要的东西清单会有所帮助:
- 条件语句(例如“if”)
- 分支语句(例如“goto”)
- 变量存储和赋值语句
- 至少是一个简单的表达式求值器(例如,如果我想设置 X=1+1,则需要将 X 设置为 2)
- 输入和输出(例如读写语句或函数)
请参阅http://dinosaur.compilertools.net/bison/bison_5.html以获取使用 bison 的简单示例程序,该程序解析和执行基本计算器的功能。这是该页面中示例的副本:
input: /* empty */
| input line
;
line: '\n'
| exp '\n' { printf ("\t%.10g\n", $1); }
;
exp: NUM { $$ = $1; }
| exp exp '+' { $$ = $1 + $2; }
| exp exp '-' { $$ = $1 - $2; }
| exp exp '*' { $$ = $1 * $2; }
| exp exp '/' { $$ = $1 / $2; }
/* Exponentiation */
| exp exp '^' { $$ = pow ($1, $2); }
/* Unary minus */
| exp 'n' { $$ = -$1; }
;
%%