pns/src/pins25/common/Token.java
Gašper Dobrovoljc d88951c225
WIP LexAn
2025-03-05 08:44:48 +01:00

98 lines
1.9 KiB
Java

package pins25.common;
/**
* Leksikalni simbol.
*
* @param location Lokacija simbola v izvornem programu.
* @param symbol Vrsta simbola.
* @param lexeme Znakovna predstavitev simbola.
*/
public record Token(Report.Location location, Symbol symbol, String lexeme) implements Report.Locatable {
/**
* Vrste leksikalnih simbolov.
*/
public enum Symbol {
/** Konec datoteke. */
EOF,
/** Stevilo. */
INTCONST,
/** Znak. */
CHARCONST,
/** Niz znakov. */
STRINGCONST,
/** Ime. */
IDENTIFIER,
/** Kljucna beseda {@code fun}. */
FUN,
/** Kljucna beseda {@code var}. */
VAR,
/** Kljucna beseda {@code if}. */
IF,
/** Kljucna beseda {@code then}. */
THEN,
/** Kljucna beseda {@code else}. */
ELSE,
/** Kljucna beseda {@code while}. */
WHILE,
/** Kljucna beseda {@code do}. */
DO,
/** Kljucna beseda {@code let}. */
LET,
/** Kljucna beseda {@code in}. */
IN,
/** Kljucna beseda {@code end}. */
END,
/** Simbol {@code =}. */
ASSIGN,
/** Simbol {@code ,}. */
COMMA,
/** Simbol {@code &&}. */
AND,
/** Simbol {@code ||}. */
OR,
/** Simbol {@code !}. */
NOT,
/** Simbol {@code ==}. */
EQU,
/** Simbol {@code !=}. */
NEQ,
/** Simbol {@code >}. */
GTH,
/** Simbol {@code <}. */
LTH,
/** Simbol {@code >=}. */
GEQ,
/** Simbol {@code <=}. */
LEQ,
/** Simbol {@code +}. */
ADD,
/** Simbol {@code -}. */
SUB,
/** Simbol {@code *}. */
MUL,
/** Simbol {@code /}. */
DIV,
/** Simbol {@code %}. */
MOD,
/** Simbol {@code ^}. */
PTR,
/** Simbol {@code (}. */
LPAREN,
/** Simbol {@code )}. */
RPAREN,
}
@Override
public String toString() {
String lexeme = switch (symbol) {
case INTCONST -> "(" + this.lexeme + ")";
case CHARCONST -> "(" + this.lexeme + ")";
case STRINGCONST -> "(" + this.lexeme + ")";
case IDENTIFIER -> "(" + this.lexeme + ")";
default -> "";
};
return location + " " + symbol + lexeme;
}
}