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

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

26.06.2019, 21:37. Показов 884. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru