1

我是上下文无关语法的新手,到目前为止我只学过左/右推导和 G=(V, E, R,S) 之类的东西。但我试图解决的问题涉及 java 原型,我不太擅长 java。所以我真的不知道从哪里开始。

给出Java原型子语言的上下文无关文法。

int myMethod();
double myMethod(int x, double y);
static double f(int x, double y, int z);
public static double g();

这些是方法和变量,我怎么能与 S => Sa | 之类的东西联系起来?e ? 什么是开始符号?

谢谢!

4

3 回答 3

1

准备好 java 语法解析器(例如来自http://www.antlr.org/grammar/list)并扔掉所有不必要的东西。

于 2012-10-04T16:35:53.420 回答
1

这就是我想出的。你能花点时间看看这是否有意义吗?

S -> AB 
A -> PCT | CT | T 
B -> M(V);
V -> TX | TX,V | e

T -> int | double
C -> static | e
P -> public | e
M -> myMethod | f | g
X -> x | y | z
于 2012-10-05T08:49:18.540 回答
0

您需要了解的有关方法签名的所有 java 都位于单个文档页面上。您通过识别语法变量开始编写语法。最明显的开始是

- type
- argument_name
- method_name
- parenthesis (2 terminal symbols)
- comma (terminal)
- semicolon (terminal)

您在编写语法规则时引入更多变量,例如

argument_list : argument
              | argument, comma, argument_list

一旦你完成你的语法,你就会有“最重要的规则”:

method_signature : ... 

method_signature开始符号。

于 2012-10-04T16:44:46.050 回答