标签: yacc

yylval和union

yacc文件中union的目的是什么?它是否与flex文件中的yylval直接相关?如果你不使用yylval,那么你不需要使用union?

parsing yacc bison lexical-analysis

17
推荐指数
2
解决办法
3万
查看次数

lex和yacc之间有什么区别

每当发现一些正则表达式时,我都使用lex来执行一些代码,Yacc可以做更多的事吗?如果是,那又怎样?

yacc lex

16
推荐指数
4
解决办法
4万
查看次数

解析器和扫描器之间有什么区别?

我已经制作了扫描仪,现在我应该做一个解析器.有什么不同?

parsing yacc lexical-analysis

15
推荐指数
2
解决办法
2万
查看次数

LALR vs LL解析器

我一直在使用lex/yacc,现在我正在尝试切换到ANTLR.主要关注的是ANTLR是一个LL(*)解析器,与yacc不同,它是LALR.我习惯于自下而上思考,我不知道LL语法的优点是什么.人们说LL语法现在更容易理解,更受欢迎.但似乎LR解析器更强大,例如LL解析器无法处理左递归,尽管似乎有一些解决方法.

那么问题是LL语法比LALR有什么优势?如果有人能给我一些例子,我会很感激.有用文章的链接也很棒.

感谢您的帮助!

(我认为这是一个很好的资源:LL解析器对LR解析器有什么优势?但是对于一些例子它会更好.)

parsing yacc antlr lalr ll-grammar

15
推荐指数
2
解决办法
7270
查看次数

Lex带有单引号,双引号或三引号

我的目标是像Python一样解析字符串.

问题:如何编写lex以支持以下内容:

  1. "string..."
  2. 'string...'
  3. """multi line string \n \n end"""
  4. '''multi line string \n \n end'''

一些代码:

states = (
        ('string', 'exclusive'),
        )

# Strings
def t_begin_string(self, t):
    r'(\'|(\'{3})|\"|(\"{3}))'
    t.lexer.push_state('string')

def t_string_end(self, t):
    r'(\'|(\'{3})|\"|(\"{3}))'
    t.lexer.pop_state()

def t_string_newline(self, t):
    r'\n'
    t.lexer.lineno += 1

def t_string_error(self, t):
    print("Illegal character in string '%s'" % t.value[0])
    t.lexer.skip(1)


我目前的想法是创建4个独特的状态,将匹配4个不​​同的字符串案例,但我想知道是否有更好的方法.

谢谢你的帮助!

python yacc ply lexer

14
推荐指数
1
解决办法
1602
查看次数

如何使YY_INPUT指向Lex&Yacc(Solaris)中的字符串而不是stdin

我希望我yylex()解析一个字符串而不是文件或标准输入.如何使用Solaris提供的Lex和Yacc?

c yacc solaris lex

13
推荐指数
2
解决办法
1万
查看次数

用于JavaScript的Yacc/Jay语法文件?

可能重复:
我在哪里可以找到ECMAscript/Actionscript/Javascript的yacc gammar

我正在尝试为Yacc找到JavaScript的语法文件(最好是Jay,但是因为Jay是Yacc克隆我应该没问题,因为我需要在.NET上实现它).

.net javascript compiler-construction parsing yacc

12
推荐指数
1
解决办法
4421
查看次数

简单的Flex/Bison C++

我已经找到了答案,但我没有得到任何快速回复的简单例子.

我想使用g ++编译flex/bison扫描器+解析器,因为我想使用C++类来创建AST和类似的东西.

通过互联网搜索我发现了一些漏洞,所有人都说只需要在lex文件中使用extern"C"来声明一些函数原型.

所以我的shady.y文件是

%{
#include <stdio.h>
#include "opcodes.h"
#include "utils.h"

void yyerror(const char *s)
{
    fprintf(stderr, "error: %s\n", s);
}

int counter = 0;

extern "C"
{
        int yyparse(void);
        int yylex(void);  
        int yywrap()
        {
                return 1;
        }

}

%}

%token INTEGER FLOAT
%token T_SEMICOL T_COMMA T_LPAR T_RPAR T_GRID T_LSPAR T_RSPAR
%token EOL

%token T_MOV T_NOP


%% 

... GRAMMAR OMITTED ...

%%

main(int argc, char **argv)
{
    yyparse();
}
Run Code Online (Sandbox Code Playgroud)

而shady.l文件是

%{
    #include "shady.tab.h"
%}

%%

"MOV"|"mov" { return T_MOV; …
Run Code Online (Sandbox Code Playgroud)

c++ yacc lex bison

12
推荐指数
1
解决办法
1万
查看次数

寻找lex/yacc格式的Java语法

有没有人知道lex/yacc格式语法的在线存储库?我正在寻找一种Java语法来制作一个快速的源代码转换器.

谢谢!

编辑:我最好是寻找lex/yacc因为我想使用fslex/fsyacc尽可能少的语法重写.

java yacc lex

12
推荐指数
1
解决办法
5148
查看次数

Python/YACC Lexer:Token优先级?

我正在尝试在语法中使用保留字:

reserved = {
   'if' : 'IF',
   'then' : 'THEN',
   'else' : 'ELSE',
   'while' : 'WHILE',
}

tokens = [
 'DEPT_CODE',
 'COURSE_NUMBER',
 'OR_CONJ',
 'ID',
] + list(reserved.values())

t_DEPT_CODE = r'[A-Z]{2,}'
t_COURSE_NUMBER  = r'[0-9]{4}'
t_OR_CONJ = r'or'

t_ignore = ' \t'

def t_ID(t):
 r'[a-zA-Z_][a-zA-Z_0-9]*'
 if t.value in reserved.values():
  t.type = reserved[t.value]
  return t
 return None
Run Code Online (Sandbox Code Playgroud)

但是,t_ID规则以某种方式吞下DEPT_CODE和OR_CONJ.我怎么能绕过这个?我希望那两个人比保留的词更优先.

python parsing nlp yacc

12
推荐指数
2
解决办法
2804
查看次数