标签: forward-reference

如何在编译器中实现前向引用?

我正在用Lex和YACC创建一个编译器(实际上是Flex和Bison).该语言允许无限制地向前引用任何符号(如C#).问题是在不知道标识符是什么的情况下解析语言是不可能的.

我所知道的唯一解决方案是对整个源进行修改,然后执行"广度优先"解析,因此在使用它们的函数之前,会对类声明和函数声明等更高级别的内容进行解析.但是,这会占用大文件的大量内存,并且使用YACC很难处理(我必须为每种类型的声明/正文创建单独的语法).我也必须手写lexer(这不是一个很大的问题).

我并不关心效率(尽管它仍然很重要),因为一旦我完成它我就会重写编译器,但是我想要那个版本很快(所以如果有快速通用的话)在Lex/YACC中无法完成但可以手工完成的技术,请同时提出建议.所以现在,易于开发是最重要的因素.

这个问题有什么好的解决方案吗?这通常是如何在C#或Java等语言的编译器中完成的?

parsing yacc bison forward-reference compiler-development

5
推荐指数
1
解决办法
771
查看次数

Angular2递归组件

我正在尝试部署递归组件,如这些帖子和plnkr中所讨论的:

如何将父组件注入子组件?

> `http://plnkr.co/edit/l7jsV0k7DbGJGXPFlSPr?p=preview`
Run Code Online (Sandbox Code Playgroud)

javascript中的Angular2递归模板

但是,提供的解决方案仅处理组件对象本身,并且不解决组件应该实例化的HTML标记的问题.

子组件如何<parent> ... </parent>在其模板中使用html标记?

我会非常感谢您的帮助,也许是您可以提供的笨拙/小提琴.

recursion components forward-reference angular

5
推荐指数
1
解决办法
4973
查看次数

React.forwardRef导致样式组件错误

我目前正在运行React 16.3.1和Styled Components 3.2.5,遇到尝试使用React.forwardRef的问题。

我有一个Input组件,由包含标签和输入字段的包装div组成。但是,我希望能够将ref直接转发到输入字段,而不必通过主包装div遍历。

const Input = React.forwardRef((props, ref) => (
  <Wrapper>
    <Label htmlFor={props.id} required={props.required}>
      {props.label}
    </Label>

    <InputField
      id={props.id}
      ...
    />
  </Wrapper>
));
Run Code Online (Sandbox Code Playgroud)

那是我组件的简化版本。但是,这会产生以下错误:

Uncaught Error: Cannot create styled-component for component: [object Object]
Run Code Online (Sandbox Code Playgroud)

也许将样式化组件升级到v4会有所帮助?但是,在升级之前,我还没有找到任何解决方案吗?

谢谢。

javascript ref forward-reference reactjs styled-components

5
推荐指数
1
解决办法
1390
查看次数

如何在unmarshal期间使用JAXB XmlAdapter处理XML IDREF的前向引用?

在解组过程中是否可以IDREF在JAXB XmlAdapter中处理XML 元素的前向引用?例如,我有以下XML complexType:

<xs:complexType name="person">
    <xs:complexContent>
        <xs:sequence>
            <xs:element name="dateOfBirth" type="xs:dateTime" minOccurs="0"/>
            <xs:element name="firstName" type="xs:string" minOccurs="0"/>
            <xs:element name="gender" type="xs:string" minOccurs="0"/>
            <xs:element name="guardian" type="xs:IDREF" minOccurs="0"/>
            <xs:element name="homePhone" type="xs:string" minOccurs="0"/>
            <xs:element name="lastName" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexContent>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

其中guardian字段可以引用另一个Person文档中的别处型元件.我正在编组时使用XmlAdapter,以便第一次对象进行编组时,它会被包含编组,并且此对象的任何后续出现都将通过引用进行编组.看看以前的一个问题.但是,由于我的XML实例文档的创建方式,Person元素的第一次出现可能会在IDREF它发生之后发生.

这是可能的吗?或者我需要以不同的方式处理这个问题?谢谢!

xml jaxb forward-reference jaxb2 xml-parsing

4
推荐指数
1
解决办法
7094
查看次数

ref 在事件处理程序中没有值

目标功能:
当用户单击按钮时,会显示一个列表。当他在列表外单击时,它会关闭并且按钮应该获得焦点。(遵循可访问性指南)

我试过的:

  const hideList = () => {
    // This closes the list
    setListHidden(true);
    // This takes a ref, which is forwarded to <Button/>, and focuses it
    button.current.focus();
  }

  <Button
    ref={button}
  />
Run Code Online (Sandbox Code Playgroud)

问题:
当我检查hideList函数的作用域时,发现ref除了在 click 事件处理程序内部之外的任何地方都获得了对按钮的正确引用,它是{current: null}.
控制台输出:Cannot read property 'focus' of null

示例
https : //codepen.io/moaaz_bs/pen/zQjoLK
- 单击按钮,然后单击外部并查看控制台。

ref forward-reference reactjs

4
推荐指数
1
解决办法
1324
查看次数

A86 - 定义与前向引用冲突

我正在尝试使用 A86 为 8086 汇编一些代码。我将问题缩小到 4 行代码。

MOV BX, testz
ADD AL, [testz]

INT 20h
testz:
~     ^
#ERROR 16: Definition Conflicts With Forward Reference                    @@@@#
db ?
Run Code Online (Sandbox Code Playgroud)

你认为这段代码有什么问题?我将地址本身移动到 BX 寄存器并将 testz 地址中的字节值添加到 AL。

在一个更大的程序中,我也得到了#ERROR 13: Byte/Word Combination Not Allowed.

但是label是一个字 where[label]是一个字节。为什么我的编译器不能区分这些?

ADD BL, [second]
MOV BX, second
~             ^
#ERROR 13: Byte/Word Combination Not Allowed   
second:
~      ^
#ERROR 16: Definition Conflicts With Forward Reference                    @@@@#
db ?
Run Code Online (Sandbox Code Playgroud)

因为我看不到任何字节/字冲突。


我的编译器同等地解释 offset testz 和 …

assembly forward-reference x86-16 a86

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

嵌套递归函数的Scala前向引用

我有一个非常简单的方法定义与嵌套的递归函数:

def bar(arr : Array[Int]) : Int = {
  val foo : Int => Int = (i: Int) => if(i == 0) 0 else i + foo(i-1)
  foo(3)
}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

<console>:36: error: forward reference extends over definition of value foo
     val foo : Int => Int = (i: Int) => if(i == 0) 0 else i + foo(i-1)
                                                              ^
Run Code Online (Sandbox Code Playgroud)

如果我只是把val foo:... = ...行单独放置,而不是嵌套在def中,一切正常

recursion scala forward-reference

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

Java - 枚举 - 逻辑循环引用

想象一下以下组成的例子:

public enum Hand {
  ROCK(SCISSORS),
  PAPER(ROCK),
  SCISSORS(PAPER);

  private final Hand beats;

  Hand(Hand beats) {
    this.beats = beats;
  }
}
Run Code Online (Sandbox Code Playgroud)

我将收到Illegal forward reference前向引用的错误SCISSORS.


有没有办法在Java中处理这样的前向引用?

或者你会如何模拟这种情况,你在几个枚举值之间有一个逻辑循环引用?

java enums forward-reference circular-reference

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

我们如何在 angular 服务中使用 forwardRef 来避免循环依赖?

我已经阅读了几篇关于在 angular 中解决循环依赖的文章,所有文章都提到了使用 forwardRef 来解决循环依赖。我在网上找到的所有参考资料都只涉及组件服务交互。

我的场景是这样的:

如果两个服务相互依赖并且导致类循环依赖问题。我找不到与使用 forwardRef 相关的适当线程或任何解决两个服务之间循环依赖的最佳方法。

如果有人遇到任何此类类似的问题并就如何处理此问题提出建议,那将是可观的。

我知道循环依赖是可以避免的,但是如果我们需要以适当的方式进行,那么我应该采用什么方法?

谢谢

forward-reference angular-services angular

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

Scala前向引用

我是Scala的新手.我正在制作一个游戏,我有一个角色可以访问的类型列表Location.我有一个案例类和一个伴随对象来实现这一目标.

LinkedLocationsinside Location是一个类型数组,Location可以包含一个位置可以导致的任意数量的位置.在这种情况下,1号房间通向2号房间,反之亦然.

case class Location(name: String, desc: String, linkedLocations: Array[Location]){}

object Location {

  val none: Location = Location("none","none",Array(none))
  val room1: Location = Location("room 1","you are in room 1",Array(room2))
  val room2: Location = Location("room 2","you are in room 2",Array(room1))

  room1.linkedLocations.foreach(location=>println(location.name))
}
Run Code Online (Sandbox Code Playgroud)

我试过让它们变得懒惰,但最终会出现堆栈溢出.如何修复这样的引用问题?有没有更好的方法来设计这个?

scala runtime-error forward-reference case-class

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

C前向引用结构 - 1)必须带指针?2)必须初始化?

