【发布时间】:2014-05-10 20:51:41
【问题描述】:
我的任务是一个项目,该项目涉及我获取语法(BNF 形式)并创建一个词法扫描器(使用 lex)和一个解析器(使用野牛)。我从未使用过这些程序中的任何一个,我认为一个很好的参考是看看这些项目是如何从语法中创建的。我正在寻找一种语法,它是关联的 .l 和 .ypp 文件,最好是 C++。我已经能够找到示例文件或示例语法,但不能同时找到它们。我花了一些时间搜索,但找不到任何东西。我想我会在这里发帖,希望有人对我有所帮助,但与此同时我会继续搜索。
我目前正在阅读 Tom Niemann 的 http://epaperpress.com/lexandyacc/download/LexAndYaccTutorial.pdf 这似乎写得很好并且可以理解。
谢谢
编辑:我还在寻找,我开始认为我要寻找的东西不存在。 Google 通常不会让我失望!
编辑 2:也许如果我提供一些语法,你们可以向我展示适当的 .l 和 .ypp 文件的外观。这只是语法的 sn-p,我只需要对它的工作原理有一点“品味”,我想我可以从那里得到它。
语法:
Program ::= Compound
Statements ::= Compound | Assignment | ...
Assignment ::= Var ASSIGN Expression
Expression ::= Var | Operator Expression Expression | Number
Compound := START Statements END
Number ::= NUMBER
说明:
Assignment is the equal sign ":="
Var is an identifier that begins with a lower case letter and is followed by lower case letters or digits
START is the "start" keyword
END is the "end keyword
Operator is "+", "-", "*", "/"
Number is decimal digits which could potentially be negative (minus sign in front)
【问题讨论】:
-
找到这样一个简单的语法会很困难。
-
@JonathanLeffler 你不是在开玩笑。也许我们可以在这里想出一些简单的东西,以便将来像我一样的人有东西可看!