Skip to content

OldSkyTree/python-like-js

Repository files navigation

python-like-js

Python-подобный JavaScript

Это javascript транслятор python-подобного языка, который поддерживает:

  • циклы (for)
  • условия (if, простое сравнение)
  • функции (def)
  • имена переменных до 7 символов
  • переменные без объявления
  • блоки кода через табуляцию
  • комментарии

Грамматика языка

Правило Переход
1. <прог> ::= <спис_опер>
2. <спис_опер> ::= <опер>
3. <опер> ::= <присваив>
4. <присваив> ::= id<операц_присваив><выраж>
5. <операц_присваив> ::= =
6. <выраж> ::= <знач>
7. <знач> ::= id
8. <операц> ::= +
9. <скоб_выраж> ::= (<выраж>)
10. <усл> ::= if <выраж>:<блок_кода>
11. <блок_кода> ::= <опер>
12. <функ> ::= def id(<спис_перем>):<блок_кода>
13. <спис_перем> ::= ε
14. <цикл> ::= for id in (<выраж>, <выраж>):<блок_кода>
15. <коммент> ::= #any
16. <вывод> ::= print(<выраж>)

Устранение левой рекурсии

Правило Переход
1. <прог> ::= <спис_опер>
2. <спис_опер> ::= <опер>
3. <спис_опер>' ::= nl<опер>
4. <опер> ::= <присваив>
5. <присваив> ::= id<операц_присваив><выраж>
6. <операц_присваив> ::= =
7. <выраж> ::= <знач>
8. <знач> ::= id
9. <операц> ::= +
10. <скоб_выраж> ::= (<выраж>)
11. <усл> ::= if <выраж>:<блок_кода>
12. <блок_кода> ::= <опер>
13. <функ> ::= def id(<спис_перем>):<блок_кода>
14. <спис_перем> ::= ε
15. <спис_перем>' ::= ,id
16. <цикл> ::= for id in (<выраж>, <выраж>):<блок_кода>
17. <комент> ::= #any
18. <вывод> ::= print(<выраж>)

Левая факторизация

Правило Переход
1. <прог> ::= <спис_опер>
2. <спис_опер> ::= <опер><спис_опер_конец>
3. <спис_опер_конец> ::= ε
4. <спис_опер>' ::= nl<опер><спис_опер_конец>
5. <опер> ::= <присваив>
6. <присваив> ::= id<операц_присваив><выраж>
7. <операц_присваив> ::= =
8. <выраж> ::= <знач><выраж_конец>
9. <выраж_конец> ::= ε
10. <знач> ::= id
11. <операц> ::= +
12. <скоб_выраж> ::= (<выраж>)
13. <усл> ::= if <выраж>:<блок_кода>
14. <блок_кода> ::= <опер>
15. <функ> ::= def id(<спис_перем>):<блок_кода>
16. <спис_перем> ::= ε
17. <спис_перем_конец> ::= ε
18. <спис_перем>' ::= ,id<спис_перем_конец>
19. <цикл> ::= for id in (<выраж>, <выраж>):<блок_кода>
20. <комент> ::= #any
21. <вывод> ::= print(<выраж>)

Множества FIRST и FOLLOW

Правило FIRST(A) FOLLOW(A)
1. <прог> id,if,def,for,print,# $
2. <спис_опер> id,if,def,for,print,# $
3. <спис_опер_конец> ε,nl $
4. <спис_опер>' nl $
5. <опер> id,if,def,for,print,# nl,$
6. <присваив> id nl,$
7. <операц_присваив> =,+=,-=,/=,*= (,id,lit,True,False
8. <выраж> (,id,lit,True,False nl,$,),:,,
9. <выраж_конец> ε,+,-,*,/,==,!=,>,<,>=,<= nl,$,),:,,
10. <знач> id,lit,True,False ε,+,-,*,/,==,!=,>,<,>=,<=,nl,$,),:,,
11. <операц> +,-,*,/,==,!=,>,<,>=,<= id,lit,True,False
12. <скоб_выраж> ( nl,$,),:,,,+,-,*,/,==,!=,>,<,>=,<=
13. <усл> if nl,$
14. <блок_кода> id,if,def,for,print,#,nl nl,$
15. <функ> def nl,$
16. <спис_перем> ε,id )
17. <спис_перем_конец> ε,, )
18. <спис_перем>' , )
19. <цикл> for nl,$
20. <комент> # nl,$
21. <вывод> print nl,$

About

Python-like JavaScript

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published