Algoritmo shunting yard

El algoritmo shunting yard es un método para analizar (parsing) las ecuaciones matemáticas especificadas en la notación de infijo. Puede ser utilizado para producir la salida en la notación polaca inversa (RPN) o como árbol de sintaxis abstracta (AST). El algoritmo fue inventado por Edsger Dijkstra y nombró como algoritmo "shunting yard" (patio de clasificación) porque su operación se asemeja al de un patio de clasificación del ferrocarril.

Como la evaluación del RPN, el algoritmo shunting yard está basado en el stack. Las expresiones de infijo son la forma de matemáticas a la que la mayoría de la gente está acostumbrada, por ejemplo 3+4 ó 3+4*(2-1). Para la conversión hay dos variables de texto (strings), la entrada y la salida. Hay también un stack que guarda los operadores que todavía no se han añadido a la cola de salida. Para hacer la conversión, el programa lee cada símbolo en orden y hace algo basado en ese símbolo.

Una conversión sencilla

Ilustración gráfica del algoritmo usando un cruce de ferrocarril de tres vías. La entrada es procesada un símbolo a la vez, si es encontrada una variable o un número, es directamente copiado a la salida b), d), f), h). Si el símbolo es un operador, es colocado en el stack (push) c), e), sin embargo, si su precedencia es menor que la del operador en el tope del stack o las precedencias son iguales y el operador es asociativo por la izquierda, entonces aquel operador es sacado del stack (pop) y añadido a la salida g). Finalmente, los operadores restantes son sacados del stack (pop) y agregados a la salida.

Entrada: 3+4

  1. Agregue 3 a la cola de salida (siempre que un número es leído es agregado a la salida)
  2. Empuje (push) el operador + (o su ID) sobre el stack de operadores
  3. Agregue 4 a la cola de salida
  4. Después de terminar de leer la expresión, retire (pop) todos los operadores que se encuentren en el stack y agréguelos a la salida (en este caso solo hay uno, "+")

Salida: 3 4 +

Esto muestra ya un par de reglas:

  • Todos los números son agregados a la salida al momento en que son leídos.
  • Al final de la lectura de la expresión, se retira del stack (pop) a todos los operadores que hubieran y se ponen en la cola de salida.

El algoritmo en detalle

  • Mientras haya tokens a ser leídos:
  • Lea un token.
  • Si el token es un número, entonces agregúelo a la cola de salida.
  • Si el token es un token de función, entonces póngalo (push) sobre la pila.
  • Si el token es un separador de un argumento de función (ej., una coma):
  • Hasta que el token en el tope de la pila sea un paréntesis abierto, retire (pop) de la pila a los operadores y póngalos en la cola de salida. Si no es encontrado ningún paréntesis abierto, el separador fue colocado mal o los paréntesis fueron mal emparejados.
  • Si el token es un operador, o1, entonces:
  • mientras que haya un operador, o2, en el tope de la pila (esto excluye el paréntesis abierto), y
o1 es asociativo izquierdo y su precedencia es menor que (una precedencia más baja) o igual a la de o2, ó
o1 es asociativo derecho y su precedencia es menor que (una precedencia más baja) que la de o2,
retire (pop) de la pila el o2, y póngalo en la cola de salida;
  • ponga (push) o1 en el tope de la pila.
  • Si el token es un paréntesis abierto, entonces póngalo en la pila.
  • Si el token es un paréntesis derecho:
  • Hasta que el token en el tope de la pila sea un paréntesis abierto, retire (pop) a los operadores de la pila y colóquelos en la cola de salida.
  • Retire (pop) el paréntesis abierto de la pila, pero no lo ponga en la cola de salida.
  • Si el token en el tope de la pila es un token de función, póngalo (pop) en la cola de salida.
  • Si la pila se termina sin encontrar un paréntesis abierto, entonces hay paréntesis sin pareja.
  • Cuando no hay más tokens para leer:
  • Mientras todavía haya tokens de operadores en la pila:
  • Si el token del operador en el tope de la pila es un paréntesis, entonces hay paréntesis sin la pareja correspondiente.
  • retire (pop) al operador y póngalo en la cola de salida.
  • Fin.

