- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
晚上好,Stack Overflow。我想开发一个基于非常简单的上下文无关语法的表达式解释器:
基本上,该语言由 2 个基本语句构成
( SET var 25 ) // Output: var = 25
( GET ( MUL var 5 ) ) // Output: 125
( SET var2 ( MUL 30 5 ) ) //Output: var2 = 150
现在,我很确定我应该做什么来解释一个语句:1) 词法分析将一个语句转换成一个标记序列 2) 语法分析以获得一个符号表(带有变量的 HashMap 和它们的值)和语法树(执行 GET 语句)到 3)执行树的中序访问以获得我想要的结果。
我想要一些关于读取源文件的解析方法的建议。考虑到解析器应该忽略任何空格、制表符或换行符,是否可以使用 Java 模式来获取我要分析的一般语句?有没有一种好方法来阅读像这样格式怪异(并且可能更复杂)的语句
(
SET var
25
)
不会将解析器与左括号和右括号混淆?
例如
Scanner scan; //scanner reading the source file
String pattern = "..." //ideal pattern I've found to represent an expression
while(scan.hasNext(pattern))
Interpreter.computeStatement(scan.next(pattern));
它会是解决这个问题的可行方案吗?
最佳答案
Ira Braxter提出的解决方案:
Your title is extremely confused. You appear to want to parse what are commonly called "S-expressions" in the LISP world; this takes a (simple but) context-free grammar. You cannot parse such expressions with regexps. Time to learn about real parsers.
Maybe this will help: stackoverflow.com/a/2336769/120163
关于java - 基于上下文无关文法解析正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27387166/
我正在尝试实现一个表达式处理语法(处理嵌套括号和其他内容)。到目前为止我有以下内容,但它们无法处理某些情况(成功/失败情况出现在以下代码块之后)。有人知道这是怎么回事吗? 注意:varname +=
我在 ANTLR 语法中写下了以下语句: loopStatement : 'loop' (statement|exit)* 'end' 'loop' ';' ; 如果我没理解错的话,
为 C 的一个子集编写一个简单的 BNF 语法,它支持多个语句,包括赋值、if-else 和没有 block 语句的 while 语句。为你的非终结符使用有意义的名字(相对于神秘的字母)。假设变量由单
我正在尝试为以下语法创建一个 LALR(1) 解析器并发现一些移位/归约冲突。 S := expr expr := lval | ID '[' expr ']' OF expr lval := ID
根据这个paper的规则: If A is the start nonterminal, put EOF in FOLLOW(A) Find the productions with A on the
为 k > 1 制作人工 LR(k) 文法很容易: Input: A1 B x Input: A2 B y (introduce reduce-reduce con
在使用 make 和 bison 的项目中,我很难指定编译语法 grammar.tab.c 依赖于语法输入 grammar.y,每个目标文件都依赖于相应的源文件(包括 grammar.tab.o),并
我正在尝试从语法分析树中提取乔姆斯基范式 (CNF) - 句子的语法产生式: (ROOT (S (NP (DT the) (NNS kids)) (VP (VBD opened)
我知道 ANTLR 可以接受 LL(*) 文法。但是,有没有办法使用 ANTLR 检查语法是否是 LL(1)? 最佳答案 options { k = 1; } 如果您的语法不在 LL(1) 中,
我还没有找到答案。是否存在无法转换为 LL(1) 的上下文无关且无歧义的语法? 我发现了一个我不知道如何转换为 LL(1) 的作品:parameter-type-list C99中的生产: param
我是一名优秀的程序员,十分优秀!