JavaCC 问题,各位大侠帮忙看一下?到底哪里出错了,为什么总是输出Reading from standard input...For input strin

追梦1991322 2013-05-10 03:22:01
/test.txt中的内容/
void main()
{
int t=1;
if(3*3>4-1)
{
t=2;
}
else if(4>3)
{
t=3;
}

}


/**
* JavaCC file
*/
options{
JDK_VERSION = "1.5";
DEBUG_PARSER = false;
}
PARSER_BEGIN(eg1)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
public class eg1{
public static int count = 0;
/*四元式标号*/
public static ArrayList<Sys>sysList = new ArrayList<Sys>();
public static int ncount = 0;
/*临时变量下标*/
public static void main(String args[])throws ParseException{
FileInputStream fileStream;
try {
fileStream = new FileInputStream("test.txt");
eg1 parser = new eg1(fileStream);
System.out.println("Reading from standard input...");
try {
switch (parser.one_line()){
case 0:System.out.println("OK.");
break ;
case 1:System.out.println("Goodbye.");
break ;
default :break ;
}
for (int i = 0;
i<sysList.size();
i++){
System.out.println(sysList.get(i));
}
}
catch (Exception e){
System.out.println("NOK.");
System.out.println(e.getMessage());
parser.ReInit(System.in);
}
catch (Error e){
System.out.println("Oops.");
System.out.println(e.getMessage());
}
}
catch (FileNotFoundException e1){
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
PARSER_END(eg1)
SKIP:{
" "
| "\r"
| "\t"
| "\n"
}
TOKEN:/* OPERATORS */
{
<PLUS:"+">
| <MINUS:"-">
| <MULTIPLY:"*">
| <DIVIDE:"/">
}
TOKEN:{
<MAIN:"main">
| <VOID:"void">
| <IF:"if">
| <ASSIGN:"=">
| <ELSE:"else">
| <INT:"int">
| <FLOAT:"float">
| <CHAR:"char">
}
TOKEN:{
<GREAT:">">
| <LOWER:"<">
| <GREATE:">=">
| <LOWERW:"<=">
| <EQUAL:"==">
}
TOKEN:{
<CONSTANT:(<DIGIT>)+>
| <#DIGIT:["0"-"9"]>
}
TOKEN:{
<LC:"(">
| <RC:")">
| <LM:"[">
| <RM:"]">
| <LB:"{">
| <RB:"}">
}
TOKEN:/* 标识符 */
{
<IDENTIFIER:<LETTER>(<LETTER>
| <DIGIT>)*>
| <LETTER:["_", "a"-"z", "A"-"Z"]>
}
int one_line():{}{
Procedure(){
return 0;
}
| ";"{
return 1;
}
}
void Procedure():{}{
<VOID><MAIN><LC><RC><LB>(Content())*IfStatement()(<ELSE>(Else()
| ElseIf()))*<RB>
}
void IfStatement():{
Token node;
int j1;
int j2;
int next;
int next1;
Sys newsys;
String first;
String middle;
String temp = "";
}
{
<IF><LC>{
next1 = count+1;
}
condition()<RC>{
count++;
j1 = count;
newsys = new Sys(count+"", "J", "_", "_", j1+"#");
sysList.add(newsys);
}
<LB>(Content()IfStatement()(<ELSE>(Else()
| ElseIf()))*)*<RB>{
count++;
newsys = new Sys(count+"", "J", "_", "_", next1+"");
sysList.add(newsys);
EditSys.huitie(sysList, j1+"#", count+1+"");
}
}
void Else():{}{
<LB><RB>
}
void ElseIf():{
Token node;
int j1;
int j2;
int next;
int next1;
Sys newsys;
}
{
// <ELSE>
<IF><LC>{
next1 = count+1;
}
condition()<RC>{
count++;
j1 = count;
newsys = new Sys(count+"", "J", "_", "_", j1+"#");
sysList.add(newsys);
}
<LB><RB>
}
void Content():{
Token node;
String first;
String middle;
String temp = "";
Sys newsys;
}

{
(<INT>| <FLOAT>| <CHAR>)*first = biaoshifu()<ASSIGN>middle = shuzi(){
count++;
temp = "T"+ncount;
ncount++;
newsys = new Sys(count+"", "=", first, middle, temp);
sysList.add(newsys);
first = Integer.parseInt(first)+Integer.parseInt(middle)+"";
}

}
String biaoshifu():{
Token node;
}
{
node = <IDENTIFIER>{
return node.image;
}
}
String shuzi():{
Token node;
}
{
node = <CONSTANT>{
return node.image;
}
}

String Expression():{
Token node;
String first;
String middle;
String temp = "";
Sys newsys;
}
{
first = Term(){
temp = first;
}
(<PLUS>middle = Term(){
count++;
temp = "T"+ncount;
ncount++;
newsys = new Sys(count+"", "+", first, middle, temp);
sysList.add(newsys);
//tip+=count+":\t(\t+\t,\t"+first+"\t,\t"+middle+"\t,\t"+temp+")"+"\r\n";
first = Integer.parseInt(first)+Integer.parseInt(middle)+"";
}
| <MINUS>middle = Term(){
count++;
temp = "T"+ncount;
ncount++;
newsys = new Sys(count+"", "-", first, middle, temp);
sysList.add(newsys);
//tip+=count+":\t(\t-\t,\t"+first+"\t,\t"+middle+"\t,\t"+temp+")"+"\r\n";
first = Integer.parseInt(first)-Integer.parseInt(middle)+"";
}
)*{
return temp;
//return first;
}
}
String Term():{
Token node;
String first;
String middle;
String temp = "";
Sys newsys;
}
{
first = unary(){
temp = first;
}
((<MULTIPLY>middle = unary(){
count++;
temp = "T"+ncount;
ncount++;
newsys = new Sys(count+"", "*", first, middle, temp);
sysList.add(newsys);
//tip+=count+":\t(\t*\t,\t"+first+"\t,\t"+middle+"\t,\t"+temp+")"+"\r\n";
first = Integer.parseInt(first)*Integer.parseInt(middle)+"";
}
| <DIVIDE>middle = unary(){
count++;
temp = "T"+ncount;
ncount++;
newsys = new Sys(count+"", "/", first, middle, temp);
sysList.add(newsys);
//tip+=count+":\t(\t/\t,\t"+first+"\t,\t"+middle+"\t,\t"+temp+")"+"\r\n";
first = Integer.parseInt(first)/Integer.parseInt(middle)+"";
}
))*{
return temp;
//return first;
}
}
String unary():{
String str;
}
{
// str= element(){return -Double.parseDouble(str)+"";}
str = element(){
return str;
}
}
String element():{
String str;
Token node;
}
{
node = <CONSTANT>{
return node.image;
}
| <LC>str = Expression()<RC>{
return str;
}
}
int condition():{
Token node;
int next;
String first;
String middle;
Sys newsys;
}
{
first = Expression()(node = "<"middle = Expression(){
count++;
next = count+1;
newsys = new Sys(count+"", "j<", first, middle, next+1+"");
sysList.add(newsys);
//tip+=count+":\t(\tj<\t,\t"+first+"\t,\t"+middle+"\t,\t"+(next+1)+")"+"\r\n";
}
| node = ">"middle = Expression(){
count++;
next = count+1;
newsys = new Sys(count+"", "j>", first, middle, next+1+"");
sysList.add(newsys);
//tip+=count+":\t(\tj>\t,\t"+first+"\t,\t"+middle+"\t,\t"+(next+1)+")"+"\r\n";
}
| node = ">="middle = Expression(){
count++;
next = count+1;
newsys = new Sys(count+"", "j>=", first, middle, next+1+"");
sysList.add(newsys);
//tip+=count+":\t(\tj>=\t,\t"+first+"\t,\t"+middle+"\t,\t"+(next+1)+")"+"\r\n";
}
| node = "<="middle = Expression(){
count++;
next = count+1;
newsys = new Sys(count+"", "j<=", first, middle, next+1+"");
sysList.add(newsys);
//tip+=count+":\t(\tj<=\t,\t"+first+"\t,\t"+middle+"\t,\t"+(next+1)+")"+"\r\n";
}
){
return next;
}
}

...全文
103 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