Java 输入语句的 BNF
BNF for Java Input Statements
我正在写一个Java源代码(.java)到Java中的伪代码生成器使用JDK 7.我想显示伪代码格式输入语句为:
read n
就像我们在 Pascal 中看到的那样。
然而,在 Java 中有无数种方法可以获取控制台输入。我的伪代码生成器只不过是 Java 语法的解析器。但是我无法设计语法来解析输入语句。
谁能告诉我如何为 Java 输入语句编写 BNF 表达式。
如果我的方法有误,请指出正确的方法。
如果我明白你想要什么,你希望Java输入
int k = new Scanner(System.in).nextInt() ;
int m = k * 2 ;
k = k + 1 ;
转成伪码输出like
var k
read k
var m := k * 2
k := k + 1
您至少可以在三个阶段识别 "input statements"。一种是在解析期间。另一个是在解析和生成之间(即转换或标记树的分析阶段)。第三个是在生成期间。
在这三个中,我建议第二个或第三个可能是最好的。解析已经够复杂了。但是如果你真的想在解析过程中这样做,你可以结合语义和句法前瞻来完成。
void DeclOrInput() :
{}
{
LOOKAHEAD( Input() ) Input()
|
LocalDeclStatement()
}
void Input() :
{ }
{ <NEW>
LOOKAHEAD({ token(1).image.equals("Scanner") } )
<ID>
"("
LOOKAHEAD( { token(1).image.equals("System") } )
<ID>
"."
LOOKAHEAD( { token(1).image.equals("in") } )
<ID>
")" "."
LOOKAHEAD( { token(1).image.equals( "nextInt" ) } )
<ID>
"(" ")" ";"
}
我正在写一个Java源代码(.java)到Java中的伪代码生成器使用JDK 7.我想显示伪代码格式输入语句为:
read n
就像我们在 Pascal 中看到的那样。
然而,在 Java 中有无数种方法可以获取控制台输入。我的伪代码生成器只不过是 Java 语法的解析器。但是我无法设计语法来解析输入语句。
谁能告诉我如何为 Java 输入语句编写 BNF 表达式。 如果我的方法有误,请指出正确的方法。
如果我明白你想要什么,你希望Java输入
int k = new Scanner(System.in).nextInt() ;
int m = k * 2 ;
k = k + 1 ;
转成伪码输出like
var k
read k
var m := k * 2
k := k + 1
您至少可以在三个阶段识别 "input statements"。一种是在解析期间。另一个是在解析和生成之间(即转换或标记树的分析阶段)。第三个是在生成期间。
在这三个中,我建议第二个或第三个可能是最好的。解析已经够复杂了。但是如果你真的想在解析过程中这样做,你可以结合语义和句法前瞻来完成。
void DeclOrInput() :
{}
{
LOOKAHEAD( Input() ) Input()
|
LocalDeclStatement()
}
void Input() :
{ }
{ <NEW>
LOOKAHEAD({ token(1).image.equals("Scanner") } )
<ID>
"("
LOOKAHEAD( { token(1).image.equals("System") } )
<ID>
"."
LOOKAHEAD( { token(1).image.equals("in") } )
<ID>
")" "."
LOOKAHEAD( { token(1).image.equals( "nextInt" ) } )
<ID>
"(" ")" ";"
}