首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LALR转换为LL

将LALR转换为LL
EN

Stack Overflow用户
提问于 2011-02-11 19:13:07
回答 1查看 564关注 0票数 2

我为SABLECC提供了以下LALR语法:

代码语言:javascript
复制
Package org.univpm.grail.sable;

Helpers
    digit = [ '0' .. '9' ];
    letter = [ [ 'a' .. 'z' ] + [ 'A' .. 'Z' ] ];
    any_character = [ 0 .. 0xfffff ] ;

States
    normal, complex;

Tokens
    newline = ( 13 | 10 | 13 10 ) ; 
    blank = 32+ ;
    dot = '.' ;
    comma = ',' ;
    element = 'v' | 'V' | 'e' | 'E' | 'all' | 'ALL' ;
    cop = '>' | '<' | '>=' | '<=' | 'like' | 'LIKE' | '==' | '!=' ;
    number = digit+ | digit+ '.' digit digit? ;
    l_par = '(' ;
    r_par = ')' ;
    logic_and = 'and' | 'AND' ;
    logic_or = 'or' | 'OR' ;
    logic_not = 'not' | 'NOT' ;
    id = ( 95 | letter ) ( letter | digit )+ ;
    line_comment = '/' '/' [ any_character - [ 10 + 13 ] ]* ( 13 | 10 | 10 13 ) ;
    string = '"' letter* '"' ;

Ignored Tokens
    blank;

Productions
    phrase =
        {instruction} instr |
        {complex_instruction} instr newline+ phrase? ;

    instr = command query ;

    command =
        {identifier} id |
        {complex_identifier} id l_par parlist r_par ;

    parlist = 
        {complex_parlist} par comma parlist |
        {simple_parlist} par ;

    par = 
        {numero} number | 
        {stringa} string |
        {idpar} id ;

    query = 
        {query_or} query logic_or term | 
        {query_term} term ;

    term =
        {term_and} term logic_and factor |
        {term_factor} factor ;

    factor = 
        {atop} attroperator |
        {query_not} logic_not attroperator |
        {query_par} l_par query r_par ;

    attroperator =
        {simple_element} element |
        {complex_element} element dot id cop par ;

我试图将其转换为使用ANTLR (LL解析器生成器)的XText。我很难转换这两个左递归规则:

代码语言:javascript
复制
query = 
    {query_or} query logic_or term | 
    {query_term} term ;

term =
    {term_and} term logic_and factor |
    {term_factor} factor ;

我怎么发动汽车呢?我认为我应该优先考虑运算符,但现在我不能仅仅用一个LL的方式思考。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-25 20:07:18

嗯,我终于用这个指南做到了:

http://javadude.com/articles/lalrtoll.html

我不得不求解左递归

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4973053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档