С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 26.06.2019
Сообщений: 9

Что означают данные строки в файле?

26.06.2019, 21:37. Показов 826. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Есть два файла, первый из которых:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# coding=utf8
 
from lexer import tokens
import ply.yacc as yacc
 
class Node:
    def parts_str(self):
        st = []
        for part in self.parts:
            st.append( str( part ) )
        return "\n".join(st)
 
    def __repr__(self):
        return self.type + ":\n\t" + self.parts_str().replace("\n", "\n\t")
 
    def add_parts(self, parts):
        self.parts += parts
        return self
 
    def __init__(self, type, parts):
        self.type = type
        self.parts = parts
 
def p_text(p):
    '''text :
           | START commands'''
    if len(p) == 1:
        p[0] = None
    else:
        p[0] = p[2]
 
def p_commands(p):
    '''commands :
               | commands lines'''
    if len(p) > 1:
        if p[1] is None:
            p[1] = Node('text', [])
        p[0] = p[1].add_parts([p[2]])
    else:
        p[0] = Node('text', [])
 
def p_lines(p):
    '''lines : assign
             | passign
             | dassign
             | mulassign
             | minassign
             | def
             | op_if
             | while
             | input
             | print'''
    p[0] = p[1]
 
def p_passign(p):
    '''passign : IDENT PASSIGN expr COLON'''
    p[0] = Node('assign', [p[1], Node('+', [p[1], p[3]])])
 
def p_dassign(p):
    '''dassign : IDENT DASSIGN expr COLON'''
    p[0] = Node('assign', [p[1], Node('/', [p[1], p[3]])])
 
def p_mulassign(p):
    '''mulassign : IDENT MULASSIGN expr COLON'''
    p[0] = Node('assign', [p[1], Node('*', [p[1], p[3]])])
 
def p_minassign(p):
    '''minassign : IDENT MINASSIGN expr COLON'''
    p[0] = Node('assign', [p[1], Node('-', [p[1], p[3]])])
 
def p_input(p):
    '''input : INPUT OPEN IDENT CLOSE COLON'''
    p[0] = Node('input', [p[3]])
 
def p_print(p):
    '''print : PRINT OPEN args CLOSE COLON'''
    p[0] = Node('print', [p[3]])
 
def p_args(p):
    '''args :
            | expr
            | args COMA expr'''
    if len(p) == 1:
        p[0] = Node('args', [])
    elif len(p) == 2:
        p[0] = Node('args', [p[1]])
    else:
        p[0] = p[1].add_parts([p[3]])
    
def p_def(p):
    '''def : DEF IDENT COLON
           | DEF assign'''
    if len(p) > 3:
        p[0] = Node('define', [p[2]])
    else:
        p[0] = Node('define', [p[2]])
 
def p_assign(p):
    '''assign : IDENT ASSIGN expr COLON'''
    p[0] = Node('assign', [p[1], p[3]])
 
def p_expr(p):
    '''expr : term
            | expr PLUSMINUS expr
            | expr DIVMUL expr'''
    if len(p) == 2:
        p[0] = p[1]
    else:
        p[0] = Node(p[2], [p[1], p[3]])
 
def p_compare(p):
    '''compare : arg COMPARE arg'''
    p[0] = Node(p[2], [p[1],p[3]])
 
def p_logic(p):
    '''logic : OPEN compare CLOSE LOGIC OPEN compare CLOSE
             | compare
             | expr'''
    if len(p) == 2:
        p[0] = p[1]
    else:
        p[0] = Node(p[4], [p[2],p[6]])
 
def p_op_if(p):
    '''op_if : IF OPEN logic CLOSE then else END COLON
             | IF OPEN logic CLOSE then END COLON'''
    if len(p) == 8:
        p[0] = Node('if', [p[3], p[5]]) 
    else:       
        p[0] = Node('if', [p[3], p[5], p[6]])
 
def p_while(p):
    '''while : WHILE OPEN logic CLOSE do END COLON'''
    p[0] = Node('while', [p[3], p[5]])
 
def p_do(p):
    '''do : DO
          | do lines'''
    if len(p) == 2:
        p[0] = Node('do', [])
    else:
        p[0] = p[1].add_parts([p[2]])
 
