Как выполнить это на JVM? (Лексер и парсер с Antlr)

Я хочу создать свой язык программирования на JVM

для первого шага я пытаюсь написать очень простое выражение (добавляя, например, 3 + 7)

поэтому я создал лексер и парсер с Antlr

grammar gr;
formula : Digit Add Digit Equal;
Digit   
  :  '0'..'9'  
  ;  
Add     : '+';
Equal   : '=';    
WS : [\t\r\n]+ -> skip ;

тогда

Antlr сгенерировал Lexer, Parser и Listener

я использовал их

import java.io.IOException;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

public class gr {
    public static void main(String[] args) throws IOException {

        String str = "7+8=";        
        ANTLRInputStream input = new ANTLRInputStream(str);     
        grLexer lexer = new grLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        grParser parser = new grParser(tokens);
        ParseTree tree = parser.formula();
        System.out.println(tree.toStringTree(parser));  
    }
}

Результат :

(formula 7 + 8 =)

теперь моя проблема здесь !!!

Как я могу выполнить эту строку (7 + 8 =) на JVM??? (получить результат 15)

кажется, я должен использовать библиотеку ASM? Да ???

Если ваш ответ да, пожалуйста, помогите мне для очень простого примера

пожалуйста, помогите мне, как использовать JVM для создания моего собственного языка


person HamedFathi    schedule 09.02.2014    source источник
comment
Если вы мало знаете о языках, вам следует начать с переводчика. Не пытайтесь заставить язык работать на JVM — просто попытайтесь заставить его работать вообще.   -  person user253751    schedule 09.02.2014
comment
Я не тороплюсь, я пытаюсь потихоньку получить необходимую информацию. Но очень важно работать на JVM, мне это нужно для университетского проекта.   -  person HamedFathi    schedule 09.02.2014


Ответы (2)


Из вашего текста я предполагаю, что вы не очень хорошо знакомы с тем, как ЦП выполняет операторы, что является базовым знанием, необходимым для написания вашего собственного языка программирования.

Чтобы получить это, вы должны сначала потратить некоторое время на настоящий язык ассемблера , что можно сделать онлайн или офлайн. Я настоятельно рекомендую прочитать несколько руководств по этому вопросу, так как это совсем не тривиально. Изучение ассемблера даст вам гораздо лучшее понимание того, что на самом деле делает ЦП, когда ему нужно выполнить какой-то код.

Вам не нужно становиться экспертом по ассемблеру, но как только вы немного разберетесь в этом, вдруг станет очень ясно, что нужно сделать, чтобы заставить JVM — по сути, эмулятор ЦП — выполнить ваш код: вам нужно скомпилировать его в форму, которую может выполнить JVM, а затем просто скажите ей это сделать.

Изменить: кажется, я ошибся. ;)

Списки инструкций байт-кода Java: Википедия
Спецификация удаленной виртуальной машины: Oracle

person TwoThe    schedule 09.02.2014
comment
Хорошо, вы правы, но я знаю сборку (я магистр компьютерной инженерии). Я не знаю, как конвертировать источники Antlr в байт-код Java, мне нужен простой образец для начала, но спасибо - person HamedFathi; 09.02.2014
comment
Я добавил несколько ссылок для спецификации - person TwoThe; 09.02.2014

Взгляните на этот другой вопрос, касающийся создания и запуска байт-кода Java.

Как создать и выполнить байт-код Java во время выполнения?

person MrCodeMnky    schedule 09.02.2014