如何最好地处理许多接受案件

时间:2017-02-16 23:09:17

标签: java compiler-construction lexical-analysis

对于班级我正在从事翻译,目前正在研究扫描仪。作为一个将被多次调用的类,我希望它能够针对速度进行优化。在扫描仪中,要对操作员进行分类,您必须将当前令牌与6个左右的操作员进行比较。什么方法最适合速度,但也是为了便于阅读。

  1. if语句中的许多案例
  2. 循环遍历每个运算符的char数组并进行比较
  3. 切换声明
  4. 这是我能想到的唯一案例。哪个最好,或者如果你有更好的方法请分享。我实现了#2,因为它占用了最少的代码行。

2 个答案:

答案 0 :(得分:1)

任何明智的手写扫描仪都基于switch语句。请注意,如果您将特殊字符直接返回给解析器,则可以节省案例操作:

# using the session to update
session.query(Category).filter_by(id=category.id).update({
    "cat_name": category.id,
    "assigned_user": category.assigned_user,
    "includes": category.includes,
    "excludes": category.excludes,
    "parent_id": category.parent_id
})

# using the category object to edit, then commit
category_from_db = session.query(Category).filter_by(id=category.id).first()
category_from_db.cat_name = category_json['cat_name']
category_from_db.assigned_user = category_json['assigned_user']
category_from_db.excludes = category_json['excludes']
category_from_db.includes = category_json['includes']
category_from_db.parent_id = category_json['parent_id']
session.commit()

答案 1 :(得分:-1)

对于少数项目,差异很小。如果你有很多物品,你一定要使用开关。

如果交换机包含五个以上的项目,则使用查找表或哈希列表实现。这意味着与if列表相比,所有项目都获得相同的访问时间,其中最后一个项目需要更长的时间才能到达,因为它必须首先评估每个先前的条件。

同样@Qix评论switch它更具可读性。