标签: lex

像Perl或Python中的lex一样模拟功能

这是交易.有没有办法让基于多个正则表达式的行中的字符串标记?

一个例子:

我必须根据不同的正则表达式获取所有href标签,相应的文本和其他一些文本.所以我有3个表达式,并且想要对行进行标记并提取与每个表达式匹配的文本标记.

我实际上是使用flex完成的(不要与Adobe混淆),这是一个很好的老lex的实现.lex通过基于表达式执行"actions"来提供一种优雅的方法.人们也可以控制lex读取文件的方式(基于块/行的读取).

问题是flex实际上产生的C/C++代码实际上是标记化工作.我有一个包含所有这些东西的make文件.我想知道perl/python是否能以某种方式做同样的事情.它只是我想用一种编程语言本身做我喜欢的一切.

令牌化只是我想要在我的应用程序中执行的操作之一.

除了perl或python之外,任何语言(功能也可以)都可以这样做吗?

我在这里读过关于PLY和ANTLR的内容(解析,我在哪里可以了解它).

但有没有办法在python本身自然地做到这一点?请原谅我的无知,但这些工具是否适用于任何受欢迎的产品/服务?

谢谢.

python perl parsing lex

4
推荐指数
3
解决办法
1357
查看次数

Lex/Yacc:输入前打印消息

我试图找出在使用lex/yacc(flex/bison)时如何显示消息/提示.

例如,main看起来像这样:

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

其中调用yacc,调用yylex().这会产生一个等待STDIN的空白行.我怎样才能显示如...的消息

message $ _

代替

_

下划线表示光标位置,等待STDIN的输入......

忘了提,我想重复打印的提示......所以在每次lex/yacc请求从stdin输入之前...

yacc lex prompt bison flex-lexer

4
推荐指数
1
解决办法
1282
查看次数

适用于R的Lex和YACC工具?

R有这样的解析工具吗?它不一定是我的案例的lex/yacc兼容工具.

(我是R新手)

编辑:我对使用R实现另一种语言感兴趣

parsing yacc lex r

4
推荐指数
1
解决办法
1434
查看次数

ANTLR词法分析器根本无法预测

我有以下语法:

rule: 'aaa' | 'a' 'a';
Run Code Online (Sandbox Code Playgroud)

它可以成功解析字符串'aaa',但它无法解析'aa'并出现以下错误:

line 1:2 mismatched character '<EOF>' expecting 'a'
Run Code Online (Sandbox Code Playgroud)

仅供参考,这是词法分析器的问题而不是解析器,因为我甚至没有调用解析器.主要功能如下:

@members {
  public static void main(String[] args) throws Exception {
    RecipeLexer lexer = new RecipeLexer(new ANTLRInputStream(System.in));
    for (Token t = lexer.nextToken(); t.getType() != EOF; t = lexer.nextToken())
      System.out.println(t.getType());
  }
}
Run Code Online (Sandbox Code Playgroud)

结果与更明显的版本相同:

rule: AAA | A A;
AAA: 'aaa';
A: 'a';
Run Code Online (Sandbox Code Playgroud)

显然,ANTLR词法分析器尝试将输入'aa'与失败的规则AAA匹配.除了ANTLR是一个LL(*)解析器或其他什么,词法分析器应该与解析器分开工作,它应该能够解决歧义.语法在良好的旧lex(或flex)下运行良好,但在ANTLR中似乎没有.那么这里的问题是什么?

谢谢您的帮助!

antlr lex lexer antlr3

4
推荐指数
1
解决办法
2269
查看次数

如何在单独的文件中使用`yy_scan_string(const char *str)`(由 lex yacc 生成)

我想在 my 中使用YY_BUFFER_STATE yy_scan_string(const char *str)和其他功能,我做了以下事情:yyparse()main.cpp

extern "C"{
extern YY_BUFFER_STATE yy_scan_string(const char *str);
}
Run Code Online (Sandbox Code Playgroud)

但是有一个错误error:YY_BUFFER_STATE' does not name a type`,然后我做了:

extern yy_buffer_state;
typedef yy_buffer_state *YY_BUFFER_STATE;
extern int yyparse();
extern YY_BUFFER_STATE yy_scan_buffer(char *, size_t);
Run Code Online (Sandbox Code Playgroud)

但是同样的问题,怎么办,谢谢,非常感谢您的帮助!!

这是 main.cpp 文件。#include "main.h"

 #include <string.h>
 extern "C"{void scan_string(const char* str);}
 int yyparse();
 void test::getvalue(int& var)
 {
    if (var!=0)
        std::cout<<"True"<<std::endl;
    else
        std::cout<<"False"<<std::endl;
  }

  int main(){
     std::string str="T+F";
     //how to send str as an Input to parse?

     yyparse();
     return 0;
   }
Run Code Online (Sandbox Code Playgroud)

