Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

EBNF Parse Grammar in jflex Please help: Use this grammar: There are also test f

ID: 671497 • Letter: E

Question

EBNF Parse Grammar in jflex Please help: Use this grammar: There are also test files below. Below there is a example program given for any ideas.

Source code:

public class SyntaxAnalyzer {

protected CliteLexer lexer;   // lexical analyzer
protected Token token;   // current token

public SyntaxAnalyzer () throws java.io.IOException {
lexer = new CliteLexer (System . in);
getToken ();
}

private void getToken () throws java.io.IOException {
token = lexer . nextToken ();
}

public void program () throws java.io.IOException {

if (token . symbol () != TokenClass . START)
ErrorMessage . print (lexer . position (), "<?php EXPECTED");
getToken ();
block();
if (token . symbol () != TokenClass . END)
ErrorMessage . print (lexer . position (), "?> EXPECTED");
getToken ();

if (token . symbol () != TokenClass . EOF)
ErrorMessage . print (lexer . position (), "END OF PROGRAM EXPECTED");

}

public void block () throws java.io.IOException {
funcDef();
statements();
}

public void statements () throws java.io.IOException {
statement();
}

public void funcDef () throws java.io.IOException {
while (token . symbol () != TokenClass .FUNCTION)
ErrorMessage . print (lexer . position (), "function EXPECTED");
getToken ();

if (token . symbol () != TokenClass .ID)
ErrorMessage . print (lexer . position (), "identifier EXPECTED");
getToken ();

if (token . symbol () != TokenClass .LPAREN)
ErrorMessage . print (lexer . position (), "( EXPECTED");
getToken ();
if (token . symbol () != TokenClass .ID)
ErrorMessage . print (lexer . position (), "identifier EXPECTED");
getToken ();

if (token . symbol () != TokenClass .LBRACE)
ErrorMessage . print (lexer . position (), "{ EXPECTED");
getToken ();

if (token . symbol () != TokenClass .COMMA)
ErrorMessage . print (lexer . position (), ", EXPECTED");
getToken ();

if (token . symbol () != TokenClass .ID)
ErrorMessage . print (lexer . position (), "identifier EXPECTED");
getToken ();

if (token . symbol () != TokenClass .RPAREN)
ErrorMessage . print (lexer . position (), ") EXPECTED");
getToken ();

if (token . symbol () != TokenClass .LBRACE)
ErrorMessage . print (lexer . position (), "{ EXPECTED");
getToken ();

statements();

if (token . symbol () != TokenClass .RETURN)
ErrorMessage . print (lexer . position (), "return EXPECTED");
getToken ();

   ListExpr();
if (token . symbol () != TokenClass .SEMICOLON)
ErrorMessage . print (lexer . position (), "; EXPECTED");
getToken ();

if (token . symbol () != TokenClass .RBRACE)
ErrorMessage . print (lexer . position (), "} EXPECTED");
getToken ();

}


public void statement () throws java.io.IOException {
   switch (token . symbol ()) {
   case IF :
getToken ();
   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");
expression();
   if (token . symbol () == TokenClass . RPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), ") EXPECTED");
   statement();
   if (token . symbol () == TokenClass . LBRAC)
getToken ();
else
ErrorMessage . print (lexer . position (), "[ EXPECTED");
   if (token . symbol () == TokenClass . ELSE)
getToken ();
else
ErrorMessage . print (lexer . position (), "else EXPECTED");
   statement();
   if (token . symbol () == TokenClass . RBRAC)
getToken ();
else
ErrorMessage . print (lexer . position (), "] EXPECTED");
   break;

   case WHILE :
getToken ();
   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");

   expression();
   if (token . symbol () == TokenClass . RPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), ") EXPECTED");

   statement();
   break;

   case FOREACH :
getToken ();
   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");

   if (token . symbol () == TokenClass . ID)
getToken ();
else
ErrorMessage . print (lexer . position (), "identifier EXPECTED");

   if (token . symbol () == TokenClass . AS)
getToken ();
else
ErrorMessage . print (lexer . position (), "as EXPECTED");

   if (token . symbol () == TokenClass . ID)
getToken ();
else
ErrorMessage . print (lexer . position (), "identifier EXPECTED");

   if (token . symbol () == TokenClass . RPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), ") EXPECTED");

   statement();
   break;
  
   case ID :
getToken ();
   expression();
if (token . symbol () == TokenClass . EQ)
getToken ();
else
ErrorMessage . print (lexer . position (), "= EXPECTED");
ListExpr();
   if (token . symbol () == TokenClass . SEMICOLON)
getToken ();
else
ErrorMessage . print (lexer . position (), "; EXPECTED");

   break;

   case ARRAY_PUSH :
getToken ();
   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");

   if (token . symbol () == TokenClass . ID)
getToken ();
else
ErrorMessage . print (lexer . position (), "identifier EXPECTED");

   if (token . symbol () == TokenClass . COMMA)
getToken ();
else
ErrorMessage . print (lexer . position (), ", EXPECTED");

   AddExpr();

   if (token . symbol () == TokenClass . RPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), ") EXPECTED");

   if (token . symbol () == TokenClass . SEMICOLON)
