aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/nivis-python/parsers.py
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2024-02-25 12:00:16 +0800
committer简律纯 <i@jyunko.cn>2024-02-25 12:00:16 +0800
commite2c1c1911e117245551a612499d02eacabbbe5d8 (patch)
tree91c98463bdc1397667ae8d13acb56d83ff347c6e /nivis-python/parsers.py
parent1199a75378efcaf756e2027ecc2530c6d97bc95c (diff)
downloadTRPGNivis-e2c1c1911e117245551a612499d02eacabbbe5d8.tar.gz
TRPGNivis-e2c1c1911e117245551a612499d02eacabbbe5d8.zip
refactor: rename nivis-python to nivis
Diffstat (limited to 'nivis-python/parsers.py')
-rw-r--r--nivis-python/parsers.py145
1 files changed, 0 insertions, 145 deletions
diff --git a/nivis-python/parsers.py b/nivis-python/parsers.py
deleted file mode 100644
index ca004f7..0000000
--- a/nivis-python/parsers.py
+++ /dev/null
@@ -1,145 +0,0 @@
-from .lexer import Lexer, Token
-
-
-__all__ = ["Parser"]
-
-
-class Parser:
- """
- A class representing a parser for Psi code.
-
- Args:
- input: The input code to be parsed.
-
- Returns:
- None
-
- Example:
- ```python
- parser = Parser(input)
- parser.parse()
- ```
- """
-
- def __init__(self, input):
- """
- Initializes a Parser object.
-
- Args:
- input: The input code to be parsed.
-
- Returns:
- None
- """
- self.lexer = Lexer(input)
- self.tokens = iter(self.lexer)
- self.current_token = next(self.tokens)
-
- def parse(self):
- """
- Parses the input code.
-
- Returns:
- The result of the parsing.
- """
- return self.parse_expr()
-
- def parse_expr(self):
- """
- Parses an expression in the input code.
-
- Returns:
- The result of the parsing.
- """
- token = self.current_token
- if token.value == "?":
- self.eat("?")
-
- condition = self.parse_condition()
-
- self.eat(":")
-
- if condition:
- result = self.parse_reply()
- else:
- result = None
-
- return result
-
- def parse_condition(self):
- """
- Parses a condition in the input code.
-
- Returns:
- The result of the parsing.
- """
- variable = self.parse_variable()
- self.eat("==")
- value = self.parse_value()
-
- return variable == value
-
- def parse_variable(self):
- """
- Parses a variable in the input code.
-
- Returns:
- The result of the parsing.
- """
- token = self.current_token
- self.eat("IDENTIFIER")
- return token.value
-
- def parse_value(self):
- """
- Parses a value in the input code.
-
- Returns:
- The result of the parsing.
-
- Raises:
- Exception: Raised when an invalid value is encountered.
- """
- token = self.current_token
- if token.type == "INTEGER":
- self.eat("INTEGER")
- return token.value
- else:
- raise Exception(f"Invalid value: {token.value}")
-
- def parse_reply(self):
- """
- Parses a reply in the input code.
-
- Returns:
- The result of the parsing.
-
- Raises:
- Exception: Raised when an invalid reply is encountered.
- """
- self.eat("reply")
- self.eat(":")
-
- token = self.current_token
- if token.type != "SEPARATOR":
- raise Exception(f"Invalid reply: {token.value}")
-
- return token.value
-
- def eat(self, expected_type):
- """
- Consumes the current token if it matches the expected type.
-
- Args:
- expected_type: The expected type of the token.
-
- Returns:
- None
-
- Raises:
- Exception: Raised when an unexpected token is encountered.
- """
- if self.current_token.type == expected_type:
- self.current_token = next(self.tokens)
- else:
- raise Exception(f"Unexpected token: {self.current_token.value}")