标签: grammar

考虑以下BNF语法

考虑以下BNF语法(其中非终端包含在尖括号中并<identifier>与任何合法的Java变量标识符匹配).

<exp> ::= <exp> + <term>
      |   <exp> - <term>
      |   <term>
<term> ::= <term> * <factor>
       |   <term> / <factor>
       |   <factor>
<factor> ::= ( <exp> )
         |   <identifier>
Run Code Online (Sandbox Code Playgroud)

为以下表达式生成三个派生:

(x - a) * (y + b)
Run Code Online (Sandbox Code Playgroud)

盯着exp:

<exp>
Run Code Online (Sandbox Code Playgroud)

用术语替换exp:

<term>
Run Code Online (Sandbox Code Playgroud)

替换术语:

<term> * <factor>
Run Code Online (Sandbox Code Playgroud)

用因子代替术语:

<factor> * <factor>
Run Code Online (Sandbox Code Playgroud)

用(exp)替换这两个因子:

( <exp> ) * ( <exp> )
Run Code Online (Sandbox Code Playgroud)

用exp - term替换第一个exp,用exp + term替换第二个exp

( <exp> - <term> ) * ( <exp> + <term> )
Run Code Online (Sandbox Code Playgroud)

将exp替换为term,然后用因子替换所有4个术语.

( <factor> - …
Run Code Online (Sandbox Code Playgroud)

grammar bnf expression-trees

1
推荐指数
1
解决办法
586
查看次数

需要帮助构建确定性有限自动机?

以图的形式构造确定性有限自动机的规则是什么?我的教授通过例子解释,但我不确定所有图表必须遵循哪些规则.任何帮助表示赞赏,谢谢!

grammar deterministic finite-automata context-free-grammar

1
推荐指数
1
解决办法
1918
查看次数

如何在PHP开始标记旁边添加注释会导致"意外的T_STRING"?

以下代码:

<?php//comment
error_reporting(0);
Run Code Online (Sandbox Code Playgroud)

结果(至少在5.2.11中):

解析错误:语法错误,意外T_STRING

......我觉得很奇怪.

是否<?php//comment应该逐字允许,我建议对于解析错误内容的无效性毫无疑问.

那是因为没有T_STRING看见(虽然我确实知道制作可能形成其他制作以灌输优先权,例如additive-expressions封装乘法运算等).

任何了解PHP语法的人都可以解释这是如何产生的吗?

php grammar

1
推荐指数
1
解决办法
157
查看次数

试图理解"模板<class U>朋友类B;" 句法

以下是一个简单的c ++程序,它使用我的MinGW编译器进行编译,并按预期执行:

#include <iostream>


template <class T> class A {
    T a;
    template <class U> friend class B;

  public:
    A<T> (T t) : a(t) {}
};



template <class T> class B {
   A<T> aa;

  public:

    B<T> (T t) : aa(t) {}

    T getT() const {return aa.a;}
};


int main() {
    B<int> b(5);
    std::cout << "> " << b.getT() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

由于B<T>::getT()访问私有 A<T>::a成员,A<T>使得B<T>与朋友template <class U> friend class B;一行.

不幸的是,我不知道为什么 …

c++ syntax grammar friend

1
推荐指数
1
解决办法
110
查看次数

我的Lambda微积分语法是否明确无误?

我正在尝试为处理lambda演算的语言编写一个小编译器.以下是我发现的语言含糊不清的定义:

E ? ^ v . E  | E E | ( E ) | v
Run Code Online (Sandbox Code Playgroud)

符号^,.,(,)和v是标记.^表示lambda,v表示变量.形式^ vE的表达式是函数定义,其中v是函数的形式参数,E是其主体.如果f和g是lambda表达式,则lambda表达式fg表示函数f应用于参数g.

在假设函数应用程序是左关联的情况下,我试图为这种语言编写一个明确的语法,例如fgh =(fg)h,并且该函数应用程序比...更严格地绑定,例如(^ x.^ y. xy)^ zz =(^ x.(^ y.xy))^ zz

这是我到目前为止所做的,但我不确定它是否正确:

E -> ^v.E | T
T -> vF | (E) E
F -> v | epsilon
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

lambda grammar parsing programming-languages lambda-calculus

1
推荐指数
1
解决办法
2570
查看次数

使用以下语言构造语法{a ^ nb ^ m | n,m = 0,1,2,...,n <= 2m}

我刚接受了期中考试,但无法回答这个问题.

有人可以给出一些语言的例子,并为语言构建一个语法,或者 至少告诉我如何去做它?

另外如何编写语法L:

L = {a n b m | n,m = 0,1,2,...,n <= 2m}?

提前致谢.

grammar context-free-grammar computation-theory context-sensitive-grammar

1
推荐指数
1
解决办法
3万
查看次数

为什么"\ 054321"在JavaScript中产生",321"?

刚刚在Chrome中测试:

"\054321"
Run Code Online (Sandbox Code Playgroud)

进入控制台输入:

",321"
Run Code Online (Sandbox Code Playgroud)

显然"\054"转换为",",但我没有在规范中找到规则.

我正在寻找这条规则的正式规范.为什么"\054"生产","

更新:这是一个OctalEscapeSequence,如在限定的乙1.2.

javascript grammar

1
推荐指数
1
解决办法
100
查看次数

int*const*foo(int x); 是一个有效的C函数原型.你如何"阅读"这种返回类型?

我注意到这是一个有效的原型,同时阅读了Jeff Lee发布的1985年的ANSI C语法规范,并编写了一个带有此签名的函数.这个原型的功能究竟可以返回什么?这个函数的简单主体是什么样的?

c c++ grammar types

1
推荐指数
1
解决办法
200
查看次数

Antlr Parser运算符优先级

请考虑以下语法。我在运算符优先级方面遇到问题,例如:res = 2 * a + b具有与res = 2 *(a + b)类似的解析树。我知道问题出在哪里,但是我想到没有相互左递归的“美丽”解决方案。你能帮我一下吗。语法与自定义访问者一起使用。

grammar Math;

expression: expression add=('+'|'-') expression # expressionAddExpression
            | expression mult='*' expression    # expressionMultExpression
            |'(' expression ')'  # bracketExpression
            | number                            # numberExpression
            ;
    number: INT                                                                 #int
            | '(' number ')'                                                    #bracketNumber
            | VARIABLE                                                          #var

            ;
    VARIABLE: [A-Za-z][A-Za-z0-9]*;



INT: [0-9]+;
Run Code Online (Sandbox Code Playgroud)

grammar parsing antlr antlr4

1
推荐指数
1
解决办法
1059
查看次数

ANSI C - 直接声明符语法 - 为什么C语法允许语法合法但非语义上非法的声明,如int func()()?

ANSI C语法指定:

declarator:
    pointer_opt direct-declarator

direct-declarator:
    identifier
    ( declarator )
    direct-declarator [ constant-expression_opt ]
    direct-declarator ( parameter-type-list )
    direct-declarator ( identifier-list_opt )
Run Code Online (Sandbox Code Playgroud)

根据这个语法,可以推导出来

func()()
Run Code Online (Sandbox Code Playgroud)

作为宣告者,和

int func()()
Run Code Online (Sandbox Code Playgroud)

作为声明,在语义上是非法的.为什么C语法允许这种语法上合法但非法的非法声明?

c syntax grammar declaration c89

1
推荐指数
1
解决办法
244
查看次数