Coder Social home page Coder Social logo

lua-java-translator's People

Contributors

nikitavkalinin avatar vad23klev avatar

Watchers

 avatar  avatar  avatar

lua-java-translator's Issues

Атрибутирование

На этапе генерации кода понадобится быстрый доступ ко многим параметрам. Нужно добавить атрибуты узлам дерева с этими параметрами.

Для функций Lua:

  • Локальная таблица констант
  • Таблица полей

Для константы:

  • Номер строки в соответствующей таблице

Это то, что я сейчас делаю. Если что-то еще, на твой взгляд, нужно - напиши.

Parser

Никит, надо добавить функции, в узлы дерева и парвила свертки.

ошибки парсера

Никит, исправил, почти все...

%{
#include <stdio.h>
#include <tree_nodes.h>
%}

%union {
int Int;
char* Id;
char* String;
double Double;
struct NWhile * While;
struct NExpr * Expr;
struct NFor * For;
struct NStmtList * SL;
struct NStmt * Stmt;
struct NFunc * Func;
}

%start root
%token INT
%token DOUBLE
%token FOR
%token WHILE
%token END
%token IF
%token ELSE
%token ELSEIF
%token DO
%token THEN
%token REPEAT
%token UNTIL
%token RETURN
%token BREAK
%token FUNC
%token LOCAL
%token STRING
%token ID
%token EQ
%token NQ
%token LT
%token GT
%token AND
%token NOT
%token OR
%token CONCAT
%token TRUE
%token FALSE
%token NIL

%type expr
%type stmts
%type func

%right '='
%left OR
%left AND
%left EQ NQ
%left '<' '>' GT LT
%left '+' '-'
%left '*' '/' '%'
%left NOT
%nonassoc ')'

%%

argsn: expr
| argsn ',' expr
;

args: /* empty /
| argsn
;
longid: ID
| longid '.' ID
;
expr: expr AND expr
| expr OR expr
| NOT expr
| expr EQ expr
| expr NQ expr
| expr '>' expr
| expr '<' expr
| expr GT expr
| expr LT expr
| longid '(' args ')'
| longid args
| expr '+' expr
| expr '-' expr
| expr '
' expr
| expr '/' expr
| expr '%' expr
| expr CONCAT expr
| '(' expr ')'
| longid '[' expr ']'
| STRING
| INT
| DOUBLE
;

stmt: WHILE expr stmts END
| IF expr THEN stmts END
| IF expr THEN stmts ELSE stmts END
| IF expr THEN stmts ELSEIF expr stmts END
| FOR ID '=' expr ',' expr DO stmts END
| FOR ID '=' expr ',' expr ',' expr DO stmts END
| expr
| func
| longid '=' tbl
;

stmtsn: stmt
| stmtsn stmt
;

stmts: /* empty */
| stmtsn
;

root: stmts
;

func: FUNC ID '(' func_args_e ')' stmts END
| FUNC ID ':' ID '(' func_args_e ')' stmts END
;

func_args: longid
| func_args ',' longid
;

func_args_e: /* empty */
| func_args
;

tbl_elem: ID '=' expr
| '[' expr ']' '=' expr
| expr
| func
| ID '=' func
| '[' expr ']' func
;

tbl_elem_list: /* empty */
| tbl_elem_listn
;

tbl_elem_listn: tbl_elem
| tbl_elem_listn ',' tbl_elem
;

tbl: '{' tbl_elem_list '}'
;

Парсер

Есть такой пример:

