Форум сайта python.su
ах да и ещё если посмотреть в мой код например сюда
for simv in n:
for chya in ch:
for operator in operators:
Офлайн
>>> n = 1
>>> if n in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print('счастье и радость!')
счастье и радость!
Офлайн
О госоди, я написал маленькую Часть кода, И в нём ошибка, я не могу найти какая!!
Помогите
n= "(((!x)>x)_((!y)=(!x)))" # Юзер задал какуюто функцию
ch=["x","y"] # программа должна определить переменные (я ещё не придумал функциии но помойму это не сложно)
operatorsNO = [">","<","=","_","&"] # я задал операторы включаа яоператор НЕТ
operators = [">","<","=","_"] # я задал опрераторы без оператора НЕТ
# мне надо сделать так чтоб после переменной небыло открывающейся скобки, другой переменой или оператора НЕ,
# ещё нужно чтобы перед переменной небыло закрывающейся скобки или другой переменной
# НУ И 3 это чтоб если до переменной стоит оператор, то после неё опрератора быть уже не может
# ну и наоборот, если после переменной стоит опрератор то до переменной оператора быть не может
for simv in n:
for chya in ch:
for operator in operators: # таким способом будут состыковыватся все виды символов
for operatorNO in operatorsNO:
if simv == chya: # я нашел переменную в строке
t=0
while t<len(n):
if n[t]==simv:
q=t
break # я определил номер переменной в строке
t=t+1
if n[q+1]== "(" or n[q+1]=="&": # после переменной небыло открывающейся скобки или оператора НЕ,
tf = False
if n[q-1]==")": # перед переменной небыло закрывающейся скобки
tf = False
if n[q+1]==operator: # если после переменной стоит опрератор то до переменной оператора быть не может
if n[q-1]==operatorNO:
tf = False
if n[q-1]==operator: # если до переменной стоит оператор, то после неё опрератора быть уже не может
if n[q+1]==operatorNO:
tf = False
Офлайн
Ой да я введь забыл написать его выполнение
>>>n = "(((!x)>x_)_((!y)=(!x)))" # тут ошибка в этом месте >x_ , если до переменой стоит оператор, то после неё уже не может,и наоборот.
tf = True
>>> for simv in n:
for chya in ch:
for operator in operators:
for operatorNO in operatorsNO:
if simv == chya:
t=0
while t<len(n):
if n[t]==simv:
q=t
break
t=t+1
if n[q+1]== "(" or n[q+1]=="&":
tf = False
if n[q-1]==")":
tf = False
if n[q+1]==operator:
if n[q-1]==operatorNO:
tf = False
if n[q-1]==operator:
if n[q+1]==operatorNO:
tf = False
>>> tf
True
Офлайн
Все равно, от грамматического разбора в том или ином виде не уйти. Даже если вы студент. Представьте что то что у вас есть - это некий входной язык с определенным синтаксисом. Остается разобрать на отдельные операторы и применить их. Если не хочется идти таким путем, можно попробовать заточить язык перегрузив операторы. Такое можно проделать, например, на C++.
Офлайн
Эммм….
Ок не не пытаюсь уйти от каких либо трудностей,
только я не знаю C++ , я знаю только немного Азы Питона, а за неделю c++ мнене выучить,
к тому же есть ещё много работы помимо этой.
Так как ведь вроде этим я и занимаюсь, я делаю граматический разбор.
только как я понимаю индусским методом.
Скажте как сделать по другому?
Офлайн
http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C
Ctrl-F “Преобразование из инфиксной нотации”
Отредактировано (Март 27, 2010 23:19:25)
Офлайн
Alex_KutsanВ другой теме я уже давал ссылку на пример с PLY. Если это не нравится, можно попробовать описать это самому. В начале описать требуемую грамматику в виде то го же БНФ. Потом выделить лексические конструкции. На их базе написать собственно разборщик. На Питоне это пищется легче, так как можно смело использовать рекурсию и готовые элементы типа списка или словаря для хранения промежуточных результатов.
Эммм….
Ок не не пытаюсь уйти от каких либо трудностей,
только я не знаю C++ , я знаю только немного Азы Питона, а за неделю c++ мнене выучить,
к тому же есть ещё много работы помимо этой.
Так как ведь вроде этим я и занимаюсь, я делаю граматический разбор.
только как я понимаю индусским методом.
Скажте как сделать по другому?
Офлайн