RE/flex (or RE-flex) is a computer program that generates lexical analyzers also known as "scanners" or "lexers". Lexical analysis is the process of converting an input character stream into a sequence of tokens, a task known as lexical tokenization. == Overview == Most notable lexer generators used in practice, including Flex, Ragel, and RE/flex are based on deterministic finite automata (DFA) for efficient pattern matching, despite the theoretical possibility of an exponential increase in DFA size. In practice, lexer specifications typically use deterministic regular expressions, which makes substantial DFA blowup uncommon. RE/flex translates a POSIX-compliant lexer specification directly into a DFA using standard construction techniques described in the compiler literature, extending the techniques to handle lazy matching and indentation detection applicable to specific programming language tokenization tasks. Like Flex, RE/flex generates efficient DFA-based scanners, but it shares no code with Flex and is implemented as a complete rewrite in C++. In addition to its native DFA-based engine, RE/flex can also be combined with external regular expression libraries that are not DFA-based, such as the C++ standard library regex engine, PCRE, and boost.regex. This is achieved by systematically rewriting the set of lexer patterns into a form suitable for tokenization with the selected external library. RE/flex performs this rewriting automatically using translation rules that are specific to each supported regular expression library. A lexer specification defines a set of regular expression patterns { p i : i = 1 , … , n } {\displaystyle \{p_{i}:i=1,\ldots ,n\}} corresponding to different token classes, such as identifiers, keywords, literals, and operators. These patterns can be combined into a single regular expression R = ( p 1 ) ∣ ( p 2 ) ∣ … ∣ ( p n ) {\displaystyle R=(p_{1})\mid (p_{2})\mid \ldots \mid (p_{n})} . When applied to an input string, a regular expression engine repeatedly matches R {\displaystyle R} , returning the index i of the matched subpattern ( p i ) {\displaystyle (p_{i})} , thereby decomposing the input into a sequence of tokens. Example use cases include: Compiler construction, such as the use of RE/flex in the Tiger Compiler project within the EPITA compiler construction curriculum Compiler-compiler systems, including its use in Ox, an attribute-grammar–based compiling system Pattern matching and search tools, such as grep-like utilities, including the use of RE/flex in ugrep
Automated restaurant
An automated restaurant or robotic restaurant is a restaurant that uses robots to do tasks such as delivering food and drink to the tables or cooking the food. Restaurant automation means the use of a restaurant management system to automate some or occasionally all of the major operations of a restaurant establishment. More recently, restaurants are opening that have completely or partially automated their services. These may include: taking orders, preparing food, serving, and billing. A few fully automated restaurants operate without any human intervention whatsoever. Robots are designed to help and sometimes replace human labour (such as waiters and chefs). The automation of restaurants may also allow for the option for greater customization of an order. == History == === Vending machines === In the late 19th and early 20th century a number of restaurants served food solely through vending machines. These restaurants were called automats or, in Japan, shokkenki. Customers ordered their food directly through the machines. === Sushi conveyors === Yoshiaki Shiraishi is a Japanese innovator who is known for the creation of conveyor belt sushi. He had the idea following difficulty staffing his small sushi restaurant and managing the restaurant on his own. He was inspired seeing beer bottles on a conveyor belt in an Asahi brewery. Yoshiaki's restaurants are an early example of restaurant automation; they used a conveyor belt to distribute dishes around the restaurant, eliminating the need for waiters. This example of automation dates back to the Japanese economic miracle; the first of Yoshiaki's conveyor belt sushi restaurants was opened under the name Mawaru Genroku Sushi in 1958, in Osaka. === Partial automation === As of 2011, across Europe, McDonald's had already begun implementing 7,000 touch screen kiosks that could handle cashiering duties. From 2015 to 2020, Zume had an automated pizza parlor. Later companies would try to produce smaller, less ambitious devices, with one robotics company producing a machine that could automate the slowest and most repetitive parts of assembling a pizza, such as spreading pizza sauce or placing slices of pepperoni, while leaving other customizations to employees. In 2020, a restaurant in the Netherlands began trialling the use of a robot to serve guests. In September 2021, Karakuri's 'Semblr' food service robot served personalised lunches for the 4,000 employees of grocery technology solutions provider ocado Group's head offices in Hatfield, UK. 2,700 different combinations of dishes were on offer. Customers could specify in grams what hot and cold items, proteins, sauces and fresh toppings they wanted. In 2021, Columbia University School of Engineering and Applied Science engineers developed a method of cooking 3D printed chicken with software-controlled robotic lasers. The “Digital Food” team exposed raw 3D printed chicken structures to both blue and infrared light. They then assessed the cooking depth, colour development, moisture retention and flavour differences of the laser-cooked 3D printed samples in comparison to stove-cooked meat. In June 2022 a California nonprofit chain of residential communities, Front Porch, experimented with robots in dining rooms at two locations to supplement wait staff by carrying plated food and drink to tables, and removing dishes. 65% of residents found the robots helpful, with 51% saying they let the staff spend more quality time with diners. 51% of staff were "excited" and 58% said they enabled more quality time with diners. The chain has 19 senior living communities (and 35 affordable housing communities), so it has potential to expand robots to more dining rooms. It is shifting to memory care, which may affect plans. == Rationales == === Advantages === Efficiency: Automated restaurants can significantly enhance operational efficiency by minimizing human error and reducing service time. With automated ordering, payment, and food preparation systems, customers can enjoy faster service and reduced waiting times. Cost savings: By reducing the need for human staff, automated restaurants can potentially lower labor costs. This can be particularly beneficial in areas with high labor expenses, as it allows for better resource allocation and cost management. Consistency: Automation ensures consistency in food quality and presentation. With precise portion control and standardized cooking methods, customers can expect the same quality and taste in their meals every time they visit. Enhanced customer experience: Self-service kiosks and automated systems provide customers with control and convenience. They can customize their orders, browse through menu options, and pay seamlessly, creating a more interactive and satisfying dining experience. === Disadvantages === Lack of personal touch: Automated restaurants may lack the personal interaction and warmth that traditional restaurants provide. Some customers prefer the human touch, personalized recommendations, and the social aspect of dining out. Technical issues: Reliance on technology means that technical glitches and malfunctions can occur, resulting in service disruptions or delays. Maintenance and technical support become critical in ensuring smooth operations. Limited menu complexity: The automation process may be better suited for standardized menu items rather than complex or customized dishes. The ability to cater to unique dietary preferences or accommodate special requests may be limited. Employment implications: Automated restaurants may result in job losses for traditional restaurant staff, potentially impacting the local workforce. It is important to consider the social and economic implications of adopting such technology. == Locations == Automated restaurants have been opening in many countries. Examples include: Nala Restaurant in Naperville, Illinois Fritz's Railroad Restaurant in Kansas City, Kansas Výtopna, a Railway Restaurant using model trains: franchise of various restaurants and coffeehouses in the Czech Republic Bagger's Restaurant in Nuremberg, Germany FuA-Men Restaurant, a ramen restaurant located in Nagoya, Japan Fōster Nutrition in Buenos Aires, Argentina Dalu Robot Restaurant in Jinan, China Haohai Robot Restaurant in Harbin, China Robot Kitchen Restaurant in Hong Kong Robo-Chef restaurant in Tehran, Iran, started in 2017, is the first robotic and "waiterless" restaurant of the Middle East. MIT graduates opened Spyce Kitchens in downtown Boston, Massachusetts, in 2018 Foodom, under Country Garden Holdings, opened January 12, 2020, in Guangzhou, China Robot Chacha, the first robot restaurant of India, is planning to open in the capital city of New Delhi. Kura Revolving Sushi Bar, with a number of locations in the United States, uses a tablets at tables for ordering, a conveyor belt to deliver food, and robots to deliver drinks and condiments. Chipotle Mexican Grill is beginning to deploy the Hyphen Makeline, which assembles up to 350 bowls and salads automatically per hour, and Chippy, an automatic tortilla chip fryer made by Miso Robotics. Serious Dumplings in Boca Raton, Florida
Krohn–Rhodes theory
In mathematics and computer science, the Krohn–Rhodes theory (or algebraic automata theory) is an approach to the study of finite semigroups and automata that seeks to decompose them in terms of elementary components. These components correspond to finite aperiodic semigroups and finite simple groups that are combined in a feedback-free manner (called a "wreath product" or "cascade"). Krohn and Rhodes found a general decomposition for finite automata. The authors discovered and proved an unexpected major result in finite semigroup theory, revealing a deep connection between finite automata and semigroups. Decidability of Krohn-Rhodes complexity long motivated much work in semigroup theory. In June 2024, Stuart Margolis, John Rhodes, and Anne Schilling announced a proof that the complexity is decidable. == Definitions and description of the Krohn–Rhodes theorem == Let T {\displaystyle T} be a semigroup. A semigroup S {\displaystyle S} that is a homomorphic image of a subsemigroup of T {\displaystyle T} is said to be a divisor of T {\displaystyle T} . The Krohn–Rhodes theorem for finite semigroups states that every finite semigroup S {\displaystyle S} is a divisor of a finite alternating wreath product of finite simple groups, each a divisor of S {\displaystyle S} , and finite aperiodic semigroups (which contain no nontrivial subgroups). In the automata formulation, the Krohn–Rhodes theorem for finite automata states that given a finite automaton A {\displaystyle A} with states Q {\displaystyle Q} and input alphabet I {\displaystyle I} , output alphabet U {\displaystyle U} , then one can expand the states to Q ′ {\displaystyle Q'} such that the new automaton A ′ {\displaystyle A'} embeds into a cascade of "simple", irreducible automata: In particular, A {\displaystyle A} is emulated by a feed-forward cascade of (1) automata whose transformation semigroups are finite simple groups and (2) automata that are banks of flip-flops running in parallel. The new automaton A ′ {\displaystyle A'} has the same input and output symbols as A {\displaystyle A} . Here, both the states and inputs of the cascaded automata have a very special hierarchical coordinate form. Moreover, each simple group (prime) or non-group irreducible semigroup (subsemigroup of the flip-flop monoid) that divides the transformation semigroup of A {\displaystyle A} must divide the transformation semigroup of some component of the cascade, and only the primes that must occur as divisors of the components are those that divide A {\displaystyle A} 's transformation semigroup. == Group complexity == The Krohn–Rhodes complexity (also called group complexity or just complexity) of a finite semigroup S is the least number of groups in a wreath product of finite groups and finite aperiodic semigroups of which S is a divisor. All finite aperiodic semigroups have complexity 0, while non-trivial finite groups have complexity 1. In fact, there are semigroups of every non-negative integer complexity. For example, for any n greater than 1, the multiplicative semigroup of all (n+1) × (n+1) upper-triangular matrices over any fixed finite field has complexity n (Kambites, 2007). A major open problem in finite semigroup theory is the decidability of complexity: is there an algorithm that will compute the Krohn–Rhodes complexity of a finite semigroup, given its multiplication table? Upper bounds and ever more precise lower bounds on complexity have been obtained (see, e.g. Rhodes & Steinberg, 2009). Rhodes has conjectured that the problem is decidable. In June 2024, Stuart Margolis, John Rhodes, and Anne Schilling announced a proof in the affirmative of the conjecture, though as of 2025 the result has yet to be confirmed. == History and applications == At a conference in 1962, Kenneth Krohn and John Rhodes announced a method for decomposing a (deterministic) finite automaton into "simple" components that are themselves finite automata. This joint work, which has implications for philosophy, comprised both Krohn's doctoral thesis at Harvard University and Rhodes' doctoral thesis at MIT. Simpler proofs, and generalizations of the theorem to infinite structures, have been published since then (see Chapter 4 of Rhodes and Steinberg's 2009 book The q-Theory of Finite Semigroups for an overview). In the 1965 paper by Krohn and Rhodes, the proof of the theorem on the decomposition of finite automata (or, equivalently sequential machines) made extensive use of the algebraic semigroup structure. Later proofs contained major simplifications using finite wreath products of finite transformation semigroups. The theorem generalizes the Jordan–Hölder decomposition for finite groups (in which the primes are the finite simple groups), to all finite transformation semigroups (for which the primes are again the finite simple groups plus all subsemigroups of the "flip-flop" (see above)). Both the group and more general finite automata decomposition require expanding the state-set of the general, but allow for the same number of input symbols. In the general case, these are embedded in a larger structure with a hierarchical "coordinate system". One must be careful in understanding the notion of "prime" as Krohn and Rhodes explicitly refer to their theorem as a "prime decomposition theorem" for automata. The components in the decomposition, however, are not prime automata (with prime defined in a naïve way); rather, the notion of prime is more sophisticated and algebraic: the semigroups and groups associated to the constituent automata of the decomposition are prime (or irreducible) in a strict and natural algebraic sense with respect to the wreath product (Eilenberg, 1976). Also, unlike earlier decomposition theorems, the Krohn–Rhodes decompositions usually require expansion of the state-set, so that the expanded automaton covers (emulates) the one being decomposed. These facts have made the theorem difficult to understand and challenging to apply in a practical way—until recently, when computational implementations became available (Egri-Nagy & Nehaniv 2005, 2008). H.P. Zeiger (1967) proved an important variant called the holonomy decomposition (Eilenberg 1976). The holonomy method appears to be relatively efficient and has been implemented computationally by A. Egri-Nagy (Egri-Nagy & Nehaniv 2005). Meyer and Thompson (1969) give a version of Krohn–Rhodes decomposition for finite automata that is equivalent to the decomposition previously developed by Hartmanis and Stearns, but for useful decompositions, the notion of expanding the state-set of the original automaton is essential (for the non-permutation automata case). Many proofs and constructions now exist of Krohn–Rhodes decompositions (e.g., [Krohn, Rhodes & Tilson 1968], [Ésik 2000], [Diekert et al. 2012]), with the holonomy method the most popular and efficient in general (although not in all cases). [Zimmermann 2010] gives an elementary proof of the theorem. Owing to the close relation between monoids and categories, a version of the Krohn–Rhodes theorem is applicable to category theory. This observation and a proof of an analogous result were offered by Wells (1980). The Krohn–Rhodes theorem for semigroups/monoids is an analogue of the Jordan–Hölder theorem for finite groups (for semigroups/monoids rather than groups). As such, the theorem is a deep and important result in semigroup/monoid theory. The theorem was also surprising to many mathematicians and computer scientists since it had previously been widely believed that the semigroup/monoid axioms were too weak to admit a structure theorem of any strength, and prior work (Hartmanis & Stearns) was only able to show much more rigid and less general decomposition results for finite automata. Work by Egri-Nagy and Nehaniv (2005, 2008–) continues to further automate the holonomy version of the Krohn–Rhodes decomposition extended with the related decomposition for finite groups (so-called Frobenius–Lagrange coordinates) using the computer algebra system GAP. Applications outside of the semigroup and monoid theories are now computationally feasible. They include computations in biology and biochemical systems (e.g. Egri-Nagy & Nehaniv 2008), artificial intelligence, finite-state physics, psychology, and game theory (see, for example, Rhodes 2009).
How to Choose an AI Pair Programmer
In search of the best AI pair programmer? An AI pair programmer is software that uses machine learning to help you get more done — it turns a rough idea into a polished result in seconds. When choosing one, weigh output quality, pricing, export formats, and how well it fits the tools you already use. Whether you are a beginner or a pro, the right AI pair programmer slots into your workflow and pays for itself fast. We tested the leading options and ranked them by quality, value, and ease of use.
Is an AI Video Editor Worth It in 2026?
Shopping for the best AI video editor? An AI video editor is software that uses machine learning to help you get more done — it keeps getting smarter as the underlying models improve. Pricing, accuracy, and the size of the model behind the tool are the three factors that most affect daily usefulness. Whether you are a beginner or a pro, the right AI video editor slots into your workflow and pays for itself fast. We tested the leading options and ranked them by quality, value, and ease of use.
Immuni
Immuni was an open-source COVID-19 contact tracing app used for digital contact tracing in Italy, dismissed on 31 December 2022, after a long and debated criticism for having been a failure due to the lack of trust placed by citizens. Immuni COVID-19 contact-tracing app had in fact been downloaded only by 12% of Italians between 14 and 75 years old (the government had previously stated that, in order for the app to work properly, it should have been downloaded by at least 60% of Italians). It makes use of the Apple/Google Exposure Notification system. == Development == It was developed by Bending Spoons and released by the Italian Ministry of Health on 1 June 2020. After a testing phase in 4 Italian regions (Abruzzo, Apulia, Liguria, Marche), the app started being active in the whole country on 15 June 2020. The app was initially released on App Store and Google Play, and since 1 February 2021 it is available on the Huawei AppGallery as well. === Source code === The source code was published on GitHub on the 25 May. The app only works in Italy, but compatibility with other European contact tracing apps was a goal. Since 19 October 2020 the app supports key-exchanges with the EU Interoperability Gateway and is therefore able to communicate with contact tracing apps of other EU countries. == Shutdown == As of 16 December 2020, the app was downloaded more than 10 million times, a number which increased to 21.882.502 downloads the day before the app's shutdown. On 27 December 2022 the Italian Ministry of Health announced that the app and its infrastructures will be dismissed on the 31 December of the same year.
How to Choose an AI Humanizer
In search of the best AI humanizer? An AI humanizer is software that uses machine learning to help you get more done — it turns a rough idea into a polished result in seconds. When choosing one, weigh output quality, pricing, export formats, and how well it fits the tools you already use. Whether you are a beginner or a pro, the right AI humanizer slots into your workflow and pays for itself fast. We tested the leading options and ranked them by quality, value, and ease of use.