Question: In java jCUP (also related to java jLex) how do i modify my code so that after running it, it will find it and count

In java jCUP (also related to java jLex)

how do i modify my code so that after running it, it will find it and count it as an error? currently my code think it is right program.

All my code and bat file is below(total 5 files)

A4.lex

import java_cup.runtime.*; %%

%implements java_cup.runtime.Scanner %type Symbol %function next_token %class A4Scanner %eofval{ return null; %eofval} %state QUOTE, COMMENT

ID = [a-zA-Z][a-zA-Z0-9]* NUMBER = [0-9]+(\.[0-9]+)?

%% "+" {return new Symbol(A3Symbol.PLUS); } "-" {return new Symbol(A3Symbol.MINUS); } "*" { return new Symbol(A3Symbol.TIMES); } "/" {return new Symbol(A3Symbol.DIVIDE); } "," {return new Symbol(A3Symbol.COMMA); } ":=" {return new Symbol(A3Symbol.BECOMES); } "==" { return new Symbol(A3Symbol.EQUALSTO); } ";" {return new Symbol(A3Symbol.SEMICOLON); } "!=" {return new Symbol(A3Symbol.NONEQUALS); }

"WRITE" {return new Symbol(A3Symbol.WRITE); } "READ" {return new Symbol(A3Symbol.READ); } "IF" {return new Symbol(A3Symbol.IF); } "ELSE" { return new Symbol(A3Symbol.ELSE); } "RETURN" {return new Symbol(A3Symbol.RETURN); } "BEGIN" {return new Symbol(A3Symbol.BEGIN); } "END" {return new Symbol(A3Symbol.END); } "MAIN" {return new Symbol(A3Symbol.MAIN); } "STRING" {return new Symbol(A3Symbol.STRING); } "INT" {return new Symbol(A3Symbol.INT); } "REAL" { return new Symbol(A3Symbol.REAL); } "(" { return new Symbol(A3Symbol.LPAREN); } ")" { return new Symbol(A3Symbol.RPAREN); }

"\"" { yybegin(QUOTE); return new Symbol(A3Symbol.QSTRING); } "\"" { yybegin(YYINITIAL); }

{NUMBER} { return new Symbol(A3Symbol.NUMBER );} {ID} {return new Symbol(A3Symbol.ID); }

"/**" {yybegin(COMMENT); } "**/" {yybegin(YYINITIAL); } . {}

| |\t|" " {} . { return new Symbol(A3Symbol.error); } . {}

A4.cup

import java.io.*;

/* Terminals (tokens returned by the scanner). */ terminal ID, PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN; terminal SEMICOLON, BECOMES, EQUALSTO, NONEQUALS; terminal COMMA, QSTRING; terminal INT, WRITE, READ, IF, ELSE, RETURN, BEGIN, END, MAIN, REAL, STRING; terminal NUMBER;

/* Non terminals */ non terminal Type, FormalParam; non terminal Block, Statement, Statements, LocalVarDecl; non terminal AssignStmt, ReturnStmt, WriteStmt, ReadStmt; non terminal FormalParams,Expression, MultiExpr, PrimaryExpr, BoolExpression; non terminal ActualParams, OStatement, matchedst, unmatchedst; non terminal Integer Program, MethodDecl;

/* Precedences */ precedence left PLUS, MINUS; precedence left TIMES, DIVIDE;

/* The grammar */

Program ::= MethodDecl {: RESULT = 1; :} | Program:e MethodDecl {: RESULT = 1+ e.intValue(); :} ;

Type ::= INT |REAL |STRING ;

MethodDecl ::= Type MAIN ID LPAREN FormalParams RPAREN Block | Type ID LPAREN FormalParams RPAREN Block ;

FormalParams ::= FormalParam COMMA FormalParams |FormalParam | ; FormalParam ::= Type ID ;

Block ::= BEGIN Statements END ;

Statements ::= Statement | Statement Statements ;

Statement ::= matchedst |unmatchedst ;

matchedst ::= IF LPAREN BoolExpression RPAREN matchedst ELSE matchedst |OStatement ;

unmatchedst ::= IF LPAREN BoolExpression RPAREN Statement |IF LPAREN BoolExpression RPAREN matchedst ELSE unmatchedst ; OStatement ::= LocalVarDecl |Block |AssignStmt |ReturnStmt |WriteStmt |ReadStmt ;

LocalVarDecl ::= Type ID SEMICOLON |Type AssignStmt ;

AssignStmt ::= ID BECOMES Expression SEMICOLON | ID BECOMES QSTRING SEMICOLON ;

ReturnStmt ::= RETURN Expression SEMICOLON ;

WriteStmt ::= WRITE LPAREN Expression COMMA QSTRING RPAREN SEMICOLON ;

ReadStmt ::= READ LPAREN ID COMMA QSTRING RPAREN SEMICOLON ;

Expression ::= MultiExpr PLUS Expression | MultiExpr MINUS Expression | MultiExpr ;

MultiExpr ::= PrimaryExpr TIMES MultiExpr |PrimaryExpr DIVIDE MultiExpr |PrimaryExpr ;

PrimaryExpr ::= NUMBER | ID |LPAREN Expression RPAREN |ID LPAREN ActualParams RPAREN ;

BoolExpression ::= Expression EQUALSTO Expression | Expression NONEQUALS Expression ;

ActualParams ::= Expression |Expression COMMA ActualParams | ;

A4User.java

import java.io.*; import java_cup.runtime.Symbol ; class A4User{ public static void main (String[] args) throws Exception { File inputFile = new File ("A4.tiny") ; A4Parser parser = new A4Parser(new A4Scanner (new FileInputStream(inputFile))); String javaProgram=(String)parser.debug_parse().value; FileWriter fw =new FileWriter(new File("A4.java")); fw.write(javaProgram); fw.close(); } }

a4.bat

del *.class A4.java A4.output java JLex. Main A4.lex java java_cup. Main -parser A4Parser -symbols A4Symbol < A4.cup javac A4.lex.java A4Parser.java A4Symbol.java A4User.java java A4User javac A4.java java A4 more A4.output

A4.tiny

INT main f() BEGIN STRING X:="test "; @#$ END

the program should i dentify @#$ and report it as error

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!