我试图理解语言级别的概念(常规,上下文无关,上下文敏感等).
我可以很容易地看清楚这一点,但我发现的所有解释都是一堆符号并谈论集合.我有两个问题:
你能用语言描述常用语言是什么,以及语言有何不同?
人们在哪里学会理解这些东西?据我了解,这是正式的数学?我在大学有几个课程使用它,几乎没有人理解它作为导师只是假设我们知道它.我在哪里可以学到它以及为什么人们"期望"在如此多的资源中知道它?就像教育方面存在差距一样.
这是一个例子:
属于该集合的任何语言都是字母表中的常规语言.
语言怎么能"超过"任何东西?
syntax programming-languages bnf regular-language formal-languages
在离开这个话题 20 多年(自从我获得 CS 本科学位以来)之后,我又回到了语言设计/规范(通过 BNF/EBNF 语法)。
我只是模糊地记得这个领域的各种相关术语,比如 LR(1)、LALR 等。我一直在尝试通过一些谷歌搜索和阅读来刷新,但它来得很慢(可能是因为我没有完全理解这些东西回到学校)。所以我可能做事相当粗略。
我决定用语法来描述一种玩具语言,然后尝试分析并可能优化它,作为我重新学习的一部分。
注意:下面的所有片段也可以在此处的要点中找到。
我从 EBNF 表示开始(由该工具处理/验证):
Program := WhSp* (StmtSemi WhSp*)* StmtSemiOpt? WhSp*;
Stmt := AStmt | BStmt | CStmt | DStmt;
StmtSemi := Stmt? (WhSp* ";")+;
StmtSemiOpt := Stmt? (WhSp* ";")*;
WhSp := "_";
AStmt := "a";
BStmt := "b";
CStmt := "c";
DStmt := "d";
Run Code Online (Sandbox Code Playgroud)
以下是该语言的一些有效匹配(每行一个匹配):
_____
;;;;;
_;_;_
a
__a__
a;
a;b;
a;_b;
_a;_b;_
_a_;_b_;_
__a__;;
_;_a;_b;c;;;__;;__d;___a___
Run Code Online (Sandbox Code Playgroud)
这里有一些该语言中没有的值(同样,每行一个):
ab
a_b
a;_b_c
Run Code Online (Sandbox Code Playgroud)
然后我将其手动转换为以下 BNF 形式( …
我想提出一种语言语法.我已经阅读了关于这三个的一些内容,并且无法真正看到任何人可以做的事情,而另一个人无法做到.有没有理由使用一个而不是另一个?或者只是一个偏好问题?
有没有一个地方我可以找到Backus-Naur Form或BNF语法的流行语言?每当我进行搜索时,我都不会出现太多,但我认为它们必须在某个地方发布.我最感兴趣的是看到一个Objective-C和MySQL.
是否有一种简单的方法来确定语法是LL(1),LR(0),SLR(1)......只是从查看语法而不进行任何复杂的分析?
例如:要确定BNF语法是否为LL(1),您必须计算First和Follow集 - 在某些情况下这可能很耗时.
有谁知道如何更快地做到这一点?真的很感激任何帮助!
我正在尝试使用一种代码生成器来帮助对传统的C/C++混合项目进行单元测试.我没有发现任何一种独立的工具可以从声明中生成存根代码.所以我决定建立一个,它应该不那么难.
拜托,任何人都可以给我一个标准的语法链接,更好地用yacc语言描述.
希望我不是重新发明轮子,请在这种情况下帮助我.
最诚挚的问候,凯文
我正在研究C的解析器.我正在尝试找到C的所有无上下文派生的列表.理想情况下,它将在BNF或类似的情况下.我确信这样的事情就在那里,但谷歌搜索并没有给我太多.
阅读现有解析器/编译器的源代码已被证明比有用的更令人困惑,因为我发现的大多数都比我正在构建的更加雄心勃勃和复杂.