c++ redirect yacc lex bison

4
推荐指数
1
解决办法
4065
查看次数

bison没有创建tab.h文件

我是flex和bison的新手,我现在已经在这个项目上工作了几天.我有一个以前工作正常的野牛文件,我改变了一点,现在它没有创建一个tab.h文件...我已经将错误和我的野牛和flex文件放在下面...错误:

  In file included from stojk_3_2.y:55:
  stojkovic_project1_2.l:4:27: error: stojk_3_2.tab.h: No such file or directory
  stojk_3_2.tab.c: In function ‘int yyparse()’:
  stojk_3_2.tab.c:1416: warning: deprecated conversion from string constant to ‘char*’
  stojk_3_2.tab.c:1562: warning: deprecated conversion from string constant to ‘char*’
Run Code Online (Sandbox Code Playgroud)

.y文件:

%{
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define YYSTYPE double

int yylex(void);

static
void yyerror(char *s)
{
printf("yyerror: %s\n", s);
}

%}

%token PLUS
%token MINUS
%token MULT
%token DIVIDE

%token LPAREN
%token RPAREN

%token UNSIGNEDINTEGER

%left PLUS MINUS
%left MULT DIVIDE …
Run Code Online (Sandbox Code Playgroud)

lex bison flex-lexer

4
推荐指数
1
解决办法
8303
查看次数

'?'之间的区别 和正则表达式中的'*'

我正在学习正则表达式,以便在lex程序中使用它们.我在这里看到,在正则表达式中:

'*' matches 0 or more occurances of pattern
'?' matches 0 or 1 occurance of the pattern

通过这个我有点困惑.我的意思是:

  • 如果我们可以用'*'匹配0或更多,那我们为什么要使用'?' 元字符?
  • 我们将Float定义为: FL [0-9]*"."[0-9]+
  • 我们可以将其定义为:FL [0-9]?"."[0-9]+对于0.999或.999等数字(即,在小数点之前只有一位数的数字.)?
  • 任何人都可以解释一下吗?提前感谢你:).

    regex lex flex-lexer

    4
    推荐指数
    1
    解决办法
    2931
    查看次数

    lex和yacc(符号表生成)

    我是lex和yacc以及编译器设计的新手.我想知道在哪个阶段(词法,句法或任何其他阶段)以及如何生成符号表?

    我是否可以简要描述y.output文件,该文件是通过给yacc提供-v选项生成的.我试图查看它但没有得到太多信息.

    我能否知道除了编译器设计之外还使用lex和yacc的其他应用程序.

    yacc lex symbol-table

    4
    推荐指数
    1
    解决办法
    4564
    查看次数

    PLY LEX和YACC的问题

    我试图运行PLY的一个简单例子的第一部分,但我遇到了一个奇怪的错误.当我运行以下代码时,它给我一个关于lex.lex()的错误任何人都知道问题是什么?

    import ply.lex as lex
    
    tokens = [ 'NAME','NUMBER','PLUS','MINUS','TIMES', 'DIVIDE', 'EQUALS' ]
    t_ignore =  '\t'
    t_PLUS = r'\+'
    t_MINUS = r'-'
    t_TIMES = r'\*'
    t_DIVIDE = r'/'
    t_EQUALS = r'='
    t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*'
    def t_NUMBER(t):
        r'\d+'
        t.value = int(t.value)
        return t
    
    lex.lex() # Build the lexer
    
    Run Code Online (Sandbox Code Playgroud)

    这是错误:

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-2-e527bd224769> in <module>()
         14     return t
         15 
    ---> 16 ply.lex.lex() # Build the lexer
    
    c:\python27\lib\site-packages\ply\lex.pyc in lex(module, object, debug, optimize, lextab, reflags, nowarn, outputdir, debuglog, errorlog) …
    Run Code Online (Sandbox Code Playgroud)

    python parsing yacc lex ply

    4
    推荐指数
    2
    解决办法
    1217
    查看次数

    Octal digit in ANSI C grammar (lex)

    I looked ANSI C grammar (lex).

    And this is octal digit regex

    0{D}+{IS}?      { count(); return(CONSTANT); }
    
    Run Code Online (Sandbox Code Playgroud)

    My question is why do they accept something like 0898?

    It's not an octal digit.

    So i thought they would consider that, but they just have wrote like that.

    Could you explain why is that? Thank you

    c regex grammar lex

    4
    推荐指数
    1
    解决办法
    77
    查看次数

    标签 统计

    lex ×10

    yacc ×5

    bison ×3

    flex-lexer ×3

    parsing ×3

    python ×2

    regex ×2

    antlr ×1

    antlr3 ×1

    c ×1

    c++ ×1

    grammar ×1

    lexer ×1

    perl ×1

    ply ×1

    prompt ×1

    r ×1

    redirect ×1

    symbol-table ×1