在LEX中识别令牌时丢失类型信息

时间:2015-08-06 03:39:15

标签: regex bison yacc lex

我正在尝试使用lex和yacc / bison解析配置文件。示例文件如下所示。

[section1]
attr1=1234567
attr2=848329832499934
[section2]
attr3=1233422
attr2=849999934834798

要识别上面列出的属性的值,我使用以下正则表达式。

DIGIT [0-9]
NUM   {DIGIT}+

现在,我的具体示例attr1的类型为uint32_tattr2的类型为uint64_t

但是我无法识别这一点。换句话说,我需要有一个符号表(我静态定义),我可以从中查找类型,以便我可以填充相应的类型。

还有其他方法可以解决这个问题吗?像python这样的动态类型语言如何解决这个问题。?

1 个答案:

答案 0 :(得分:0)

通常的方法是根据令牌本身键入常量(或其他令牌)。因此,如果一个数字序列令牌的值在0..2 32 -1范围内,那么它将是2 $ checking TEST-var TEST is empty! 2 $export TEST="hello" checking TEST-var TEST is not empty 1 $ ,否则它将是其他类型(和相应的令牌)能够保持价值。

在python的情况下,有unit32_t类型能够保存适合单个单词的整数(这取决于你正在运行的机器),然后是&# #39; s int类型,能够处理任何更大的整数。