-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[ ]

, 07 2017 . 15:47 +


. - , , . ,

...


Lexer

! . : (CoffeScript).

a = true

if a
    console.log('Hello, lexer')

( ):

[IDENTIFIER:"a"]
[ASSIGN:"="]
[BOOLEAN:"true"]
[NEWLINE:"\n"]
[NEWLINE:"\n"]
[KEYWORD:"if"]
[IDENTIFIER:"a"]
[NEWLINE:"\n"]
[INDENT:"    "]
[IDENTIFIER:"console"]
[DOT:"."]
[IDENTIFIER:"log"]
[ROUND_BRAKET_START:"("]
[STRING:"'Hello, lexer'"]
[ROUND_BRAKET_END:")"]
[NEWLINE:"\n"]
[OUTDENT:""]
[EOF:"EOF"]

, .. , . :

def lexer(code):
    code = code.split(";") # 
    code = code[0:-1] # ..  ,    
    return parse(code, number=0) # ""   

( ϻ):

printf Test; exit;

(!):

["printf Test", "exit"]


, . , . , ! :

number = 0
if code[number].startswith("printf"):
    print(code[number][7:-0]
    number += 1

, , :

number = 0
if code[number].startswith("printf"):
    print(code[number][7:-1]
    number += 1

. , , 7- .

number = 0
if code[number].startswith("printf"):
    l = len(code[number])
    print(code[number][7:l]
    number += 1

, , . , .

if code[number][7] == " ":
    l = len(code[number])
    print(code[number][8:l]
else:
    l = len(code[number])
    print(code[number][7:l]

:| - . !


l = len(code[number]) #  
if code[number][6] == " ": #  6-   
    print(code[number][7:l]) #    7- 
else: # 
    print(code[number][8:l]) #

!

P.S.


  1. , .. .
  2. , .. .
  3. , 11 .
  4. .
  5. .

def parse(code, number=0):
    try:
        # Print function #
        if code[number].startswith("printf") or code[number].startswith(" printf"):
            # Get len
            l = len(code[number])
            # If text starts with space
            if code[number][6] == " ":
                print(code[number][7:l])
            # Else
            else:
                print(code[number][8:l])
            number += 1
            parse(code, number)

        # Input function #
        if code[number].startswith("input") or code[number].startswith(" input"):
            # Get len
            l = len(code[number])
            # If text starts with space
            if code[number][6] == " ":
                input(code[number][7:l])
            # Else
            else:
                input(code[number][8:l])
            number += 1
            parse(code, number)

        # Exit function #
        elif code[number].startswith("exit") or code[number].startswith(" exit"):
            input("\nPress \"Enter\" to exit.")
            exit()
        else:
            cl = len(code[number])
            command = code[number]
            command = command[1:cl]
            print("\n", "=" * 10)
            print("Error!")
            print("Undefined command " + '"' + command + '"' + ".")
            print("=" * 10)
            input("Press \"Enter\" to exit...")
            exit()
    except IndexError:
        input("\n[!] Press \"Enter\" to exit.")
        exit()


def lexer(code):
    code = code.split(";")
    code = code[0:-1]
    return parse(code, number=0)


code = input()
lexer(code)

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330430/

:  

: [1] []
 

:
: 

: ( )

:

  URL