fork download
  1.  
  2. #Global variables
  3. ID_TOKEN = 1
  4. LPAREN_TOKEN = 2
  5. RPAREN_TOKEN = 3
  6. PLUS_OP_TOKEN = 4
  7. MULTI_OP_TOKEN = 5
  8. ILLEGAL_TOKEN = -1
  9. PARCOUNT = 0
  10. token = -1
  11. i = 0
  12. def scanner(user,length):
  13. global ID_TOKEN
  14. global LPAREN_TOKEN
  15. global RPAREN_TOKEN
  16. global PLUS_OP_TOKEN
  17. global MULTI_OP_TOKEN
  18. global ILLEGAL_TOKEN
  19. if(i == length):
  20. return token
  21. elif (user[i] >= 'a' and user[i] <= 'z'):
  22. return ID_TOKEN
  23. elif (user[i] == '('):
  24. return LPAREN_TOKEN
  25. elif (user[i] == ')'):
  26. return RPAREN_TOKEN
  27. elif (user[i] == '+'):
  28. return PLUS_OP_TOKEN
  29. elif (user[i] == '*'):
  30. return MULTI_OP_TOKEN
  31. elif(user[i] == '/0'):
  32. return END_TOKEN
  33. else:
  34. return ILLEGAL_TOKEN
  35.  
  36. def getNextChar():
  37. global i
  38. i = i+1
  39.  
  40. def expression(user,length):
  41. global ID_TOKEN
  42. global LPAREN_TOKEN
  43. global RPAREN_TOKEN
  44. global PLUS_OP_TOKEN
  45. global MULTI_OP_TOKEN
  46. global ILLEGAL_TOKEN
  47. global i
  48. global token
  49. global PARCOUNT
  50. if(token == ID_TOKEN):
  51. getNextChar()
  52. token = scanner(user,length)
  53. if(i == length):
  54. return True
  55. elif (token == MULTI_OP_TOKEN or token == PLUS_OP_TOKEN):
  56. getNextChar()
  57. token = scanner(user,length)
  58. return expression(user,length)
  59. elif(token == RPAREN_TOKEN):
  60. if(PARCOUNT > 0):
  61. getNextChar()
  62. token = scanner(user,length)
  63. PARCOUNT = PARCOUNT -1
  64. if(PARCOUNT >0):
  65. return expression(user, length)
  66. elif(PARCOUNT == 0 and i == length):
  67. return True
  68. else:
  69. return False
  70. elif(token == RPAREN_TOKEN and PARCOUNT >0):
  71. PARCOUNT = PARCOUNT -1
  72. if(PARCOUNT >0):
  73. getNextChar()
  74. token = scanner(user,length)
  75. return expression(user, length)
  76. elif(PARCOUNT == 0):
  77. return True
  78. else:
  79. return False
  80. elif(token == LPAREN_TOKEN):
  81. getNextChar()
  82. token = scanner(user,length)
  83. PARCOUNT = PARCOUNT + 1
  84. return expression(user,length)
  85. else:
  86. return False
  87.  
  88. def main():
  89. global ILLEGAL_TOKEN
  90.  
  91. global token
  92. global i
  93. print("Hello! Welcome to Parser Function.")
  94. user = input("Please enter a string for parser to check: ")
  95. print("\n")
  96. length = len(user)
  97. if(length > 0):
  98. token= scanner(user,length)
  99. if(token == ILLEGAL_TOKEN ):
  100. print(user, " is not an expression.")
  101. else:
  102. if(expression(user,length)):
  103. print(user, " is an expression.")
  104. else:
  105. print(user, "is not an expression.")
  106. elif (i == length):
  107. print( "This is not an expression.")
  108.  
  109. main()
Success #stdin #stdout 0.01s 28352KB
stdin
z
(z)
a+b
(a+b)
a+b*z
a+(b*z)
a*(b+(c*d))
stdout
Hello! Welcome to Parser Function.
Please enter a string for parser to check: 

z  is an expression.