Skip to content

Commit

Permalink
Handler, logs
Browse files Browse the repository at this point in the history
  • Loading branch information
ArtyomKingmang committed Oct 4, 2023
1 parent 5a48879 commit 2ec0b0a
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 300 deletions.
62 changes: 62 additions & 0 deletions src/main/java/com/kingmang/lazurite/Handler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.kingmang.lazurite;

import com.kingmang.lazurite.LZREx.LZRExeption;
import com.kingmang.lazurite.core.CallStack;
import com.kingmang.lazurite.parser.pars.Lexer;
import com.kingmang.lazurite.parser.pars.Token;
import com.kingmang.lazurite.parser.pars.Parser;
import com.kingmang.lazurite.parser.ast.MStatement;
import com.kingmang.lazurite.parser.ast.Expression;
import com.kingmang.lazurite.log;
import com.kingmang.lazurite.runtime.LZR.LZRNumber;
import com.kingmang.lazurite.runtime.Value;
import com.kingmang.lazurite.runtime.Variables;

import java.util.Date;
import java.util.List;

public class Handler {
public static void handle(String input, String pathToScript, boolean isExec) {
try {
try{
if(!isExec) {
log.clear();
log.append(String.format("Run (%s)\n", new Date()));
}
}
catch (Exception ignored){}
final List<Token> tokens = new Lexer(input).tokenize();
final MStatement program = (MStatement) new Parser(tokens).parse();
program.execute();
if(!isExec){
Variables.clear();
}
} catch (LZRExeption ex) {
try{
log.append(String.format("%s: %s in %s (%s)\n", ex.getType(), ex.getText(), pathToScript, new Date()));
}
catch (Exception ex2){}
System.out.println(String.format("%s: %s in %s", ex.getType(), ex.getText(), pathToScript));
if(!isExec) {
Variables.clear();
}
int count = CallStack.getCalls().size();
if (count == 0) return;
System.out.println(String.format("\nCall stack was:"));
for (CallStack.CallInfo info : CallStack.getCalls()) {
System.out.println(" " + count + ". " + info);
count--;
}
}
}
public static Value returnHandle(String input, String pathToScript) {
try {
final List<Token> tokens = new Lexer(input).tokenize();
final Expression program = new Parser(tokens).expression();
return program.eval();
} catch (LZRExeption ex) {
System.out.println(String.format("%s: %s in %s", ex.getType(), ex.getText(), pathToScript));
return LZRNumber.ZERO;
}
}
}
161 changes: 41 additions & 120 deletions src/main/java/com/kingmang/lazurite/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
import com.kingmang.lazurite.core.Stop;
import com.kingmang.lazurite.parser.ast.Statement;
import com.kingmang.lazurite.parser.pars.*;
import com.kingmang.lazurite.parser.pars.Console;
import com.kingmang.lazurite.parser.pars.FunctionAdder;
import com.kingmang.lazurite.runtime.LZR.LZRString;
import com.kingmang.lazurite.runtime.Time;
import com.kingmang.lazurite.runtime.Variables;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.TimeUnit;

Expand All @@ -23,8 +27,8 @@ public static String VERSION(){
}
public static String link = "";
public static int check = 0;
static Settings setting = new Settings();

