PLX language syntax analyzer JAVA implementation

xiaoxiao2021-03-06  43

/ ** * PL / X language syntax analyzer's Java implementation

* Ps: This is my compile job, just a part of the post, huh, huh, everyone corrects! * / Package PLX;

Public class parser extends getsymbol {getsymbol SYM;

Int word;

Public parser () {SYM = new getsymbol ();} / ** * Syntax analysis start method * / public void start () {word = sym.getnextsymbol (); if (word == programsym) {ds (); if (Word == Beginsym) {ss (); if (word == endsym) {Word = sym.getnextsymbol (); if (Word! = period) {Error (7);}} else {Error (6);} } else {

Error (5);}} else {Error (0);}}

Private void ss () {s (); while (word == semicolon) {s ();}}

Private void s () {word = sym.getnextsymbol ();

Switch (Word) {Case Aident: {Word = Sym.getNextSymbol ();

IF (Word == Become) {ae ();

} else {Error (8);} Break;}

Case bident: {word = sym.getnextsymbol (); if (word == Become) {be ();

} else {Error (8);} Break;} case ifsym: {be (); if (word == Tensym) {ss (); if (word == elsesYM) {ss ();} else f (word! = endsym) {Error (9);} word = sym.getnextsymbol ();} else {error (10); // if then does not match} Break;} Case WhileSym: {BE ();

IF (word == dosym) {ss (); if (word == endsym) {Word = sym.getnextsymbol ();} else {Error (11); // end;}} Break;} Case Repeatsym: {SS (); If (word == UntilSym) {be ();} else {error (12); // repeat Until does not match} Break;} Case WriteSym: {AE (); Break;}

}

Private void be () {bt (); while (word == orsym) {bt (); word = sym.getnextsymbol ();

}

/ ** * * / private void bt () {bf (); while (word == andSYM) {bf ();}}

Private void bf () {word = sym.getnextsymbol (); switch (word) {copy bident: {word = sym.getnextsymbol (); Break;}

Case TRUESYM: {

Word = sym.getnextsymbol (); Break;} case falsesym: {word = sym.getnextsymbol (); break;} case notsym: {bf (); break;} case lparen: {be (); if (word! = RPAREN) {Error ();} word = sym.getnextsymbol (); break;} default: re (); break;}}

/ ** * * / private void re () {if ((word == aident) || (word == Number) {

Word = Sym.getNextSymbol (); if (Word == Equal) || (Word == Notequ) || (Word == LEQ) || (Word == GEQ) || (Word == GTR) || (Word == LSS)) {ae ();} else {error (14);}} else {error (13);}}

/ ** * * / private void AE () {word = sym.getnextsymbol (); if (word == minus) {system.out.println ("fdsafsadf"); Word = Sym.getNextSymbol (); at () WHILE ((Word == Minus) || (Word == Plus)) {Word = Sym.getNextSymbol (); at ();}} else {at (); while ((word == minus) | Word == Plus)) {Word = Sym.getNextSymbol (); at ();

}}}

/ ** * * / private void at () {AF (); word = sym.getnextsymbol (); while (word == Times) || (word == slash)) {Word = Sym.getnextSymbol (); AF (); word = sym.getnextsymbol ();}} private void AF () {if (word == Aident) {

} else if (word == Number) {

} else if (word == lparen) {AE (); if (word! = rparen) {Error (15);}} else {Error (16);}}

Private void ds () {d (); while (word == semicolon) {d ();

}

Private void d () {word = sym.getnextsymbol (); if (word == integersym) {// integer variable definition word = sym.getnextsymbol (); if (word == Aident) {Word = Sym.getNextSymbol );

While (Word == Comma) {Word = Sym.getNextSymbol (); if (Word! = AIDENT) {Error (18);} Word = Sym.getNextSymbol ();

} else {

Error (17);}}} else if (word == logicalsym) {// logical variable definition word = sym.getnextsymbol (); if (word == bident) {Word = Sym.getNextSymbol ();

While (Word == Comma) {Word = Sym.getNextSymbol (); if (Word! = BIDENT) {Error (20);} Word = Sym.getNextSymbol ();

} else {Error (19);}}}

Private void error () {system.out.println ("error!");} public static void main (String [] args) {(New Parser ()). start ();}

}

Another attached: PL / X language syntax

PROG = "Program" DS "begin" ss "end" ".".

DS = D {";" D}.

SS = s {"s" s}.

D = "Integer" Aident {"," Aident} | "Logical" Bident {"," BIDENT}.

S = aident ": =" AE | Biednt ": =" be | "if" be "the" SS ["ELSE" SS] "END"

"While" be "do" ss "end" | "repeat" SS "uns" uns "" WRITE "AE.

AE = ["-"] at {("-" | " ") at}.

AT = AF {("*" | "/") AF}.

AF = AIDENT | NUMBER | "(" AE ")".

BE = bt {"or" bt}.

Bt = BF ("AND" BF).

BF = BIDENT | "True" | "false" | "NOT" BF | "" | Re.

RE = ("="> ">"> "<=" | "/ =") AE.

转载请注明原文地址:https://www.9cbs.com/read-74913.html

New Post(0)