首页 > 最新文献

SIGPLAN Conferences and Workshops最新文献

英文 中文
EPIC - a retargetable, highly optimizing Lisp compiler EPIC——一个可重定向的、高度优化的Lisp编译器
Pub Date : 1986-07-01 DOI: 10.1145/12276.13323
R. Kessler, John C. Peterson, H. Carr, Gerald P. Duggan, J. Knell, Jed J. Krohnfeldt
The Experimental Portable Standard Lisp Compiler (EPIC) is a compiler testbed for experimentation with, and development of, Lisp compilation strategies. EPIC uses an architectural description of the target machine to increase portability, and performs extensive optimizations in the form of source-to-source transformations, register allocation, and peephole optimization. It introduces machine-specific instructions early to enable machine-specific optimizations in the initial passes. EPIC produces better code than the original Portable Standard Lisp compiler, has an improved portability model, and is easier to maintain.
实验性可移植标准Lisp编译器(EPIC)是一个用于实验和开发Lisp编译策略的编译器测试平台。EPIC使用目标机器的体系结构描述来增加可移植性,并以源到源转换、寄存器分配和窥视孔优化的形式执行广泛的优化。它在早期引入特定于机器的指令,以便在初始阶段实现特定于机器的优化。EPIC生成的代码比原来的可移植标准Lisp编译器更好,具有改进的可移植性模型,并且更易于维护。
{"title":"EPIC - a retargetable, highly optimizing Lisp compiler","authors":"R. Kessler, John C. Peterson, H. Carr, Gerald P. Duggan, J. Knell, Jed J. Krohnfeldt","doi":"10.1145/12276.13323","DOIUrl":"https://doi.org/10.1145/12276.13323","url":null,"abstract":"The Experimental Portable Standard Lisp Compiler (EPIC) is a compiler testbed for experimentation with, and development of, Lisp compilation strategies. EPIC uses an architectural description of the target machine to increase portability, and performs extensive optimizations in the form of source-to-source transformations, register allocation, and peephole optimization. It introduces machine-specific instructions early to enable machine-specific optimizations in the initial passes. EPIC produces better code than the original Portable Standard Lisp compiler, has an improved portability model, and is easier to maintain.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"13 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128619721","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 14
Data flow analysis for `intractable' system software “棘手”系统软件的数据流分析
Pub Date : 1986-07-01 DOI: 10.1145/12276.13322
H. Johnson
We describe, and give experience with, a new method of intraprocedural data flow analysis on reducible flow-graphs[9]. The method is advantageous in imbedded applications where the added value of improved performance justifies substantial optimization effort, but extremely powerful data flow analysis is required due to the code profile.The method is unusual in that (1) various kinds of forward data flow analysis are done simultaneously, so that benefit is derived from informative interactions (e.g. between constant propagation[7] and alias analysis[8]) and (2) we abandon insistence on reaching a least fixed point, allowing us to handle extremely broad classes of information (e.g., inequality of array indices, which implies non-aliasing in array references).We argue that the gain from using a very rich framework more than offsets the loss due to non-minimal fixed points, and justify this with a 'thought experiment' and practical results.
我们描述了一种新的程序内数据流分析方法,并给出了经验[9]。该方法在嵌入式应用程序中是有利的,在嵌入式应用程序中,改进性能的附加价值证明了大量优化工作是合理的,但是由于代码概要,需要极其强大的数据流分析。该方法的不同寻常之处在于:(1)同时进行各种前向数据流分析,因此受益于信息交互(例如恒定传播[7]和别名分析[8]之间的交互);(2)我们放弃了对达到最小不动点的坚持,允许我们处理极其广泛的信息类别(例如,数组索引的不等式,这意味着数组引用中的非混叠)。我们认为,使用非常丰富的框架所获得的收益超过了非最小固定点所造成的损失,并通过“思想实验”和实际结果来证明这一点。
{"title":"Data flow analysis for `intractable' system software","authors":"H. Johnson","doi":"10.1145/12276.13322","DOIUrl":"https://doi.org/10.1145/12276.13322","url":null,"abstract":"We describe, and give experience with, a new method of intraprocedural data flow analysis on reducible flow-graphs[9]. The method is advantageous in imbedded applications where the added value of improved performance justifies substantial optimization effort, but extremely powerful data flow analysis is required due to the code profile.\u0000The method is unusual in that (1) various kinds of forward data flow analysis are done simultaneously, so that benefit is derived from informative interactions (e.g. between constant propagation[7] and alias analysis[8]) and (2) we abandon insistence on reaching a least fixed point, allowing us to handle extremely broad classes of information (e.g., inequality of array indices, which implies non-aliasing in array references).\u0000We argue that the gain from using a very rich framework more than offsets the loss due to non-minimal fixed points, and justify this with a 'thought experiment' and practical results.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130135660","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 10
Very fast LR parsing 非常快的LR解析
Pub Date : 1986-07-01 DOI: 10.1145/12276.13326
T. Pennello
LR parsers can be made to run 6 to 10 times as fast as the best table-interpretive LR parsers. The resulting parse time is negligible compared to the time required by the remainder of a typical compiler containing the parser.A parsing speed of 1/2 million lines per minute on a computer similar to a VAX 11/780 was achieved, up from an interpretive speed of 40,000 lines per minute. A speed of 240,000 lines per minute on an Intel 80286 was achieved, up from an interpretive speed of 37,000 lines per minute.The improvement is obtained by translating the parser's finite state control into assembly language. States become code memory addresses. The current input symbol resides in a register and a quick sequence of register-constant comparisons determines the next state, which is merely jumped to. The parser's push-down stack is implemented directly on a hardware stack. The stack contains code memory addresses rather than the traditional state numbers.The strongly-connected components of the directed graph induced by the parser's terminal and nonterminal transitions are examined to determine a typically small subset of the states that require parse-time stack-overflow-check code when hardware does not provide the check automatically.The increase in speed is at the expense of space: a factor of 2 to 4 increase in total table size can be expected, depending upon whether syntactic error recovery is required.
可以使LR解析器的运行速度比最好的表解释性LR解析器快6到10倍。与包含解析器的典型编译器的其余部分所需的时间相比,结果解析时间可以忽略不计。在类似于VAX 11/780的计算机上实现了每分钟50万行的解析速度,高于每分钟40,000行的解释速度。在Intel 80286上实现了每分钟24万行的速度,高于每分钟37,000行的解释速度。通过将解析器的有限状态控制转换成汇编语言实现了改进。状态成为代码存储器地址。当前输入符号驻留在寄存器中,寄存器常数比较的快速序列决定了下一个状态,这只是跳转到。解析器的下推堆栈直接在硬件堆栈上实现。堆栈包含代码内存地址,而不是传统的状态号。检查由解析器的终端和非终端转换引起的有向图的强连接组件,以确定在硬件不自动提供检查时需要解析时堆栈溢出检查代码的状态的一个典型的小子集。速度的提高是以牺牲空间为代价的:根据是否需要语法错误恢复,预计总表大小将增加2到4倍。
{"title":"Very fast LR parsing","authors":"T. Pennello","doi":"10.1145/12276.13326","DOIUrl":"https://doi.org/10.1145/12276.13326","url":null,"abstract":"LR parsers can be made to run 6 to 10 times as fast as the best table-interpretive LR parsers. The resulting parse time is negligible compared to the time required by the remainder of a typical compiler containing the parser.\u0000A parsing speed of 1/2 million lines per minute on a computer similar to a VAX 11/780 was achieved, up from an interpretive speed of 40,000 lines per minute. A speed of 240,000 lines per minute on an Intel 80286 was achieved, up from an interpretive speed of 37,000 lines per minute.\u0000The improvement is obtained by translating the parser's finite state control into assembly language. States become code memory addresses. The current input symbol resides in a register and a quick sequence of register-constant comparisons determines the next state, which is merely jumped to. The parser's push-down stack is implemented directly on a hardware stack. The stack contains code memory addresses rather than the traditional state numbers.\u0000The strongly-connected components of the directed graph induced by the parser's terminal and nonterminal transitions are examined to determine a typically small subset of the states that require parse-time stack-overflow-check code when hardware does not provide the check automatically.\u0000The increase in speed is at the expense of space: a factor of 2 to 4 increase in total table size can be expected, depending upon whether syntactic error recovery is required.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116138857","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 58
Compilation for a high-performance systolic array 编译高性能收缩数组
Pub Date : 1986-07-01 DOI: 10.1145/12276.13314
T. Gross, M. Lam
We report on a compiler for Warp, a high-performance systolic array developed at Carnegie Mellon. This compiler enhances the usefulness of Warp significantly and allows application programmers to code substantial algorithms.The compiler combines a novel programming model, which is based on a model of skewed computation for the array, with powerful optimization techniques. Programming in W2 (the language accepted by the compiler) is orders of magnitude easier than coding in microcode, the only alternative available previously.
我们报告了Warp的编译器,这是卡内基梅隆大学开发的一种高性能收缩阵列。这个编译器大大增强了Warp的有用性,并允许应用程序程序员编写大量算法。该编译器结合了一种新颖的编程模型,该模型基于数组的倾斜计算模型,并结合了强大的优化技术。用W2(编译器接受的语言)编程要比用微码(以前唯一可用的替代方法)编程简单几个数量级。
{"title":"Compilation for a high-performance systolic array","authors":"T. Gross, M. Lam","doi":"10.1145/12276.13314","DOIUrl":"https://doi.org/10.1145/12276.13314","url":null,"abstract":"We report on a compiler for Warp, a high-performance systolic array developed at Carnegie Mellon. This compiler enhances the usefulness of Warp significantly and allows application programmers to code substantial algorithms.\u0000The compiler combines a novel programming model, which is based on a model of skewed computation for the array, with powerful optimization techniques. Programming in W2 (the language accepted by the compiler) is orders of magnitude easier than coding in microcode, the only alternative available previously.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"30 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132177540","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 64
Register allocation in the SPUR Lisp compiler 在SPUR Lisp编译器中的寄存器分配
Pub Date : 1986-07-01 DOI: 10.1145/12276.13337
J. Larus, P. Hilfinger
Register allocation is an important component of most compilers, particularly those for RISC machines. The SPUR Lisp compiler uses a sophisticated, graph-coloring algorithm developed by Fredrick Chow [Chow84]. This paper describes the algorithm and the techniques used to implement it efficiently and evaluates its performance on several large programs. The allocator successfully assigned most temporaries and local variables to registers in a wide variety of functions. Its execution cost is moderate.
寄存器分配是大多数编译器的一个重要组成部分,特别是那些RISC机器。SPUR Lisp编译器使用了Fredrick Chow [Chow84]开发的一种复杂的图形着色算法。本文描述了该算法及其有效实现的技术,并在几个大型程序中对其性能进行了评估。分配器成功地将大多数临时变量和局部变量赋值到各种函数的寄存器中。其执行成本适中。
{"title":"Register allocation in the SPUR Lisp compiler","authors":"J. Larus, P. Hilfinger","doi":"10.1145/12276.13337","DOIUrl":"https://doi.org/10.1145/12276.13337","url":null,"abstract":"Register allocation is an important component of most compilers, particularly those for RISC machines. The SPUR Lisp compiler uses a sophisticated, graph-coloring algorithm developed by Fredrick Chow [Chow84]. This paper describes the algorithm and the techniques used to implement it efficiently and evaluates its performance on several large programs. The allocator successfully assigned most temporaries and local variables to registers in a wide variety of functions. Its execution cost is moderate.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"35 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122147103","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 56
Optimal chaining in expression trees 表达式树中的最优链
Pub Date : 1986-07-01 DOI: 10.1145/12276.13311
D. Bernstein, H. Boral, R. Pinter
Chaining is the ability to pipeline two or more vector instructions on Cray-1 like machines. We show how to optimally use this feature to compute (vector) expression trees, in the context of automatic code-generation. We present a linear-time scheduling algorithm for finding an optimal order of evaluation for a machine with a bounded number of registers.
链接是在类似Cray-1的机器上管道化两个或更多向量指令的能力。我们将展示如何在自动代码生成上下文中最佳地使用此特性来计算(向量)表达式树。我们提出了一种线性时间调度算法,用于寻找具有有限寄存器数的机器的最优求值顺序。
{"title":"Optimal chaining in expression trees","authors":"D. Bernstein, H. Boral, R. Pinter","doi":"10.1145/12276.13311","DOIUrl":"https://doi.org/10.1145/12276.13311","url":null,"abstract":"Chaining is the ability to pipeline two or more vector instructions on Cray-1 like machines. We show how to optimally use this feature to compute (vector) expression trees, in the context of automatic code-generation. We present a linear-time scheduling algorithm for finding an optimal order of evaluation for a machine with a bounded number of registers.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"44 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121635069","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 10
A retargetable instruction reorganizer 可重目标指令重组器
Pub Date : 1986-07-01 DOI: 10.1145/12276.13334
J. Davidson
Extant peephole optimizers can perform many optimizations that are handled by higher-level optimizers. This paper describes a retargetable instruction reorganizer that performs targeting and evaluation order determination by applying a well known algorithm for optimal code generation for expressions to object code. By applying the algorithm to object code after code generation and optimization, a phase ordering problem often encountered by higher-level optimizers is avoided. It minimizes the number of registers and temporaries required to compile expressions by rearranging machine instructions. For some machines, this can result in smaller and faster programs. By generalizing its operation, the reorganizer can also be used to reorder instructions to avoid delays in pipelined machines. For one pipelined machine, it has provided a 5 to 10 percent improvement in the execution speed of benchmark programs.
现有的窥视孔优化器可以执行许多由高级优化器处理的优化。本文描述了一种可重目标指令重组器,它通过应用一种众所周知的算法来对目标代码的表达式进行最优代码生成,从而执行目标和求值顺序的确定。通过在代码生成和优化后将算法应用于目标代码,避免了高级优化器经常遇到的阶段排序问题。它通过重新排列机器指令来最小化编译表达式所需的寄存器和临时寄存器的数量。对于某些机器,这可能导致更小更快的程序。通过推广其操作,重组器还可以用于重新排序指令,以避免流水线机器中的延迟。对于一台流水线机器,它提供了基准程序执行速度的5%到10%的改进。
{"title":"A retargetable instruction reorganizer","authors":"J. Davidson","doi":"10.1145/12276.13334","DOIUrl":"https://doi.org/10.1145/12276.13334","url":null,"abstract":"Extant peephole optimizers can perform many optimizations that are handled by higher-level optimizers. This paper describes a retargetable instruction reorganizer that performs targeting and evaluation order determination by applying a well known algorithm for optimal code generation for expressions to object code. By applying the algorithm to object code after code generation and optimization, a phase ordering problem often encountered by higher-level optimizers is avoided. It minimizes the number of registers and temporaries required to compile expressions by rearranging machine instructions. For some machines, this can result in smaller and faster programs. By generalizing its operation, the reorganizer can also be used to reorder instructions to avoid delays in pipelined machines. For one pipelined machine, it has provided a 5 to 10 percent improvement in the execution speed of benchmark programs.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"75 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128377776","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 26
Compile-time partitioning and scheduling of parallel programs 并行程序的编译时分区和调度
Pub Date : 1986-07-01 DOI: 10.1145/12276.13313
Vivek Sarkar, J. Hennessy
Partitioning and scheduling techniques are necessary to implement parallel languages on multiprocessors. Multiprocessor performance is maximized when parallelism between tasks is optimally traded off with communication and synchronization overhead. We present compile-time partitioning and scheduling techniques to achieve this trade-off.
在多处理器上实现并行语言需要分区和调度技术。当任务之间的并行性与通信和同步开销得到最佳平衡时,多处理器性能将得到最大化。我们提出了编译时分区和调度技术来实现这种折衷。
{"title":"Compile-time partitioning and scheduling of parallel programs","authors":"Vivek Sarkar, J. Hennessy","doi":"10.1145/12276.13313","DOIUrl":"https://doi.org/10.1145/12276.13313","url":null,"abstract":"Partitioning and scheduling techniques are necessary to implement parallel languages on multiprocessors. Multiprocessor performance is maximized when parallelism between tasks is optimally traded off with communication and synchronization overhead. We present compile-time partitioning and scheduling techniques to achieve this trade-off.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121257114","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 184
Efficient compilation of linear recursive functions into object level loops 有效地将线性递归函数编译成对象级循环
Pub Date : 1986-07-01 DOI: 10.1145/12276.13332
P. Harrison, H. Khoshnevisan
Whilst widely recognised as an excellent means for solving problems and for designing software, functional programming languages have suffered from their inefficient implementations on conventional computers. A route to improved runtime performance is to transform recursively defined functions into programs which execute more quickly and/or consume less space. We derive equivalent imperative programming language loops for a large class of linear recursive functions of which the tail-recursive functions form a very small subset. We first identify a small set of primitive function defining expressions for which we determine the corresponding loop-expressions. We then determine the loop-expressions for linear functions defined by any expressions which are formed from those primitives. In this way, a very general class of linear functions can be transformed automatically into loops in the parsing phase of a compiler, since the parser has in any case to determine the hierarchical structure of function definitions. Further transformation may involve specific properties of particular defining expressions, and adopt previous schemes. In addition, equivalent linear functions can be found for many non-linear ones which can therefore also be transformed into loops.
虽然函数式编程语言被广泛认为是解决问题和设计软件的一种优秀方法,但它们在传统计算机上的实现效率低下。改进运行时性能的一个途径是将递归定义的函数转换为执行速度更快和/或消耗更少空间的程序。对于一类线性递归函数,我们导出了等效的命令式编程语言循环,其中尾递归函数是一个很小的子集。首先确定一小组定义表达式的原语函数,并为其确定相应的循环表达式。然后,我们确定由这些原语组成的任何表达式定义的线性函数的循环表达式。通过这种方式,可以在编译器的解析阶段将非常一般的线性函数类自动转换为循环,因为解析器在任何情况下都必须确定函数定义的层次结构。进一步的转换可能涉及特定定义表达式的特定属性,并采用先前的模式。此外,对于许多非线性函数,可以找到等效的线性函数,因此也可以将其转化为回路。
{"title":"Efficient compilation of linear recursive functions into object level loops","authors":"P. Harrison, H. Khoshnevisan","doi":"10.1145/12276.13332","DOIUrl":"https://doi.org/10.1145/12276.13332","url":null,"abstract":"Whilst widely recognised as an excellent means for solving problems and for designing software, functional programming languages have suffered from their inefficient implementations on conventional computers. A route to improved runtime performance is to transform recursively defined functions into programs which execute more quickly and/or consume less space. We derive equivalent imperative programming language loops for a large class of linear recursive functions of which the tail-recursive functions form a very small subset. We first identify a small set of primitive function defining expressions for which we determine the corresponding loop-expressions. We then determine the loop-expressions for linear functions defined by any expressions which are formed from those primitives. In this way, a very general class of linear functions can be transformed automatically into loops in the parsing phase of a compiler, since the parser has in any case to determine the hierarchical structure of function definitions. Further transformation may involve specific properties of particular defining expressions, and adopt previous schemes. In addition, equivalent linear functions can be found for many non-linear ones which can therefore also be transformed into loops.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"114 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124375947","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 12
A practical arbitrary look-ahead LR parsing technique 一种实用的任意前瞻性LR解析技术
Pub Date : 1986-07-01 DOI: 10.1145/12276.13325
M. Bermudez, Karl M. Schimpf
We present a practical technique that provides an LR (0) parser with either fixed or arbitrary look-ahead. The construction algorithm is based on certain paths in the LR (0) state diagram, which must be restricted to a maximum length m. The technique determines the amount of look-ahead required, and the user is spared the task of guessing it. Instead, the user provides m. In situations where single symbol look-ahead is sufficient, the corresponding grammar class (called LAR (m )) is identical to the NQLALR (1) class. For practical grammars that require arbitrary look-ahead, the storage requirements typically do not exceed an amount linear in the size of the corresponding LR (0) parser. The technique is shown to work for a practical programming language grammar, and has been used to solve particular cases of the PL/1 keyword problem.
我们提出了一种实用的技术,它提供了一个具有固定或任意前瞻性的LR(0)解析器。构造算法基于LR(0)状态图中的某些路径,这些路径必须限制在最大长度m内。该技术确定了所需的前瞻性数量,并且用户无需猜测它。相反,用户提供m。在单符号前瞻性足够的情况下,相应的语法类(称为LAR (m))与NQLALR(1)类相同。对于需要任意提前查找的实用语法,存储需求通常不会超过相应LR(0)解析器大小的线性量。该技术适用于实际的编程语言语法,并已用于解决PL/1关键字问题的特定情况。
{"title":"A practical arbitrary look-ahead LR parsing technique","authors":"M. Bermudez, Karl M. Schimpf","doi":"10.1145/12276.13325","DOIUrl":"https://doi.org/10.1145/12276.13325","url":null,"abstract":"We present a practical technique that provides an <italic>LR</italic> (0) parser with either fixed or arbitrary look-ahead. The construction algorithm is based on certain paths in the <italic>LR</italic> (0) state diagram, which must be restricted to a maximum length <italic>m</italic>. The technique determines the amount of look-ahead required, and the user is spared the task of guessing it. Instead, the user provides <italic>m</italic>. In situations where single symbol look-ahead is sufficient, the corresponding grammar class (called <italic>LAR</italic> (<italic>m</italic> )) is identical to the <italic>NQLALR</italic> (1) class. For practical grammars that require arbitrary look-ahead, the storage requirements typically do not exceed an amount linear in the size of the corresponding <italic>LR</italic> (0) parser. The technique is shown to work for a practical programming language grammar, and has been used to solve particular cases of the PL/1 keyword problem.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"14 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1986-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122960402","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 15
期刊
SIGPLAN Conferences and Workshops
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1