我正试图在C中转发引用(嵌套)结构.

这意味着我有一个结构,在其中我引用了稍后声明的另一个结构.

如果我将嵌套结构声明为指针,并使用值初始化它,它就可以工作.

以下代码有效:

#include <stdio.h>

struct computer{
    double cost;
    int year;
    char cpu_type[16];
    struct cpu_speed *sp; //this is the question (1)
};

struct cpu_speed{
    int num;
    char type[16];
};

typedef struct computer SC;
typedef struct cpu_speed SS;

void DataR(SC *s);
void DataP(SC *s);

int main(){
   // this is question (2)
    SS speed = {4,"giga"};    
    SC model[2] = {
    { 0,1990, "intel", &speed},
    { 0,1990, "intel", &speed}
    };

    int i;
    for(i=0;i<2;i++) {
        printf("computer no. %d \n", i+1);
        DataR(&model[i]);
    }
    printf("here's …
Run Code Online (Sandbox Code Playgroud)

c struct pointers initialization forward-reference

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

Scala错误:当代码出现在函数中时,"前向引用扩展了值的定义"

我正在尝试使用Scala 2.11.7编译以下代码.

object LucasSeq {
  val fibo: Stream[Int] = 0 #:: 1 #:: fibo.zip(fibo.tail).map { pair =>
    pair._1 + pair._2
  }

  def firstKind(p: Int, q: Int): Stream[Int] = {
    val lucas: Stream[Int] = 0 #:: 1 #:: lucas.zip(lucas.tail).map { pair =>
      p * pair._2 - q * pair._1
    }
    lucas
  }
}
Run Code Online (Sandbox Code Playgroud)

fibo基于Scala Stream文档中Fibonacci序列示例,它可以工作.

但是,firstKind试图用参数推广序列pq(制作第一类Lucas序列)的函数有以下错误:

LucasSeq.scala:7: error: forward reference extends over definition of value lucas
    val …
Run Code Online (Sandbox Code Playgroud)

scala compiler-errors forward-reference lazy-sequences

0
推荐指数
1
解决办法
964
查看次数