Para analizar la complejidad de tiempo de ejecución de este algoritmo, uno solo tiene que notar que cada token será leído solo una vez, cada número, función, u operador será impreso solo una vez, y cada función, operador o paréntesis será puesto (push) en la pila y retirado (pop) de la pila solo una sola vez - por lo tanto, hay a lo sumo un número constante de operaciones ejecutadas por token, y el tiempo de ejecución es así O(n) - lineal al tamaño de la entrada.

Ejemplo detallado

Entrada: 3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
Operador Precedencia Asociatividad
^ 4 de derecha a izquierda
* 3 de izquierda a derecha
/ 3 de izquierda a derecha
+ 2 de izquierda a derecha
- 2 de izquierda a derecha
Entrada: 3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
Token Acción Salida (en RPN) Stack de operadores Notas
3 agrega token a la salida 3
+ Push token al stack 3 +
4 agrega token a la salida 3 4 +
* Push token al stack 3 4 * + * tiene mayor precedencia que +
2 agrega token a la salida 3 4 2 * +
/ Pop stack a la salida 3 4 2 * + / y * tienen la misma precedencia
Push token al stack 3 4 2 * / + / tiene mayor precedencia que +
( Push token al stack 3 4 2 * ( / +
1 agrega token a la salida 3 4 2 * 1 ( / +
- Push token al stack 3 4 2 * 1 - ( / +
5 agrega token a la salida 3 4 2 * 1 5 - ( / +
) Pop stack a la salida 3 4 2 * 1 5 - ( / + Repite hasta que sea encontrado "("
Pop stack 3 4 2 * 1 5 - / + Descarta paréntesis emparejados
^ Push token al stack 3 4 2 * 1 5 - ^ / + ^ tiene mayor precedencia que /
2 agrega token a la salida 3 4 2 * 1 5 - 2 ^ / +
^ Push token al stack 3 4 2 * 1 5 - 2 ^ ^ / + ^ es evaluado de derecha a izquierda
3 agrega token a la salida 3 4 2 * 1 5 - 2 3 ^ ^ / +
end Pop todo el stack a la salida 3 4 2 * 1 5 - 2 3 ^ ^ / +

Si usted estuviera escribiendo un intérprete, esta salida sería tokenizada y escrita a un archivo compilado para ser interpretado posteriormente. La conversión de infijo a RPN puede también permitir una más fácil simplificación de expresiones. Para hacer esto, actúe como si usted estuviera resolviendo la expresión de RPN, sin embargo, siempre que usted llegue a una variable su valor es nulo, y siempre que un operador tenga un valor nulo, él y sus parámetros son escritos a la salida (esto es una simplificación, los problemas se presentan cuando los parámetros son operadores). Cuando un operador no tiene ningún parámetro nulo su valor simplemente puede ser escrito a la salida. Este método no incluye todas las simplificaciones posibles; es más una optimización de plegamiento de constante.

Véase también

Enlaces externos


Read other articles:

Artikel ini memberikan informasi dasar tentang topik kesehatan. Informasi dalam artikel ini hanya boleh digunakan hanya untuk penjelasan ilmiah, bukan untuk diagnosis diri dan tidak dapat menggantikan diagnosis medis. Perhatian: Informasi dalam artikel ini bukanlah resep atau nasihat medis. Wikipedia tidak memberikan konsultasi medis. Jika Anda perlu bantuan atau hendak berobat, berkonsultasilah dengan tenaga kesehatan profesional. Batuk darahBronkitis yang menyebabkan batuk darah pada umumny...

 

Сейфеддин Хамид-бейтур. Seyfeddin Hamîd Bey бей Хамидогуллары 1291 — не позднее 1313/14 года Преемник Ильяс Смерть не позднее 1313/14 года Отец Эбуль-Касым Дети Ильяс Сейфеддин Хамид-бей (тур. Seyfeddin Hamîd Bey; ум. не позднее 1313/14 года) — основатель династии Хамидогуллары, которая в 1291—1391 годах п

 

Sporting event delegationNicaragua at the2020 Summer OlympicsIOC codeNCANOCComité Olímpico Nicaragüensein Tokyo, JapanJuly 23, 2021 (2021-07-23) – August 8, 2021 (2021-08-08)Competitors8 in 6 sportsFlag bearers (opening)Sema LudrickEdwin BarberenaFlag bearer (closing)N/AMedals Gold 0 Silver 0 Bronze 0 Total 0 Summer Olympics appearances (overview)196819721976198019841988199219962000200420082012201620202024 Nicaragua competed at the 2020 Summer...

Symbols of the honorary title of Hero City of Ukraine: a hero ribbon and a bar for city flag. Honorary title for cities in Ukraine OdesaSevastopolKyivKerchVolnovakhaHostomelMariupolKharkivKhersonChernihivBuchaIrpinOkhtyrkaMykolaivclass=notpageimage| Hero Cities of Ukraine. Italics indicate Hero Cities declared as such by the Soviet Union. Hero City of Ukraine (Ukrainian: Місто-герой України, romanized: Misto-heroi Ukrainy) is a Ukrainian honorary title awarded for outsta...

 

ATO — — — Die Niederländischen Antillen nahmen an den Olympischen Sommerspielen 1960 in der italienischen Hauptstadt Rom mit einer Delegation von fünf männlichen Sportlern teil. Teilnehmer nach Sportarten Gewichtheben Hector Curiel Bantamgewicht: 11. Platz Rudy Monk Leichtgewicht: DNF Ramiro Fermin Halbschwergewicht: 13. Platz José Flores Halbschwergewicht: 14. Platz Bèto Adriana Schwergewicht: DNF Weblinks Olympiamannschaft der Niederländischen Antillen von 1960 in der Datenbank ...

 

RinduAlbum studio karya Hetty Koes EndangDirilis1984Direkam-GenrePopDurasi?LabelMusica StudiosProduserSenjaya WijayaKronologi Hetty Koes Endang Sayang (1983)'Sayang'1983 Rindu (1984) Demi Cinta Ni.. Ye.. (1985)'Demi Cinta Ni.. Ye..'1985 Rindu adalah Album dari penyanyi Hetty Koes Endang yang dirilis pada tahun 1984 dengan label Musica Studios. Hetty mengambil jalur musik rock dalam album ini dengan Ian Antono sebagai penata musik. Lagu Rindu menjadi hits dalam album ini. Daftar lagu RINDU...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Spanish uniforms of the Napoleonic Wars – news · newspapers · books · scholar · JSTOR (July 2022) (Learn how and when to remove this template message) This article needs additional or more specific images. Please help out by adding images to it so that it can b...

 

A major contributor to this article appears to have a close connection with its subject. It may require cleanup to comply with Wikipedia's content policies, particularly neutral point of view. Please discuss further on the talk page. (July 2015) (Learn how and when to remove this template message) Pakistani TV series or programme Sarkar SahabLogoAlso known asEvicted LordGenre Drama Romance Written bySeema GhazalDirected by Kamran Qureshi Iram Qureshi Starring Asif Raza Mir Imran Abbas Ni...

 

Mersin StadyumuFormer namesMersin Olympic StadiumLocationYenişehir, Mersin, TurkeyExecutive suites24Capacity25,497[1]ConstructionBroke ground1 February 2012Opened20 June 2013 (Mediterranean Games)23 March 2014 (Mersin Idman Yurdu)Construction cost100 Million EuroTenantsMersin İdman Yurdu (2014–2019)2013 Mediterranean Games The Mersin Stadium, is a multi-purpose stadium in Mersin, Turkey. Completed in 2013, it was the new home ground for Mersin İdman Yurdu, replacing the old Tevfi...

Sporting event delegationItaly at theSummer UniversiadeIOC codeITANational federationCentro Universitario Sportivo ItalianoMedalsRanked 6th Gold 211 Silver 226 Bronze 279 Total 716 Summer Universiade appearances (overview)1959196119631965196719701973197519771979198119831985198719891991199319951997199920012003200520072009201120132015201720192021 Italy has participated in all editions of the Summer Universiade held since the first edition of 1959 Summer Universiade.[1] Medal count Italy...

 

Будинок профспілок України 50°27′02″ пн. ш. 30°31′28″ сх. д. / 50.450833330027776924° пн. ш. 30.52447222002777849° сх. д. / 50.450833330027776924; 30.52447222002777849Координати: 50°27′02″ пн. ш. 30°31′28″ сх. д. / 50.450833330027776924° пн. ш. 30.52447222002777849° сх. д. / 50.45083333...

 

English actor Michael Colesin Randall and Hopkirk (Deceased) ep.: For the Girl Who Has Everything (1969)BornErnest Michael Coles(1936-08-12)12 August 1936Willesden, London, England[1]Died26 April 2005(2005-04-26) (aged 68)Chelsea, London, EnglandOccupationActorSpouse Maryon Kantaroff ​ ​(m. 1962; div. 1966)​ Ernest Michael Coles (12 August 1936 – 26 April 2005) was an English actor.[2] He appeared in a number British telev...

2021 single by Shawn Mendes and Tainy Summer of LoveSingle by Shawn Mendes and TainyReleasedAugust 20, 2021Genre Pop Length3:04LabelIslandSongwriter(s) Shawn Mendes Marco Masís Alejandro Borrero Ivanni Rodríguez Ido Zmishlany Scott Harris Sarah Solovay Gregory Hein Randy Class Andrew Jackson Producer(s) Tainy Neon16 Zmishlany (co.) Shawn Mendes singles chronology Kesi (Remix) (2021) Summer of Love (2021) It'll Be Okay (2021) Tainy singles chronology Una Más(2021) Summer of Love(202...

 

Theology journal Catholic Biblical QuarterlyEditorLeslie J. Hoppe, O.F.M.CategoriesTheology, Old Testament, New TestamentFrequencyQuarterlyPublisherCatholic Biblical Association of AmericaFirst issue1939CountryUnited StatesLanguageEnglishWebsiteCBQISSN0008-7912 The Catholic Biblical Quarterly is a refereed peer-reviewed theology journal published by the Catholic Biblical Association of America (CBA)[1] (CBA) in January, April, July, and October.[2] It was established in 1939&#...

 

American middle-distance runner Raymond Bates Ray Buker, Sr.Born(1899-08-27)August 27, 1899Foster, Rhode Island, USDiedJune 3, 1992(1992-06-03) (aged 92)Boca Raton, Florida, USAlma materBates College[1]OrganizationIllinois Athletic Club[1]Height167 cm (5 ft 6 in)[1] Raymond Ray Bates Buker, Sr. (August 27, 1899 – June 3, 1992) was an American track and field athlete who competed in the 1924 Summer Olympics. He was born in Foster, Rhode Is...

Samsung product This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article contains content that is written like an advertisement. Please help improve it by removing promotional content and inappropriate external links, and by adding encyclopedic content written from a neutral point of view. (May 2023) (Learn how and when to remove this template message) This article is an orphan, as no...

 

Lybje Flagge Wapen Offisjele taal Arabysk Haadstêd Tripoly Steatsfoarm republyk Gebiet% wetter 1.759.540 km² -­% Ynwenners (2006) 5.670.688 Munt Libyske dinar (LYD) Tiidsône UTC +2 Nasjonale feestdei 1 septimber Lânkoade LBY Ynternet .ly Tillefoan 218 Lybje, folút: Libyske Republyk, (Arabysk: ليبيا‎ Lībiyyā) is in Arabysk lân yn Noard-Afrika. Geografy Lybje bestiet út trije histoaryske regio's: Tripolitaanje yn it noardwesten, de Fezzan yn it súdwesten en Syrenaika yn i...

 

中国广播艺术团是中华人民共和国国家级大型综合文艺表演团体,为国家新闻出版广电总局直属事业单位。其前身为1953年创立的中国广播艺术团和1949年创立的中国电影乐团,2003年11月26日合併重组为中国广播艺术团。现總部位于北京市复兴门外大街2号。[1][2] 中国广播艺术团标志 组成 12个管理部门(正处级机构) 五个分团:中国广播民族乐团、中国电影交响乐...

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (مارس 2016) قمة مجموعة العشرين 2009 الثانية   الدولة المملكة المتحدة  تاريخ الانعقاد 2009  مكان الانعقاد لندن  قم...

 

Iván Bodiul Primer Secretario del Partido Comunista de la RSS de Moldavia 28 de mayo de 1961-30 de diciembre de 1980Predecesor Zinovy SerdyukSucesor Semión Grossu Vicepresidente del Consejo de Ministros de la Unión Soviética 19 de diciembre de 1980-30 de mayo de 1985Predecesor Nikolái TíjonovSucesor Boris Shcherbina Información personalNacimiento 21 de diciembre de 1917jul. Oleksandrivka (República Popular Ucraniana) Fallecimiento 27 de enero de 2013 Moscú (Rusia) Sepultura Cementeri...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!