你能解释一下吗,我怎么能检查一下,第一个上下文无关语法(G1)的语言是第二个上下文无关语法(G2)语言的子集。
G1和G2是两个字母相同的LL(1)语法:
{a, b, c, d, f}
生产规则如下:
A -> αB
或
A -> α
α是一个非epsilon字符串(由终端符号组成).
上下文无关语法G1:
S1 -> aK
K -> bC|cE
C -> cB|d
E -> bA|f
A -> abC
B -> acE
上下文无关语法G2:
S2 -> aX
X -> bZ|cY
Z -> cV|d
Y -> bU
语法G生成语言L的定义如下:
G=( {x,y},{S,A,B,C},P,S)
如果P的元素是:
S -> ABA
AB -> AC
CB ->英国广播公司
CA -> BBA
A -> a=E
B -> b
由G生成的L语言是否最准确地说是:
A.乔姆斯基0型
B. Chomsky类型1(对上下文敏感)
C. Chomsky类型2(无上下文)
D.乔姆斯基第3型(常规)
E.上述任何一项
我认为这是类型0,因为它对上下文不敏感。但我想知道,这些规则可能会被简化为其他规则,而变得对上下文敏感或上下文无关等等。如何处理这类问题?
语法G的定义如下:
G= (
因此,在我的编程经验中,我遇到了静态类型化语言的两种类型注释:我将它们称为“前”和“后”。C-样式语言使用的格式
int i = 5
而大多数非c族语言都使用这种格式。
var c:int = 5
前者的例子是C,C++,Java;后者的例子是Scala,Haxe,Go。
在某些人看来,这似乎是肤浅的,但我的问题是:每种风格的优点是什么?为什么要用一个而另一个呢?为什么C从一开始就采用这种风格?
我一直在写一个语言解析器。它基于BNF样式规则,其中一个规则包含一个选项列表或终端令牌。例如:
# Rule A matches the current token stream position if it matches rule B
# followed by rule C followed by a semicolon
rule_a:
rule_b rule_c ";"
# Rule B matches the current token stream position if the token
# there equals "foo"
rule
我对在C上开发自己的编程语言很感兴趣,但我不知道从哪里开始。
所以,我研究过,这引起了我的注意:
A lot of languages are C-based.
流行的编程语言,如C++和Objective,可能还有C#和Java都建立在C之上(更别提Python了)
C++和object创建者是如何创造出一种新的基于C的语言,但是添加了面向对象的编程概念呢?
为C的子集编写一个简单的BNF语法,它支持多个语句,包括赋值、if-else和while语句,没有块语句。为您的非终端使用有意义的名称(与神秘字母相比)。假设变量由单个字母表示,并且是整数。假设标准优先规则适用于运算符*、/、+、-和括号。确保包含关系运算符(==,!=,<,>,>=和<=)。以下是语法的有效程序:
a = -35;while (b > a);a = a + b;if (a >= 10);c = a;else c = b;
你能扩展你的BNF来正确地处理一个C块语句作为一段时间的一部分吗?修改您的产品以支持:而(b > a) a=a+
我的公司为工程程序开发了一个API。它是用C++开发的,但我们为以下语言创建了包装器:
一种类似VB的专有语言
MATLAB
还有Python。
目前,文档是由一堆脚本生成的,并且它开始花费时间来100%地保存它。我想知道是否有一种方法可以一次获得doxygen/sphinx或其他程序来生成C/C++、VB和MATLAB的文档。Python部分是通过SWIG完成的。当前的输出类似于:
NameOfFunction
VB:
函数NameOfFunction(ByVal a As Long,ByRef b() As Long,ByVal c As Long)
M
花括号语言是众所周知的:()
其他编程语言可以有BEGIN ~ END和LIVE ~END块结构。例如
A) BEGIN ~ END,DO ~ END,IF ~ END IF -示例:,,,,等...
B) IF ~ FI、DO ~ OD、CASE ~ IN ~ OUT ~ ESAC -示例:、、、、、、、、、C15、C16、C17等...
什么是官方的(或-合理的)名称来区分两种不同的块结构风格A)和B)?
我想知道下面的代码是作为实体框架或linq或其他东西考虑的。
var model = _db.Restaurants
.OrderByDescending(r => r.Address.City)
.Where(r => r.Address.State == state || (state == null));
我认为它是linq,因为它使用System.Linq命名空间。然而,就我而言,linq是这样写的:
var waCustomers =
from c in customers