почему мой парсер не напечатает строку на моем языке - PullRequest
0 голосов
/ 28 февраля 2019
class Lex:
    def run(args, string):
        if args == "print":
            print(str(string))
class Calin:
    string = ""
    running = ""
    def parse(args):
        lexic = Lex
        string = ""
        tok = ""
        state = 0
        for char in args:
            tok += char
            if tok == " ":
                if state == 0:
                    tok = ""
                elif state == 1:
                    tok = " "
            elif tok == "\"":
                if state == 0:
                    state = 1
                elif state == 1:
                    state = 0
            elif state == 1:
                string += char
            elif tok == "print":
                running = "print"
        lexic.run(running, string)

trans = Calin
trans.parse("print \"WOW A STRING\"")

1 Ответ

0 голосов
/ 28 февраля 2019

Потому что вы делаете state == 1 только тогда, когда tok == "\"", чего никогда не происходит (вы продолжаете добавлять str s к нему.).Изменение на char работает:

class Lex:
    def run(args, string):
        if args == "print":
            print(str(string))

class Calin:
    string = ""
    running = ""
    def parse(args):
        lexic = Lex
        string = ""
        tok = ""
        state = 0
        for char in args:
            tok += char
            if tok == " ":
                if state == 0:
                    tok = ""
                elif state == 1:
                    tok = " "
            elif char == "\"": # <<< Change this
                if state == 0:
                    state = 1
                elif state == 1:
                    state = 0
            elif state == 1:
                string += char
            elif tok == "print":
                running = "print"
        lexic.run(running, string)

trans = Calin
trans.parse("print \"WOW A STRING\"")
# WOW A STRING
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...