为java原型的子语言创建上下文无关语法

为java原型的子语言创建上下文无关语法,java,context-free-grammar,Java,Context Free Grammar,我是上下文无关语法的新手,到目前为止,我只学过左/右派生和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这

我是上下文无关语法的新手,到目前为止,我只学过左/右派生和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这样的东西联系起来?开始符号是什么


谢谢大家!

准备好java语法分析器(例如,from)并扔掉所有不必要的东西。

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

- type
- argument_name
- method_name
- parenthesis (2 terminal symbols)
- comma (terminal)
- semicolon (terminal)
例如,在编写语法规则时会引入更多变量

argument_list : argument
              | argument, comma, argument_list
一旦你完成语法,你就有了“最重要的规则”:


方法\u签名
是开始符号。

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

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

谢谢你提供的资源。但这个问题的规则是什么?int myMethod()是开始符号吗?如果你被告知一切,发现的乐趣何在?开始符号是
declaration\u list
,开始规则是
declaration\u list:(声明分号)*
可以从规范中获取严格的声明定义非常感谢!规格正是我要找的!非常感谢。我会阅读说明书,看看我是否能理解。嗨,Tegiri,你能看看我提出的解决方案吗?谢谢单字母语法变量在CS语法分析课程中是可以的,但对于实用语法,您最好使用更有意义的程序员样式名称。因此,研究单个规则将使其正确性变得显而易见(不需要调查模糊符号的含义)。方法名(M?)也应该更通用——标识符。在词法分析阶段识别标识符。
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