我想将我的词法分析器更改为使用词法分析器创建的LexToken列表进行解析。我的lexer解析代码并创建一个所有令牌类型为CHAR的列表,我希望将其更改为一个类型为LETTER的令牌列表。(这是一个例子)这是我想要做的一个例子:
# My code to parse
code = "my text"
# My only token
tokens = ("CHAR",)
# I want to change all token CHAR to LETTER
t_CHAR = r'.{1}'
# My lexer
lexer = lex.lex
问题
我正在尝试使用Python (PLY)实现一个容错解析器,但在输入字符串的末尾使用错误恢复规则有困难。
如何从意外的输入结束中恢复?
示例
此示例语法生成表单A END A END A END A END ...的字符串。
Statement : Expressions
Expressions : Expression Expressions
|
Expression : A END
如果省略了END令牌,我希望执行错误恢复,因此解析器将识别像A A A END或A A A这样的刺。
我的方法
我添加了一个错误恢复规则,它允许我接受像A A A END
我正在尝试编译我的程序,它有一个lex文件、一个yacc文件和几个C文件,我在中看到了这个例子。
我有几个关于这个makefile.It没有指定编译器(比如gcc )的问题-- makefile如何知道如何创建目标,比如scan.o、parse.o和myprogram.o?
# Makefile example -- scanner and parser.
# Creates "myprogram" from "scan.l", "parse.y", and "myprogram.c"
#
main.c (故意忘记了";“)
#define MULTI_LINE_DEFINE int x = 1;\
int y = 2;\
int z = 3\
int v = 4;
void main()
{
MULTI_LINE_DEFINE
int w = 10;
}
gcc -E main.c -omain.pp
main.pp
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
void main
我从未见过YACC文件,这是我第一次遇到YACC程序。我的老师给了我这个程序的前缀编译器,但我甚至不知道如何运行它。我对编译器是新手,所以请简单解释一下。我试过搜索它,但我什么都不懂。
我只想知道我应该如何运行这个程序,我不需要知道每一行都做什么,因为我知道程序通常做什么,这就是重点,但我想看到它自己起作用
文件in.l
/****************************************************/
* Problem Statement :-
Assignment To check whether given expression is
infix, p