Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.60 KB | None | 0 0
  1. grammar Nimble;
  2.  
  3. program : funcdec* vardec* statement* ;
  4.  
  5. statement
  6. : 'print' expr # print
  7. | 'while' expr statementblock # while
  8. | ('if' expr statementblock | 'if' expr statementblock 'else' statementblock) # if
  9. | 'return' expr? # return
  10. | ID '(' ((expr ',')* expr)? ')' # funccall
  11. | ID '=' expr # assign
  12. ;
  13.  
  14. funcdec : 'func' ID '(' ((pramtr ',')* pramtr)? ')' ('->' TYPE)? '{' vardec* statement* '}';
  15.  
  16. pramtr : ID ':' TYPE ;
  17.  
  18. vardec : 'var' ID ':' TYPE ('=' expr)? ;
  19.  
  20. statementblock : '{' statement* '}' ;
  21.  
  22. expr
  23. : '(' expr ')' #bracexpr
  24. | op=('!' | '-') expr #unary
  25. | expr op=('*' | '/') expr #muldiv
  26. | expr op=('+' | '-') expr #addsub
  27. | expr op=('==' | '<' | '<=') expr #compare
  28. | ID '(' ((expr ',')* expr)? ')' #funccall
  29. | STRING #string
  30. | NUMBER #number
  31. | BOOL #bool
  32. | ID #id
  33. ;
  34.  
  35. BOOL : ('true' | 'false') ;
  36.  
  37. STRING : ["]~["\r\n]*["] ;
  38. // https://github.com/antlr/grammars-v4/blob/master/c/C.g4
  39.  
  40. TYPE : ('Int' | 'String' | 'Bool') ;
  41.  
  42. ID : [a-zA-Z_][a-zA-Z_0-9]* ;
  43.  
  44. NUMBER : [0-9]+ ;
  45.  
  46. COMMENT : '//' ~[\r\n]* -> skip ;
  47.  
  48. WS : [ \t\r\n]+ -> skip ;
  49.  
  50.  
  51.  
  52.  
  53. //////////////////////////TEST CODE ???????????????????????????
  54. //LEGAL STATEMENTS SECTION
  55. print "hello"
  56. print testVariable
  57. // ignore this statement
  58. a == b
  59. var myVar : Int
  60. var myVar: String = "hello"
  61. if (myVar) {print "hello"}
  62. if thing {print "hello"} else {print "goodbye"}
  63. func myMethod() {print "stuff"}
  64. func myMethod() -> Int {return 1}
  65. func myMethod(garbage : Int) -> String
  66. {
  67. return "garbage out"
  68. }
  69. //TEST PROGRAM:
  70. func countdown(from: Int, message: String) {
  71. var current : Int = from
  72. while 0 < current {
  73. current = displayCount(current)
  74. }
  75. print message + "\n"
  76. }
  77.  
  78. func displayCount(c: Int) -> Int {
  79. print c
  80. print "\n"
  81. c = c - 1
  82. if c == 3 {
  83. print "Get ready!\n"
  84. }
  85. return c
  86. }
  87.  
  88. var announce: String = "Liftoff"
  89. countdown(10, announce)
  90.  
  91. //ILLEGAL MOVE SECTION
  92. print print hello
  93. if myVar : print "hello"
  94. var myVar : int
  95. var myVar = "stuff"
  96. if thing {print "hello"} elif {print "goodbye"}
  97. func badProgram(input) : return output
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement