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 LiteralExplanation / Answer
Solution :
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.