我尝试实现某种脚本语言,并且已经可以解析“单词”和“十进制数字”
a = 10; <-- numbers only have digits
b = 3.14; <-- also decimals except they have exactly 1 dot
c = "Hello"; <-- strings are in double quotes
但是现在我想解析十六进制。
d = 'A0'; <-- Hexadecimals would be in single quotes
小数很容易,它们只包含数字,除了可以精确地有1个点外,还包含小数。所以我想我可以使用前缀
来解析“其他数字格式”h10 (hex)
o10 (octal)
我逐个字符解析一个文本char,并寻找预定义的令牌特征来构建AST。所有“变量”都将转换为表示它们的字符串,以及标记实际上是什么类型的标记。例如,如果分配的“结果”为10,我将构建一个字符串和另一个变量以保存其数据类型
std::string value = "10"; <-- 10
std::string type = "Integer"; <-- as Integer
将其传递给词法分析器,解析器和解释器。在脚本中,必须像这样声明它们
a = 1;
b = 3.14;
c = 'C0';
所以解析器会做
| parser found the first -> ' <-
a = 'A';
| now start reading char/digit by char/digit, the first is the highest
a = 'ABC';
| until there is no -> ' <- again
a = 'ABC';
并创建令牌,将所有值存储为字符串,而不管其是什么
// pseudo code
Token { type="Integer", value="1" }
Token { type="Decimal", value="3.14" }
Token { type="Hex", value="C0" }
十六进制是''
内的唯一数据类型。
当我“解释”两个标记的单个加法时,我使用Token.type()
进行if else语句,并进行(一元/二进制)加法运算,将Token.value()
转换为整数或双精度。
字符串只是串联在一起用于编写函数。
我希望这是足够的信息。
我的问题/问题是
谢谢。