def p_then(p):
    '''then : THEN
            | then lines'''
    if len(p) == 2:
        p[0] = Node('then', [])
    else:
        p[0] = p[1].add_parts([p[2]])
 
def p_else(p):
    '''else : ELSE
            | else lines'''
    if len(p) == 2:
        p[0] = Node('else', [])
    else:
        p[0] = p[1].add_parts([p[2]])
 
def p_term(p):
    '''term : arg
            | OPEN expr CLOSE'''
    if len(p) == 2:
        p[0] = p[1]
    else:
        p[0] = p[2]
 
def p_arg(p):
    '''arg : NUM
       | IDENT'''
    p[0] = Node('arg', [p[1]])
 
def p_error(p):
    print ('Unexpected token:', p)
 
parser = yacc.yacc()
 
def build_tree(code):
    return (parser.parse(code))
Что в данном файле означает строка:
Python
1
p[0] = Node('input', [p[3]])
И второй файл:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# coding=utf8
import ply.lex as lex
from ply.lex import TOKEN
import re
 
# без этой штуки ничего не съинтерпретируется, потому что этот массив шарится между лексером и парсером и кроме того используется внутренне библиотекой
tokens = (
    'START', 'COMMENT', 'DEF', 'IDENT', 'COLON', 'NEWLINE', 'NUM', 'ASSIGN', 'OPEN', 'CLOSE', 'DIVMUL', 'PLUSMINUS', 'COMPARE', 'LOGIC', 
    'IF', 'THEN', 'ELSE', 'END', 'WHILE', 'DO', 'COMA', 'INPUT', 'PRINT', 'PASSIGN', 'MINASSIGN', 'DASSIGN', 'MULASSIGN'
)
 
# определим регулярку для абстрактного идетификатора
 
 
# для каждого токена из массива мы должны написать его определение вида t_ИМЯТОКЕНА = регулярка
t_START = r'[\$][_a-zA-Z0-9]\w*[\$]'
t_IF = r'if'
t_THEN = r'then'
t_ELSE = r'else'
t_END = r'end'
t_WHILE = r'while'
t_DEF = r'def'
t_DO = r'do'
t_INPUT = r'input'
t_PRINT = r'print'
t_ASSIGN = r'='
t_PASSIGN = r'(\+\=)'
t_MINASSIGN = r'(\-\=)'
t_DASSIGN = r'(/\=)'
t_MULASSIGN = r'(\*\=)'
t_NUM = r'[0-9]+([\.|\.]?[0-9]*)?([eE][\+\-]?[0-9]+)?'
t_COLON = r';'
t_COMA = r','
t_OPEN = r'\('
t_CLOSE = r'\)'
t_DIVMUL = r'\*|/'
t_PLUSMINUS = r'\+|\-'
t_COMPARE = r'(==)|(<=)|(>=)|(!=)|(>)|(<)'
t_LOGIC = r'(\|\|)|(\&\&)'
 
ident = r'[_a-zA-Z][_a-zA-Z0-9]*'
 
# игнорируем комментарии
def t_COMMENT(t):
    r'({*(.|\n)*?})'
    pass
 
@TOKEN(ident)
def t_IDENT(t):
   if t.value == 'def':
       t.type = 'DEF'
   elif t.value == 'if':
       t.type = 'IF'
   elif t.value == 'then':
       t.type = 'THEN'
   elif t.value == 'else':
       t.type = 'ELSE'
   elif t.value == 'end':
       t.type = 'END'
   elif t.value == 'while':
       t.type = 'WHILE'
   elif t.value == 'do':
       t.type = 'DO'
   elif t.value == 'print':
       t.type = 'PRINT'
   elif t.value == 'input':
       t.type = 'INPUT'
   else: t.type = 'IDENT'     
   return t
 
def t_NEWLINE(t):
    r'(\n)'
    pass
 
# здесь мы игнорируем незначащие символы
t_ignore = ' \r\t\f'
 
# а здесь мы обрабатываем ошибки. Кстати заметьте формат названия функции
def t_error(t):
    print ("Illegal character '%s'" % t.value[0])
    t.lexer.skip(1)
 
lexer = lex.lex(reflags=re.UNICODE | re.DOTALL | re.IGNORECASE)
 