getToken ();
else
ErrorMessage . print (lexer . position (), "; EXPECTED");

   break;

   case PRINT :
getToken ();
   AddExpr();
if (token . symbol () == TokenClass . SEMICOLON)
getToken ();
else
ErrorMessage . print (lexer . position (), "; EXPECTED");
   break;


case LBRACE :
getToken ();

   statement();

   if (token . symbol () == TokenClass . LBRACE)
getToken ();
else
ErrorMessage . print (lexer . position (), "{ EXPECTED");

   statement();

   if (token . symbol () == TokenClass . RBRACE)
getToken ();
else
ErrorMessage . print (lexer . position (), "} EXPECTED");

   if (token . symbol () == TokenClass . RBRACE)
getToken ();
else
ErrorMessage . print (lexer . position (), "} EXPECTED");

   break;

   }
}

public void expression () throws java.io.IOException {
AndExpr ();
while (token . symbol () == TokenClass . OR) {
getToken ();
AndExpr ();
}
}

public void AndExpr () throws java.io.IOException {
RelExpr ();
while (token . symbol () == TokenClass . AND) {
getToken ();
RelExpr ();
}
}

public void RelExpr () throws java.io.IOException {

ListExpr();
RelOper();
ListExpr();
}

public void RelOper () throws java.io.IOException {
if (token . symbol () == TokenClass . RELOP)
getToken ();
else
ErrorMessage . print (lexer . position (), "Relational operator EXPECTED");
}

public void ListExpr () throws java.io.IOException {
   AddExpr();
  
   if (token . symbol () == TokenClass . ARRAY)
getToken ();
else
ErrorMessage . print (lexer . position (), "array EXPECTED");


   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");

   if (token . symbol () == TokenClass . RPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), ") EXPECTED");


}

public void AddExpr () throws java.io.IOException {
MulExpr();
}

public void MulExpr () throws java.io.IOException {
PrefixExpr();
}

public void PrefixExpr () throws java.io.IOException {
SimpleExpr();
}

public void SimpleExpr () throws java.io.IOException {
  
   Literal();
   expression();
   if (token . symbol () == TokenClass . ID)
getToken ();
else
ErrorMessage . print (lexer . position (), "identifier EXPECTED");

   AddExpr();

   if (token . symbol () == TokenClass . ID)
getToken ();
else
ErrorMessage . print (lexer . position (), "identifier EXPECTED");

   AddExpr();
   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");

   AddExpr();

   if (token . symbol () == TokenClass . LBRACE)
getToken ();
else
ErrorMessage . print (lexer . position (), "{ EXPECTED");

   if (token . symbol () == TokenClass . COMMA)
getToken ();
else
ErrorMessage . print (lexer . position (), ", EXPECTED");
  
   AddExpr();


   if (token . symbol () == TokenClass . RPAREN)
   getToken ();
   else
ErrorMessage . print (lexer . position (), ") EXPECTED");
  
   if (token . symbol () == TokenClass . ARRAY_POP)
getToken ();
else
ErrorMessage . print (lexer . position (), "array_pop EXPECTED");

   if (token . symbol () == TokenClass . LPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), "( EXPECTED");

if (token . symbol () == TokenClass . ID)
getToken ();
else
ErrorMessage . print (lexer . position (), "indentifier EXPECTED");

if (token . symbol () == TokenClass .RPAREN)
getToken ();
else
ErrorMessage . print (lexer . position (), ") EXPECTED");


ErrorMessage . print (lexer . position (), "UNRECOGNIZABLE SYMBOL");

  
}

public void Literal () throws java.io.IOException {


if (token . symbol () != TokenClass .INTEGER)
ErrorMessage . print (lexer . position (), "integer EXPECTED");
getToken ();


statement();


ErrorMessage . print (lexer . position (), "UNRECOGNIZABLE SYMBOL");
}
}

test files

Test1.php

Test2.php

Test3.php

Test4.php

Example: Grammar

http://www.cse.unt.edu/~bryant/csce5450/pl0gram

Example Program:

http://www.cse.unt.edu/~bryant/csce5450/pl0/

check in both lexical and syntax folders.

Progranm ?php Block ?> funcDef Statements Statements Statement function Identifie Identifier , Identifier) 1 Statements return ListExpr if Expression Statement else Statement] I while Expression Statement l foreachIdentifier as Identifier) Statement I Identifier [ [ [ Expression ] ] ] = ListExpr ; l array push Identifier AddExpr I print AddExpr Statement Statement ( Statement ) Expression - AndExpr AndExpr ) RelExpr &&RelExpr; ! ListExpr [ RelOper ListExpr 1 RelExpr RelOper ListExpr AddExpir AddOper MulExpir MulOper PrefixExpr SimpleExpr AddExpr array) MulExpr f Addoper MulExpr PrefixExpr MulOper PrefixExpr ) 1 [ Addoper SimpleExpr Literal Expression ) l Identifier l Identifier l arra AddExpr 1 AddExpr , AddExpr ) array PoPIdentifir) integerN Literal

Explanation / Answer

Solution :