小编Too*_*the的帖子

如何在Javascript中实现词法分析

嘿伙计们,谢谢你的阅读

我目前正在尝试使用Google风格的计算器.您输入一个字符串,它确定是否可以计算并返回结果.

我从基础开始慢慢开始:+ - / *和括号处理.

我愿意随着时间的推移改进计算器,并且在前一段时间学习了一些关于词法分析的知识,我构建了一个令牌列表和相关的正则表达式模式.

这种工作很容易适用于Lex和Yacc等语言,除了我正在开发一个仅限Javascript的应用程序.

我试图将这个想法转录成Javascript,但我无法弄清楚如何以干净漂亮的方式处理所有内容,尤其是嵌套的括号.


分析

让我们定义一个计算器查询:

// NON TERMINAL EXPRESSIONS //
query     -> statement
query     -> ? // means end of query

statement -> statement operator statement
statement -> ( statement )
statement -> prefix statement
statement -> number

number    -> integer
number    -> float

// TERMINAL EXPRESSIONS //
operator  -> [+*/%^-]

prefix    -> -

integer   -> [0-9]+

float     -> [0-9]+[.,][0-9]+
Run Code Online (Sandbox Code Playgroud)

使用Javascript

词法分析包括验证没有任何东西看起来不像终端表达式之一:运算符,前缀,整数和浮点数.哪个可缩短为一个正则表达式:

(我添加了空格以使其更具可读性)

var calcPat = 
/^ (\s*
    ( ([+/*%^-]) | ([0-9]+) …
Run Code Online (Sandbox Code Playgroud)

javascript regex pattern-matching lexical-analysis

15
推荐指数
1
解决办法
4762
查看次数

从Array获取随机对象

我想从数组中获取随机对象,有什么方法可以从可变数组中找到随机对象?

iphone arc4random

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

如何停止线程如果Jmeter中的响应断言失败

我想在我的脚本中实现错误处理(如LR中的textcheck).

我能够使用Response Assertion验证文本.

但我的问题是如果响应断言(文本检查)失败,如何停止线程.

jmeter

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

如何从Delphi中的函数返回一个对象而不会导致访问冲突?

我有一个返回TStringList的delphi函数,但是当我返回一个值并尝试使用它时,我得到一个访问冲突错误,即

myStringList := FuncStringList();
myStringList.Items.Count   // <-- This causes an access violation

// function FuncStringList
function FuncStringList:TStringList;
var
  vStrList:TStringList;
begin

  vStrList := TStringList.Create;
   ...
  // Fill the vStrList

  Result := vStrList 
  vStrList.Free;    //<- when i free here, this function will cause AccessViolation
end;
Run Code Online (Sandbox Code Playgroud)

如何返回TStringList并仍然在本地函数中释放它?

delphi

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

Gnuplot累积栏问题

我有一些数据.

#Time  Distance
 1   3
 2   5
 4   9
 8  11
12  17
14  20
16  34
20  40
Run Code Online (Sandbox Code Playgroud)

我想绘制gnuplot中的累计距离...(它应该很容易),但我不知道如何.

X

plot gnuplot

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

Facebook上的OpenGraph API(FBGraph)

我正在尝试使用FBGraph让我的应用程序在用户墙上发布消息.但是,所有的API对我来说都是陌生的,我只是想改变一些事情,看看会发生什么.现在,我收到此错误消息

{
   "error": {
      "type": "OAuthException",
      "message": "Invalid redirect_uri: Given URL is not allowed by the Application configuration."
   }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道redirect_uri意味着什么?在Facebook的"应用程序设置"页面上会出现什么?

facebook opengraph ruby-on-rails-3

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

使用没有内容的文件名复制目录结构

我有一个巨大的电影文件目录结构.为了分析该结构,我想复制整个目录结构,即文件夹和文件但是我不想复制所有的电影文件,而我想保留文件名.理想情况下,我使用原始电影文件名获得零字节文件.

我试图然后rsync到我的远程机器,它没有获取链接文件.

有没有想法如何做到没有编写脚本?

linux rsync structure copy

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

xcode 4.5.1.标题搜索路径不起作用,找不到<directory/file.h>文件

我在主目录中添加了一个include目录.我可以从构建目录运行"ls -l~/include".我在"Header Seach Path"和"User Header Search Path"中添加了该目录.在这两个地方,我都尝试过非递归和递归.但xcode 4.5.1无法在任何情况下找到第一个声明的头文件.

它在源代码call.m中声明为:

 #include <directory/file.h>
Run Code Online (Sandbox Code Playgroud)

我找不到"词法或预处理器问题'目录/ file.h'文件."

但是当从cli运行xcodebuild时,它没有任何问题来构建源代码.

我已经尝试了很多在互联网上找到的建议

  • 将一个包含在/ usr/om我的驱动器中
  • 向项目添加索引,添加没有副本的文件,并且不标记"添加到目标".
  • 重启xcode.
  • 指定所有特定路径.

但仍然没有去.

问题是什么.xcode中的Bug?

include xcode4.5

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

在制作CUDA 5.0样本时遇到与MPI相关的问题(Mac OS X ML)

当我尝试制作CUDA 5.0样本时,会出现错误:

Makefile:79:*未找到MPI,没有构建simpleMPI ..停止.

我已经尝试下载并构建最新版本的Open MPI,以支持Open MPI"FAQ/Platforms/OS X/6.我如何不使用OS X捆绑的Open MPI?" 页面,它没有解决错误.

make -j 4 2>&1 | tee make.out
[ lots of output ]
make[2]: *** [mpi/man/man3/MPI_Comm_disconnect.3] Error 127
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1
Run Code Online (Sandbox Code Playgroud)

我现在很困惑,我不知道该怎么办.

macos cuda makefile mpi openmpi

13
推荐指数
3
解决办法
5220
查看次数

Clickatell替代短信网关?

我们即将上线,但Clickatell似乎有问题.结算和服务器问题!!

快速的谷歌搜索显示了长期的问题记录.

然而,他们最初确实给人留下了良好的印象,但现在我们根本不确定 - 他们似乎并不稳定!

那么,哪个可靠的短信网关可以让我向以色列发送简单的英文短信(以编程方式通过HTTP API)?

看到目前为止:

sms bulksms sms-gateway

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