if __name__=="__main__":
    data = ''' '''
 
    lexer.input(data)
 
    while True:
        tok = lexer.token() # читаем следующий токен
        if not tok: break      # закончились печеньки
        print (tok)
Что в данном файле означает строка:
Python
1
2
3
def t_NEWLINE(t):
    r'(\n)'
    pass

Пожалуйста, помогите разобраться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2019, 21:37
Ответы с готовыми решениями:

Что означают данные строки?
using stroka = basic_string&lt;char, char_traits&lt;char&gt;, allocator&lt;char&gt;&gt; stroka res; reverse_copy(cbegin(str), cend(str),...

Что означают данные строки one.Length = 10; one.Start = 1; one.End = 12;?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Vector { class Program ...

Что означают цифры в исходном файле?
Дана программа, для афинных преобразований на плоскости , данные берутся из файла(пример содержимого для куба будет ниже). Я не понимаю ,...

6
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.06.2019, 22:23
Цитата Сообщение от machineprogress Посмотреть сообщение
Что в данном файле означает строка:
p[0] = Node('input', [p[3]])
Node это класс, аргументы в скобках это параметры для конструирования экземпляра класса Node.
p[0] это передаваемый функциям список, куда по индексу 0 записывается экземпляр класса.

Цитата Сообщение от machineprogress Посмотреть сообщение
Что в данном файле означает строка:
NEWLINE(t):
* * r'(\n)'
* * pass
Эта функция не делает ничего полезного и ничего не возвращает. Пустышка.
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
26.06.2019, 23:57
machineprogress, это что у Вас за реликт?
Python
1
2
3
def t_NEWLINE(t):
    r'(\n)'
    pass
не пусиа, строку переводит, возможно.


Добавлено через 18 секунд
Garry Galler, присмотрелся, Ваша правда.
0
0 / 0 / 0
Регистрация: 26.06.2019
Сообщений: 9
27.06.2019, 00:21  [ТС]
Возможно вопрос покажется максимально глупым, но для чего тогда данная функция "нашла себе место" в данном файле, если она является пустышкой?
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
27.06.2019, 00:55
machineprogress, об этом следует спросить писавшего скрипты.
Пустой блок скрыт,но,нагрузки нет.
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
27.06.2019, 07:15
Как справедливо замечает комментарий в коде
Python
1
2
3
4
# игнорируем комментарии
def t_COMMENT(t):
    r'({*(.|\n)*?})'
    pass
функция существует, чтобы лексер пропускал (отбрасывал) комментарии.

Соответственно функция
Python
1
2
3
def t_NEWLINE(t):
    r'(\n)'
    pass
указывает, что новые строки должны быть отброшены - сразу читаем следующий токен.

Цитата из документации
When a function is used, the regular expression rule is specified in the function documentation string. The function always takes a single argument which is an instance of LexToken. This object has attributes of t.type which is the token type (as a string), t.value which is the lexeme (the actual text matched), t.lineno which is the current line number, and t.lexpos which is the position of the token relative to the beginning of the input text. By default, t.type is set to the name following the t_ prefix. The action function can modify the contents of the LexToken object as appropriate. However, when it is done, the resulting token should be returned. If no value is returned by the action function, the token is simply discarded and the next token read.
0
0 / 0 / 0
Регистрация: 26.06.2019
Сообщений: 9
27.06.2019, 17:45  [ТС]
а можете подсказать, что конкретно делает строка с Node?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2019, 17:45
Помогаю со студенческими работами здесь

Что означают данные
Здравствуйте. подскажите что могут означать данные следующего характера? DWORD poffsets::dw_m_lifestats() {...

Что означают данные процедуры???
Можете объяснить что делает программа построчно? (например: вводит переменную выводит строку Enter number of...

Что означают данные события?
2. Пусть на плоскость, на которой изображены два непересекающихся круга, бросается точка. Событие A – точка попадает в первый круг, событие...

Что означают данные процедуры???
Можете объяснить что делает программа построчно? (например: заполняет матрицу случайными числами) const Nmax=10; type ...

Что означают данные команды?
.286 .model small .stack 100h .data A db 0,0,1,2,0,3,4,0,0,5,6,7,0,8,9,0 s_A dw $-A .code ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru