【发布时间】:2012-11-12 15:05:21
【问题描述】:
我正在使用 bison 和 flex 来了解口译员的工作方式。我已经做了几件事,比如范围({INT:INT} 或 {INT:INT:INT})、字符串({string"here come any text"})等,但我无法决定哪种方法应该是帮助野牛理解的正确方法如果用户以[INT, INT, ID, ID, INT, ..., INT, ID, ID...] 的形式输入数组?
首先想到的是使用 flex 关键字 BEGIN 然后一直查看到行尾,但这似乎很愚蠢,因为您需要很多东西来了解下一个成员是 INT 还是 ID,并且这不是什么好方法。我还能做什么?我宁愿用野牛做这件事,但我不知道如何让野牛看起来在[ 和] 之间递归以获取它们包含的所有内容。我该怎么做?
提前致谢!
【问题讨论】:
-
你知道如何构造一个 LR(1) 上下文无关文法来识别这样一个数组吗?还是您的问题是如何将其转换为 Bison 可以理解的格式?
-
不知道。或许您可以推荐一些书籍或链接来阅读?
-
灰姑娘书:自动机理论、语言和计算简介。 4 个版本(包括“0th”)在一定程度上明显不同:en.wikipedia.org/wiki/…——我不确定,但我认为这涵盖了 CFG 和 LR(1) 语法等,如果可能的话——抽象的角度。您的背景中有很多正式的计算机科学理论吗?
-
@Yakk:不,我根本没有,因为我是语言学家。 :-)
-
@DeadMG,你有替代文字建议吗?
标签: c++ bison flex-lexer