// static Settings setting = new Settings();
public static Path path1;
public static void main(String[] args) throws IOException{
while(true)Start();

Expand All @@ -37,27 +41,7 @@ public static void Start() throws IOException {
if (cmd.contains("lazurite") || cmd.contains("lzr")) {

String[] objs = cmd.split(" ");
if (objs[1].equals("--run")||objs[1].equals("-r")) {
System.out.print("\n\nEnter path to your file: ");
Scanner scan = new Scanner(System.in);
String in = scan.nextLine();
RUN(in, false, false, false, 0);

}else if (objs[1].equals("--optimize")||objs[1].equals("-op")) {
System.out.print("\n\nEnter path to your file: ");
Scanner scan = new Scanner(System.in);
String in = scan.nextLine();
System.out.print("\n\nEnter optimization lvl: ");
int lvl = scan.nextInt();
RUN(in, false, false, false, lvl);

}else if (objs[1].equals("--lint")||objs[1].equals("-l")) {
System.out.print("\n\nEnter path to your file: ");
Scanner scan = new Scanner(System.in);
String in = scan.nextLine();
RUN(in,false,true, false, 0);

}else if(objs[1].equals("--help")||objs[1].equals("-h")){
if(objs[1].equals("--help")||objs[1].equals("-h")){
Help();
check = 0;
}else if(objs[1].equals("--version")||objs[1].equals("-v")){
Expand All @@ -67,8 +51,37 @@ public static void Start() throws IOException {
}else if(cmd.contains("cls")|| cmd.contains("clear")){
check = 0;
clear();
}else if(cmd.contains("--help") || cmd.contains("-h")){
Help();
}else if(cmd.contains("--help") || cmd.contains("-h")) {
Help();
}
else if (cmd.contains("LZRRun ")) {
String path = cmd.contains(".lzr") ?
cmd.split(" ")[1] :
cmd.split(" ")[1] + ".lzr";
path1 = Paths.get(path).getParent();

try {
if (!path.contains("\\")) {
Variables.set("__cwd_run__", new LZRString(System.getProperty("user.dir")));
} else {
Variables.set("__cwd_run__", new LZRString(new File(path).getParent()));
}
File file = new File(path);
FileReader fr = new FileReader(file);
BufferedReader reader = new BufferedReader(fr);
String line = reader.readLine();
StringBuilder content = new StringBuilder();
while (line != null) {
content.append(line).append("\n");
line = reader.readLine();
}
Handler.handle(content.toString(), path, false); // Класс Handler сделан для удобного отлова ошибок
} catch (FileNotFoundException e) {
System.out.println("File is not found!");
} catch (IOException e) {
System.out.println("File read error!");
}

}else{
about();
}
Expand Down Expand Up @@ -107,97 +120,5 @@ public static void clear(){
check = 0;
}

public static void RUN(String input, boolean showMeasurement, boolean lintMde, boolean beautifyMod, int optLvl ) throws IOException {
RunProgram(SourceLoader.readSource(input), showMeasurement, lintMde, beautifyMod,optLvl);
}



public static void RunProgram(String input, boolean showMeasuremen,boolean lintMd, boolean beautifyMd, int optLv) throws IOException {
final Settings options = new Settings();
options.validate();
options.showMeasurements = showMeasuremen;
options.lintMode = lintMd;
options.beautifyMode = beautifyMd;

final Time measurement = new Time();
measurement.start("Tokenize time");
final List<Token> tokens = Lexer.tokenize(input);
measurement.stop("Tokenize time");
if (options.showTokens) {
final int tokensCount = tokens.size();
for (int i = 0; i < tokensCount; i++) {
System.out.println(i + " " + tokens.get(i));
}
}

measurement.start("Parse time");
final Parser parser = new Parser(tokens);
final Statement parsedProgram = parser.parse();
measurement.stop("Parse time");
if (options.showAst) {
System.out.println(parsedProgram.toString());
}
if (parser.getParseErrors().hasErrors()) {
System.out.println(parser.getParseErrors());
return;
}
if (options.lintMode) {
Linter.lint(parsedProgram);
return;
}
final Statement program;
if (options.optimizationLevel > 0) {
measurement.start("Optimization time");
program = Optimizer.optimize(parsedProgram, options.optimizationLevel, options.showAst);
measurement.stop("Optimization time");
if (options.showAst) {
System.out.println(program.toString());
}
} else {
program = parsedProgram;
}
program.accept(new FunctionAdder());
try {
measurement.start("Execution time");
program.execute();
} catch (Stop ex) {
/**/
} catch (Exception ex) {
Console.handleException(Thread.currentThread(), ex);
} finally {
if (options.showMeasurements) {
measurement.stop("Execution time");
System.out.println("\n\n======================");
System.out.println(measurement.summary(TimeUnit.MILLISECONDS, true));
}
}

}

private static class Settings {
boolean showTokens, showAst, showMeasurements;
boolean lintMode;
boolean beautifyMode;
int optimizationLevel;

Settings() {
showTokens = false;
showAst = false;
showMeasurements = false;
lintMode = false;
beautifyMode = false;
optimizationLevel = 0;
}

void validate() {
if (lintMode) {
showTokens = false;
showAst = false;
showMeasurements = false;
optimizationLevel = 0;
}
}
}

}

This file was deleted.

This file was deleted.

This file was deleted.

Loading

0 comments on commit 2ec0b0a

Please sign in to comment.