解析十六进制值,将其转换为字符串表示形式,然后将其实际值返回c ++

时间:2019-01-21 23:52:44

标签: c++

我尝试实现某种脚本语言,并且已经可以解析“单词”和“十进制数字”

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()转换为整数或双精度。 字符串只是串联在一起用于编写函数。 我希望这是足够的信息。

我的问题/问题是

  • 我如何正确解析文本文件中的十六进制值,例如 “ a ='ABC';”并建立其十六进制和整数值吗?
  • 如何将实际值转换为字符串并返回以进行显示/计算?

谢谢。

0 个答案:

没有答案