function shellsort(t, before, n)
    n = n

    k,z,c,v = 0x3F,'sada\n\"',"sdda\\\"\n", [[
    sdasd asd asd asd asd
    dasdasd \n\"]]
    if not before or before == "<" then return ssup(t, n)
    elseif before == ">" then return ssdown(t, n)
    else return ssgeneral(t, n, before)
    end
    return shellsort
end

Нужно добавить правило для подержки такого объявления переменных:

k,z,c,v = 0x3F,'sada\n\"',"sdda\\\"\n", [[
sdasd asd asd asd asd
dasdasd \n\"]]

lua.y

Есть мнение что от данного файла пора избавиться. Или переименовать lua2.y в lua.y

распечатка дерева

Никит, у меня к тебе вопрос. не могу подключить файл к лексеру что бы печатался.

 make
rm -rf *.o *.h *.c lualp
bison -d ../parser/lua2.y
cp ../parser/tree_nodes.h ./
cp ../parser/tree_print.h ./
g++ -c lua2.tab.c
flex ../lexer/lua.yy
g++ -c lex.yy.c
g++ lex.yy.o lua2.tab.o -o lualp
lex.yy.o: In function `main':
lex.yy.c:(.text+0x28dd): undefined reference to `print_tree(NStmtList*)'
collect2: error: ld returned 1 exit status
Makefile:4: recipe for target 'lualp' failed
make: *** [lualp] Error 1
}

подключение и вызов в лексере

%{

    #include <stdio.h>
    #include <string.h>

    #include "lua2.tab.h"
    #include "tree_print.h"

    #define YY_USER_ACTION yylloc.first_line = yylloc.last_line = yylineno;

    char strconst[1281] = {0};

    extern int yyparse(void);
%}

int main(int argc,char* argv[])
{
    if (argc > 1) 
    {
        yyin = fopen(argv[1], "r");
        yyparse();
        print_tree(root);
    }
    return 0;
}

Функция в таблицах

Никит объявление именнованных функций в таблицах тоже надо переносить в верх

Происходит переопределение конструкций языка Си

Блокирует Issue #15.

Значения перечислений NStmtType и NExprType переопределяют while, for и т. д., компилятор ругается.

Необходимо добавить префиксы:

enum NStmtType {
    STMT_WHILE,
    ...
enum NExprType {
    EXPR_EQ,
    ...

Ну и форматирование еще бы нормальное. Код функций тоже придется поменять.

вопрос

Никит,вопрос:
Почему в lua.yy используется yylval, а в lua.y yyval?

Ошибки в tree_nodes.h

Разберись с этим:

tree_nodes.h: In function ‘NStmtList* add_stmt_to_list(NStmtList, NStmt*)’:
tree_nodes.h:268:8: error: ‘list’ was not declared in this scope
     if(list->first == NULL)
        ^
tree_nodes.h:276:5: error: ‘list’ was not declared in this scope
     list->last = element;
     ^
tree_nodes.h: In function ‘NFor* create_for(NExpr*, NExpr*, NExpr*, NExpr*, NStmt*)’:
tree_nodes.h:285:19: error: ‘endl’ was not declared in this scope
     result->end = endl;
                   ^

Остальное вроде исправил.

Сематические таблицы

Необходимо в программе обработать дерево, и составить сематические таблицы.
Таблиц несколько: таблица констант, таблица классов и др. точно назову вечером.

Тесты

Нужны тесты, на каждое правило в парсере.
Например:

function fib ( n )
      if n < 2 then return 1 end
        return fib ( n - 2 ) + fib ( n - 1 )
    end

или

  function shellsort(t, before, n)
    n = n or #t
    k,z,c,v = 1.0d,0x3F,'sada\n\"',"sdda\\\"\n", [[
    sdasd asd asd asd asd
    dasdasd \n\"]]
    if not before or before == "<" then return ssup(t, n)
    elseif before == ">" then return ssdown(t, n)
    else return ssgeneral(t, n, before)
    end
  end
  return shellsort
end

библеотека

необходимо написать библиотеку стандартных функций.

дерево

надо придумать функцию распечатки дерева

id_chain

Никит, вопрос id_chain - создавать как список утверждений или как цельную строку

2 вопроса

В утверждении может содержаться лист утверждений?
Лист утверждений съедает пустоту?

Flex

Что осталось по лексеру доделать?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.