v8::internal::Parser中的Expression解析
来源:互联网 发布:淘宝达人认证大v 编辑:程序博客网 时间:2024/05/27 03:29
首先需要参考Ecma-262文档中的附录A.3Expression中的产生式,v8中的代码是据此进行语法分析的,它采用的算符优先的语法分析方法,在token.h中给出了各种算符的precedence,关于算符优先算法,wiki中给出如下的伪代码
http://en.wikipedia.org/wiki/Operator-precedence_parser
parse_expression ()
return parse_expression_1 (parse_primary(), 0)
parse_expression_1 (lhs, min_precedence)
while the next token is a binary operatorwhose precedence is >= min_precedence
op := next token
rhs := parse_primary ()
while the next token is a binaryoperator whose precedence is greater
than op's, or aright-associative operator
whose precedence is equal toop's
lookahead := next token
rhs := parse_expression_1 (rhs, lookahead'sprecedence)//这里递归,当前token指向rhs,lookahead下一个token的优先级以后才能确定是否递归,所以在进入递归后,一定能保证第一个循环时nexttoken的优先级大于等于参数指定的优先级
lhs := the result of applying op withoperands lhs and rhs
return lhs
这里需要介绍两个术语lhs(left hand side),rhs(right hand side),分别表示左操作数和右操作数。该算法简而言之,就是比较算符的优先级,如果后出现的算符的优先级更高,那么就继续递归,否则就计算结果,并把结果作为左操作数继续循环。
该算法在Parser::ParseBinaryExpression函数(定义于parser.cc)中得到了充分的体现,该函数主要用于二元表达式和条件表达式的分析,其中递归调用了ParseBinaryExpression函数,且传入的precedence在当前操作符基础上加一,这是因为这里的二元操作符都是左结合的,在相同优先级情况下,左边的操作符的优先级要高- v8::internal::Parser中的Expression解析
- v8::internal::Parser中的Expression解析
- 439. Ternary Expression Parser
- 439. Ternary Expression Parser
- v8::internal::Utf16CharaterStream类
- leetcode 439. Ternary Expression Parser
- LeetCode 439. Ternary Expression Parser
- 【V8.Internal】Building V8 from bootstrap
- 表达式剖析器(THE EXPRESSION PARSER)
- Leetcode 439. Ternary Expression Parser (递归,栈)
- [Leetcode] 439. Ternary Expression Parser 解题报告
- LR-Parser解析器
- Parser 解析器
- 解析xml xml parser
- easyui解析器parser
- jquery.parser源码解析
- lyric-parser解析歌词
- Python中的html.parser
- 2010:水仙花数
- php过载后无法恢复的原因分析(eaccelerator造成)
- java获得项目绝对路径
- Struts2-Json-Plugin 的使用(翻译自官方文档)
- nativexml4.07版改动
- v8::internal::Parser中的Expression解析
- Redis:九、redis使用场景
- 【java学习】java如何链接sql server2005?
- 关于C语言中scanf()的相关问题
- 谷歌测试和传统QA区别
- 【3DSmax】3DSmax9基础建模教程—读书笔记1(第一课)
- MongoDB资料汇总
- 关于排序算法中的稳定与不稳定的说法
- Redis资料汇总