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> 
   "(" ")" ";"
}